aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoheras2013-05-31 12:10:57 +0000
committerjoheras2013-05-31 12:10:57 +0000
commitdaf76667b7212664ce83c8fd5aa5d48cb823e866 (patch)
tree3ee9fc4547bafb531d3159f355c9dd8e24ad2508
parentfb355593a50e32ca3040491cd8acf847c8d3c181 (diff)
Moving ML4PG from coq directory to contrib directory.
-rw-r--r--contrib/ML4PG/aux_files/headers.txt35
-rw-r--r--contrib/ML4PG/coq/auxiliary_files.el23
-rw-r--r--contrib/ML4PG/coq/feature_extraction.el862
-rw-r--r--contrib/ML4PG/coq/lemmas.txt44
-rw-r--r--contrib/ML4PG/coq/matlab_interaction.el627
-rw-r--r--contrib/ML4PG/coq/menus.el304
-rw-r--r--contrib/ML4PG/coq/save_lemmas.el117
-rw-r--r--contrib/ML4PG/coq/shortcuts.el14
-rw-r--r--contrib/ML4PG/coq/storage.el51
-rw-r--r--contrib/ML4PG/coq/views.txt1
-rw-r--r--contrib/ML4PG/coq/weka.el81
-rw-r--r--contrib/ML4PG/doc/ml4pg.v659
-rw-r--r--contrib/ML4PG/doc/ml4pg_manual.pdfbin0 -> 1100379 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/algorithm1.pngbin0 -> 249326 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/algorithm2.pngbin0 -> 253897 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/clusters1.pngbin0 -> 117359 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/clusters1pg.pngbin0 -> 138300 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/clusters2.pngbin0 -> 93270 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/clusters2pg.pngbin0 -> 69517 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/export.pngbin0 -> 65552 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig1.pngbin0 -> 32650 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig1pg.pngbin0 -> 102528 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig2.pngbin0 -> 83087 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig3.pngbin0 -> 89061 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig4.pngbin0 -> 129581 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig5.pngbin0 -> 106362 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/frequencies.pngbin0 -> 125515 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/granularity.pngbin0 -> 122487 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/levels.pngbin0 -> 261362 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/ml_system1.pngbin0 -> 249326 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/ml_system2.pngbin0 -> 179177 bytes
-rw-r--r--contrib/ML4PG/doc/src/ml4pg_manual.bib12
-rw-r--r--contrib/ML4PG/doc/src/ml4pg_manual.pdfbin0 -> 1100379 bytes
-rw-r--r--contrib/ML4PG/doc/src/ml4pg_manual.tex209
-rw-r--r--contrib/ML4PG/icons/Clustering.pngbin0 -> 2513 bytes
-rw-r--r--contrib/ML4PG/icons/Hint.pngbin0 -> 4843 bytes
-rw-r--r--contrib/ML4PG/icons/clustering.xpm30
-rw-r--r--contrib/ML4PG/icons/sh-hint.xpm160
-rw-r--r--contrib/ML4PG/icons/sh-hint2.xpm103
-rw-r--r--contrib/ML4PG/icons/sh.xpm21
-rw-r--r--contrib/ML4PG/icons/sh1.xpm21
-rw-r--r--contrib/ML4PG/icons/test.xpm38
-rw-r--r--contrib/ML4PG/lemmas.txt55
-rw-r--r--contrib/ML4PG/libs/coq/test/peano.csv73
-rw-r--r--contrib/ML4PG/libs/coq/test/peano_names73
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/bigop.csv157
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/bigop_names157
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/bigop_tactics.csv156
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/binomial.csv47
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/binomial_names47
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/binomial_tactics.csv48
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/binomial_tree.csv48
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/matrix.csv396
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/matrix_names396
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/matrix_tactics.csv395
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/series.csv22
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/vector.csv236
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/vector_names236
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/vector_tactics.csv273
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/vector_tree.csv273
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/seq.csv394
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/seq_names394
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/seq_tactics.csv393
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/seq_tree.csv393
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrbool.csv236
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrbool_names236
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrbool_tactics.csv236
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrbool_tree.csv236
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrnat.csv326
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrnat_names326
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrnat_tactics.csv326
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrnat_tree.csv326
-rw-r--r--contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix.csv46
-rw-r--r--contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_names49
-rw-r--r--contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_tactics.csv45
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/available.txt1
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/expt.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/expt_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/expt_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/factorial.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/factorial_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/factorial_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/fib.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/fib_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/fib_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/lessp.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/lessp_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/lessp_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/m1.csv3
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/m1_names3
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/m1_tactics.csv2
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/multiplication.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/multiplication_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/multiplication_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/power.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/power_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/power_tactics.csv5
-rw-r--r--contrib/ML4PG/ml4pg.el56
-rw-r--r--contrib/ML4PG/out.arff108
-rw-r--r--contrib/ML4PG/out_bis.arff72
-rw-r--r--contrib/ML4PG/ssreflect/auxiliary_files.el23
-rw-r--r--contrib/ML4PG/ssreflect/feature_extraction_2.el1282
-rw-r--r--contrib/ML4PG/ssreflect/feature_extraction_2.el~1282
-rw-r--r--contrib/ML4PG/ssreflect/lemmas.txt44
-rw-r--r--contrib/ML4PG/ssreflect/matlab_interaction.el646
-rw-r--r--contrib/ML4PG/ssreflect/menus.el308
-rw-r--r--contrib/ML4PG/ssreflect/save_lemmas.el121
-rw-r--r--contrib/ML4PG/ssreflect/shortcuts.el14
-rw-r--r--contrib/ML4PG/ssreflect/storage.el51
-rw-r--r--contrib/ML4PG/ssreflect/views.txt1
-rw-r--r--contrib/ML4PG/ssreflect/weka.el112
-rw-r--r--contrib/ML4PG/temp.csv72
-rw-r--r--contrib/ML4PG/temp3.arff107
-rw-r--r--contrib/ML4PG/views.txt1
-rw-r--r--contrib/ML4PG/weka.jarbin0 -> 6473856 bytes
115 files changed, 14873 insertions, 0 deletions
diff --git a/contrib/ML4PG/aux_files/headers.txt b/contrib/ML4PG/aux_files/headers.txt
new file mode 100644
index 00000000..320270ae
--- /dev/null
+++ b/contrib/ML4PG/aux_files/headers.txt
@@ -0,0 +1,35 @@
+@relation empty
+
+@attribute '1' real
+@attribute '2' real
+@attribute '3' real
+@attribute '4' real
+@attribute '5' real
+@attribute '6' real
+@attribute '7' real
+@attribute '8' real
+@attribute '9' real
+@attribute '10' real
+@attribute '11' real
+@attribute '12' real
+@attribute '13' real
+@attribute '14' real
+@attribute '15' real
+@attribute '16' real
+@attribute '17' real
+@attribute '18' real
+@attribute '19' real
+@attribute '20' real
+@attribute '21' real
+@attribute '22' real
+@attribute '23' real
+@attribute '24' real
+@attribute '25' real
+@attribute '26' real
+@attribute '27' real
+@attribute '28' real
+@attribute '29' real
+@attribute '30' real
+
+@data
+
diff --git a/contrib/ML4PG/coq/auxiliary_files.el b/contrib/ML4PG/coq/auxiliary_files.el
new file mode 100644
index 00000000..95a4ce0a
--- /dev/null
+++ b/contrib/ML4PG/coq/auxiliary_files.el
@@ -0,0 +1,23 @@
+(defun ml4pg-quicksort-pair (list)
+ (if (<= (length list) 1)
+ list
+ (let ((pivot (cadar list)))
+ (append (ml4pg-quicksort-pair (remove-if-not #'(lambda (x) (> (cadr x) pivot)) list))
+ (remove-if-not #'(lambda (x) (= (cadr x) pivot)) list)
+ (ml4pg-quicksort-pair (remove-if-not #'(lambda (x) (< (cadr x) pivot)) list))))))
+
+
+(defun ml4pg-zip (l1 l2)
+ (do ((temp1 l1 (cdr temp1))
+ (temp2 l2 (cdr temp2))
+ (res nil))
+ ((endp temp1) res)
+ (setf res (append res (list (append (list (car temp1)) (list (car temp2))))))))
+
+(defun ml4pg-unzip (l)
+ (do ((temp l (cdr temp))
+ (res1 nil)
+ (res2 nil))
+ ((endp temp) (list (reverse res1) (reverse res2)))
+ (progn (setf res1 (cons (caar temp) res1))
+ (setf res2 (cons (cadr (car temp)) res2)))))
diff --git a/contrib/ML4PG/coq/feature_extraction.el b/contrib/ML4PG/coq/feature_extraction.el
new file mode 100644
index 00000000..4d934143
--- /dev/null
+++ b/contrib/ML4PG/coq/feature_extraction.el
@@ -0,0 +1,862 @@
+;; Variables to store the tree depth levels
+
+(defvar ml4pg-tdl1 nil)
+(defvar ml4pg-tdl2 nil)
+(defvar ml4pg-tdl3 nil)
+(defvar ml4pg-tdl4 nil)
+(defvar ml4pg-tdl5 nil)
+
+;; Variables to store the information about the tactic level
+
+(defvar ml4pg-intro nil)
+(defvar ml4pg-case nil)
+(defvar ml4pg-simpltrivial nil)
+(defvar ml4pg-induction nil)
+(defvar ml4pg-simpl nil)
+(defvar ml4pg-rewrite nil)
+(defvar ml4pg-trivial nil)
+
+(defvar ml4pg-hypothesis nil)
+
+(defvar ml4pg-init 0)
+
+(defun ml4pg-export-theorem ()
+ (interactive)
+ (progn (setf ml4pg-tdl1 nil
+ ml4pg-tdl2 nil
+ ml4pg-tdl3 nil
+ ml4pg-tdl4 nil
+ ml4pg-tdl5 nil
+ ml4pg-intro nil
+ ml4pg-case nil
+ ml4pg-simpltrivial nil
+ ml4pg-induction nil
+ ml4pg-simpl nil
+ ml4pg-rewrite nil
+ ml4pg-trivial nil
+ ml4pg-hypothesis nil
+ ml4pg-goal-level nil)
+ (if (equal ml4pg-init 0)
+ (progn (ml4pg-read-lemmas)
+ (setq ml4pg-init 1)))
+ (ml4pg-export-theorem-aux nil nil 1 nil)
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
+ ))
+
+(defvar ml4pg-saved-theorems nil)
+(defvar ml4pg-goal-level-temp nil)
+(defvar ml4pg-tactic-level nil)
+(defvar ml4pg-proof-tree-level nil)
+
+;; Variables to store the different values associated with the tactics, the
+;; types or the rewrite rules
+
+(defvar ml4pg-tactic_id '(("intro" . 1)
+ ("case" . 2)
+ ("simpl" . 3)
+ ("trivial" . 4)
+ ("induction" . 5)
+ ("rewrite" . 6)
+ ("simpl; trivial" . 34)))
+
+
+(defvar ml4pg-types_id '(("nat" . -2)
+ ("Prop" . -4)
+ ("bool" . -3)
+ ("A" . -1)
+ ("list" . -5)))
+
+(defvar ml4pg-theorems_id nil)
+
+;; A function to obtain the type associated with an object
+
+(defun ml4pg-get-type-id (object)
+ (let* ((a (proof-shell-invisible-cmd-get-result (format (concat "Check " object))))
+ (pos_jump (search "
+" a :start2 (+ 2 (search " " a))))
+ (pos_space (search " " a :start2 (+ 2 (search ": " a))))
+ (type (if pos_space
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_space) ml4pg-types_id))
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_jump) ml4pg-types_id)))))
+ (if type type -4)))
+
+
+;; A function to obtain the value of a top symbol
+
+
+(defun ml4pg-get-top-symbol ()
+ (proof-shell-invisible-cmd-get-result (format "Set Printing All"))
+ (let* ((res (proof-shell-invisible-cmd-get-result (format "Focus")))
+ (res2 (subseq res (+ 32 (search "============================" res))))
+ (fst-symbol (subseq res2 0 (search " " res2))))
+ (cond ((string= fst-symbol "forall") 5)
+ ((search "->" res2) 7)
+ ((string= "@eq" fst-symbol) 6)
+ ((string= "and" fst-symbol) 4) ; I have included this
+ ((string= "iff" fst-symbol) 8) ; I have included this
+ ((string= "or" fst-symbol) 3) ; I have included this
+ (t 0))))
+
+;; In some cases the intro tactic does not have parameters, the following function
+;; obtain the type of the object introduced with the intro tactic in those cases
+
+(defun ml4pg-get-obj-intro ()
+ (let* ((undo (proof-undo-last-successful-command))
+ (obj (proof-shell-invisible-cmd-get-result (format "Show Intro")))
+ (object (subseq obj 0 (search "
+" obj)))
+ (dod (proof-assert-next-command-interactive))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis (list object)))))
+
+ (ml4pg-get-type-id object)
+ ))
+
+(defun ml4pg-extract-params (seq res)
+ (let ((pos_space (search " " seq))
+ (pos_jump (search "
+" seq)))
+ (if pos_space
+ (ml4pg-extract-params (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
+ (reverse (cons (subseq seq 0 pos_jump) res)))))
+
+(defun ml4pg-extract-params2 (seq res)
+ (let ((pos_space (search " " seq))
+ (pos_jump (search "." seq)))
+ (if pos_space
+ (ml4pg-extract-params2 (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
+ (reverse (cons (subseq seq 0 pos_jump) res)))))
+
+;; Given a list of objects, it obtains the value associated with their types
+
+(defun ml4pg-get-types-list (list res)
+ (if (endp list)
+ (* -1 res)
+ (ml4pg-get-types-list (cdr list) (+ (* -1 (ml4pg-get-type-id (car list)) (expt 10 (- (length list) 1))) res))))
+
+;; To obtain the number of tactics applied
+
+(defun ml4pg-get-number-list (list)
+ (if (endp list)
+ 0
+ (+ (expt 10 (- (length list) 1)) (ml4pg-get-number-list (cdr list)))))
+
+;; To obtain the value associated with top symbol in the case of intros
+
+(defun ml4pg-get-top-symbols-list (len res)
+ (if (= len 0)
+ res
+ (let ((gs (ml4pg-get-top-symbol))
+ (ps (proof-shell-invisible-cmd-get-result (format "intro"))))
+ (+ (ml4pg-get-top-symbols-list (- len 1) (+ (* gs (expt 10 (- len 1))) res))))))
+
+(defun ml4pg-get-top-symbols-seq (seq res)
+ (if (endp seq)
+ res
+ (let ((gs (ml4pg-get-top-symbol))
+ (ps (proof-shell-invisible-cmd-get-result (format (concat "intro " (car seq))))))
+ (+ (ml4pg-get-top-symbols-seq (cdr seq) (+ (* gs (expt 10 (- (length seq) 1))) res))))))
+
+;; To obtain the values associated with intros both for the case when parameters are
+;; given and the case intros.
+
+(defun ml4pg-get-obj-intros ()
+ (let* ((undo (proof-undo-last-successful-command))
+ (obj (proof-shell-invisible-cmd-get-result (format "Show Intros")))
+ (dod (proof-assert-next-command-interactive))
+ (params (ml4pg-extract-params obj nil))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis params)))
+ (types (ml4pg-get-types-list params 0))
+ (num (ml4pg-get-number-list params))
+ (undo2 (proof-shell-invisible-cmd-get-result (format "Undo")))
+ (gts (ml4pg-get-top-symbols-list (length params) 0)))
+ (list num types (length params) gts)
+ ))
+
+(defun ml4pg-get-obj-intros2 (objects)
+ (let* ((params (ml4pg-extract-params2 objects nil))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis params)))
+ (types (ml4pg-get-types-list params 0))
+ (num (ml4pg-get-number-list params))
+ (undo2 (proof-shell-invisible-cmd-get-result (format "Undo")))
+ (gts (ml4pg-get-top-symbols-seq params 0)))
+ (list num types (length params) gts)
+ ))
+
+;; To obtain the value associated with a theorem
+
+(defun ml4pg-search-in-hyp (obj hyp)
+ (if (endp hyp)
+ nil
+ (if (string= obj (car hyp))
+ t
+ (ml4pg-search-in-hyp obj (cdr hyp)))))
+
+
+(defvar ml4pg-add_to 0.1)
+(defvar ml4pg-start 100)
+
+(defun ml4pg-extract-theorem-id (cmd)
+ (let ((s<- (search "<-" cmd)))
+ (if s<-
+ (if (assoc (subseq cmd (+ 3 s<-) (search "." cmd)) ml4pg-theorems_id)
+ (cdr (assoc (subseq cmd (+ 3 s<-) (search "." cmd)) ml4pg-theorems_id))
+ (if (ml4pg-search-in-hyp (subseq cmd (+ 3 s<-) (search "." cmd)) ml4pg-hypothesis)
+ 1
+ (progn (setf ml4pg-start (+ ml4pg-start ml4pg-add_to))
+ (setf ml4pg-theorems_id
+ (append ml4pg-theorems_id (list (cons (subseq cmd (+ 3 s<-)
+ (search "." cmd))
+ ml4pg-start))))
+ (ml4pg-save-lemma (subseq cmd (+ 3 s<-)
+ (search "." cmd)) ml4pg-start)
+ (setf ml4pg-add_to (/ ml4pg-add_to 2))
+ ml4pg-start
+ )))
+ (if (assoc (subseq cmd (+ 1 (search " " cmd)) (search "." cmd)) ml4pg-theorems_id)
+ (cdr (assoc (subseq cmd (+ 1 (search " " cmd)) (search "." cmd)) ml4pg-theorems_id))
+ (if (ml4pg-search-in-hyp (subseq cmd (+ 1 (search " " cmd)) (search "." cmd)) ml4pg-hypothesis)
+ 1
+ (progn (setf ml4pg-start (+ ml4pg-start ml4pg-add_to))
+ (ml4pg-save-lemma (subseq cmd (+ 1 (search " " cmd)) (search "." cmd)) ml4pg-start)
+ (setf ml4pg-theorems_id
+ (append ml4pg-theorems_id (list (cons (subseq cmd (+ 1 (search " " cmd)) (search "." cmd))
+ ml4pg-start))))
+ (setf ml4pg-add_to (/ ml4pg-add_to 2))
+ ml4pg-start
+ ))))))
+
+
+(defun ml4pg-arg-induction (object)
+ (let* ((ps0 (proof-shell-invisible-cmd-get-result (format "Undo")))
+ (res (proof-shell-invisible-cmd-get-result (concat "Check " object)))
+ (ps3 (proof-shell-invisible-cmd-get-result (concat "induction " object)))
+ (err (search "Error" res)))
+ (if err -1 1)))
+
+(defun ml4pg-get-type-id-induction (object arg-ind)
+ (if (equal arg-ind 1)
+ (let ((ps0 (proof-shell-invisible-cmd-get-result (format "Undo")))
+ (gt (ml4pg-get-type-id object))
+ (ps3 (proof-shell-invisible-cmd-get-result (concat "induction " object))))
+ gt)
+ (let ((ps0 (proof-shell-invisible-cmd-get-result (format "Undo")))
+ (ps (proof-shell-invisible-cmd-get-result (concat "intro " object)))
+ (gt (ml4pg-get-type-id object))
+ (ps2 (proof-shell-invisible-cmd-get-result (format "Undo")))
+ (ps3 (proof-shell-invisible-cmd-get-result (concat "induction " object))))
+ gt)))
+
+;; Function to add the information to the corresponding tree depth level
+
+(defun ml4pg-add-info-to-tree (info level)
+ (cond ((= ml4pg-level 1) (setf ml4pg-tdl1 (append ml4pg-tdl1 (list info))))
+ ((= ml4pg-level 2) (setf ml4pg-tdl2 (append ml4pg-tdl2 (list info))))
+ ((= ml4pg-level 3) (setf ml4pg-tdl3 (append ml4pg-tdl3 (list info))))
+ ((= ml4pg-level 4) (setf ml4pg-tdl4 (append ml4pg-tdl4 (list info))))
+ ((= ml4pg-level 5) (setf ml4pg-tdl5 (append ml4pg-tdl5 (list info))))
+ (t nil)))
+
+;; Function to add the information to the corresponding tactic
+
+(defun ml4pg-add-info-to-tactic (info tactic)
+ (cond ((string= ml4pg-tactic "intro") (setf ml4pg-intro (append ml4pg-intro (list info))))
+ ((string= ml4pg-tactic "case") (setf ml4pg-case (append ml4pg-case (list info))))
+ ((string= ml4pg-tactic "simpltrivial") (setf ml4pg-simpltrivial (append ml4pg-simpltrivial (list info))))
+ ((string= ml4pg-tactic "induction") (setf ml4pg-induction (append ml4pg-induction (list info))))
+ ((string= ml4pg-tactic "simpl") (setf ml4pg-simpl (append ml4pg-simpl (list info))))
+ ((string= ml4pg-tactic "rewrite") (setf ml4pg-rewrite (append ml4pg-rewrite (list info))))
+ ((string= ml4pg-tactic "trivial") (setf ml4pg-trivial (append ml4pg-trivial (list info))))
+ (t nil)))
+
+
+
+;The first value is the tactic, the second one is the number of tactics,
+;the third one is the argument type, the fourth one is if the
+;argument is a hypothesis of a theorem, the fifth one is the top-symbol
+;and the last one the number of subgoals
+
+(defun ml4pg-get-numbers (cmd tactic ngs ts current-level bot)
+ (cond ((and (string= tactic "intro") (not (string= cmd "intro.")))
+ (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
+ (type (ml4pg-get-type-id object))
+
+
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis (list object))))
+ (res (list (cdr (assoc "intro" ml4pg-tactic_id))
+ 1
+ type
+ -1
+ ts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((string= tactic "intro")
+ (let* ((type (ml4pg-get-obj-intro))
+
+
+ (res (list (cdr (assoc "intro" ml4pg-tactic_id))
+ 1
+ (ml4pg-get-obj-intro)
+ -1
+ ts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((and (string= tactic "intros") (not (string= cmd "intros.")))
+ (let* ((params (ml4pg-get-obj-intros2 (subseq cmd (1+ (search " " cmd)))))
+ (nparams (car params))
+ (types-params (cadr params))
+ (len (caddr params))
+ (gts (cadddr params))
+
+
+ (res (list nparams
+ len
+ types-params
+ -1
+ gts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((string= tactic "intros")
+ (let* ((params (ml4pg-get-obj-intros))
+ (nparams (car params))
+ (types-params (cadr params))
+ (len (caddr params))
+ (gts (cadddr params))
+
+
+ (res (list nparams
+ len
+ types-params
+ -1
+ gts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((string= tactic "case")
+ (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
+ (type (ml4pg-get-type-id object))
+
+
+ (res (list (cdr (assoc "case" ml4pg-tactic_id))
+ 1
+ type
+ 1 ts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((string= tactic "simpl")
+ (progn
+
+ (setf ml4pg-goal-level-temp (cons (list (cdr (assoc "simpl" ml4pg-tactic_id)) 1 0 0 ts ngs) ml4pg-goal-level-temp))
+ (list (cdr (assoc "simpl" ml4pg-tactic_id)) 1 0 0 ts ngs)))
+ ((string= tactic "trivial")
+ (progn
+
+ (setf ml4pg-goal-level-temp (cons (list (cdr (assoc "trivial" ml4pg-tactic_id)) 1 0 0 ts ngs) ml4pg-goal-level-temp))
+ (list (cdr (assoc "trivial" ml4pg-tactic_id)) 1 0 0 ts ngs)))
+ ((string= tactic "induction")
+ (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
+ (arg-ind (ml4pg-arg-induction object))
+ (type (ml4pg-get-type-id-induction object arg-ind))
+
+
+ (ih (setf ml4pg-theorems_id (append ml4pg-theorems_id (list (cons (concat "IH" object) 10)))))
+ (res (list (cdr (assoc "induction" ml4pg-tactic_id))
+ 1 type arg-ind ts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((string= tactic "rewrite")
+ (progn
+
+ (setf ml4pg-goal-level-temp (cons (list (cdr (assoc "rewrite" ml4pg-tactic_id)) 1 -4
+ (ml4pg-extract-theorem-id cmd) ts ngs) ml4pg-goal-level-temp))
+ (list (cdr (assoc "rewrite" ml4pg-tactic_id)) 1 -4
+ (ml4pg-extract-theorem-id cmd) ts ngs))
+ )
+ ((string= cmd "simpl; trivial.")
+ (progn
+
+ (setf goal-level-temp (cons (list (cdr (assoc "simpl; trivial" ml4pg-tactic_id)) 2 0 0 ts ngs) ml4pg-goal-level-temp))
+ (list (cdr (assoc "simpl; trivial" ml4pg-tactic_id)) 2 0 0 ts ngs))
+ )))
+
+;; Function to obtain the information just about the goals.
+
+(defun ml4pg-get-numbers2 (cmd tactic ngs ts current-level bot)
+ (cond ((and (string= tactic "intro") (not (string= cmd "intro.")))
+ (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
+ (type (ml4pg-get-type-id object))
+
+
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis (list object))))
+ (res (list (cdr (assoc "intro" ml4pg-tactic_id))
+ 1
+ type
+ -1
+ ts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((string= tactic "intro")
+ (let* ((type (ml4pg-get-obj-intro))
+
+
+ (res (list (cdr (assoc "intro" ml4pg-tactic_id))
+ 1
+ (get-obj-intro)
+ -1
+ ts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((and (string= tactic "intros") (not (string= cmd "intros.")))
+ (let* ((params (ml4pg-get-obj-intros2 (subseq cmd (1+ (search " " cmd)))))
+ (nparams (car params))
+ (types-params (cadr params))
+ (len (caddr params))
+ (gts (cadddr params))
+
+
+ (res (list nparams
+ len
+ types-params
+ -1
+ gts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((string= tactic "intros")
+ (let* ((params (ml4pg-get-obj-intros))
+ (nparams (car params))
+ (types-params (cadr params))
+ (len (caddr params))
+ (gts (cadddr params))
+
+
+ (res (list nparams
+ len
+ types-params
+ -1
+ gts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((string= tactic "case")
+ (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
+ (type (ml4pg-get-type-id object))
+
+
+ (res (list (cdr (assoc "case" ml4pg-tactic_id))
+ 1
+ type
+ 1 ts ngs))
+ (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
+ res))
+ ((string= tactic "simpl")
+ (progn
+
+ (list (cdr (assoc "simpl" ml4pg-tactic_id)) 1 0 0 ts ngs)))
+ ((string= tactic "trivial")
+ (progn
+
+ (list (cdr (assoc "trivial" ml4pg-tactic_id)) 1 0 0 ts ngs)))
+ ((string= tactic "induction")
+ (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
+ (arg-ind (ml4pg-arg-induction object))
+ (type (ml4pg-get-type-id-induction object arg-ind))
+
+
+ (ih (setf ml4pg-theorems_id (append ml4pg-theorems_id (list (cons (concat "IH" object) 10)))))
+ (res (list (cdr (assoc "induction" ml4pg-tactic_id))
+ 1 type arg-ind ts ngs))
+ (foo2 (setf goal-level-temp (cons res goal-level-temp))))
+ res))
+ ((string= tactic "rewrite")
+ (progn
+
+ (list (cdr (assoc "rewrite" ml4pg-tactic_id)) 1 -4
+ (ml4pg-extract-theorem-id cmd) ts ngs))
+ )
+ ((string= cmd "simpl; trivial.")
+ (progn
+
+ (list (cdr (assoc "simpl; trivial" ml4pg-tactic_id)) 2 0 0 ts ngs))
+ )))
+
+(defun ml4pg-count-seq (item seq)
+ (let ((is? (search item seq)))
+ (if is?
+ (+ 1 (ml4pg-count-seq item (subseq seq (+ 1 is?))))
+ 0)))
+
+(defun ml4pg-get-number-of-goals ()
+ (let ((r (proof-shell-invisible-cmd-get-result (format "Show Proof"))))
+ (ml4pg-count-seq "?" r)))
+
+
+(defun ml4pg-flat (ll)
+ (if (endp ll)
+ nil
+ (append (car ll) (ml4pg-flat (cdr ll)))))
+
+
+;; The following function computes the result of the proof tree level
+
+(defun ml4pg-remove-zeros (n)
+ (do ((temp n (/ temp 10)))
+ ((or (= temp 0) (not (= (mod temp 10) 0))) temp)))
+
+(defun ml4pg-obtain-level (level n)
+ (do ((temp (cdr level) (cdr temp))
+ (temp2 (if (endp level) (list 0 0 0 0 0 0 0 0 0)
+ (list (* (nth 0 (car level)) (expt 10 (length (cdr level))))
+ (* (nth 1 (car level)) (expt 10 (length (cdr level))))
+ (* (nth 2 (car level)) (expt 10 (length (cdr level))))
+ (* (nth 3 (car level)) (expt 10 (length (cdr level))))
+ (* (nth 4 (car level)) (expt 10 (length (cdr level))))
+ (* (nth 5 (car level)) (expt 10 (length (cdr level))))
+ (* (nth 6 (car level)) (expt 10 (length (cdr level))))
+ (* (nth 7 (car level)) (expt 10 (length (cdr level))))
+ (nth 8 (car level))))))
+ ((endp temp) (list (ml4pg-remove-zeros (nth 0 temp2))
+ (ml4pg-remove-zeros (nth 1 temp2))
+ (ml4pg-remove-zeros (nth 2 temp2))
+ (ml4pg-remove-zeros (nth 3 temp2))
+ (ml4pg-remove-zeros (nth 4 temp2))
+ (nth 5 temp2)
+ (ml4pg-remove-zeros (nth 6 temp2))
+ (if (= (nth 7 temp2) 0) (nth 7 temp2) (+ (* n (expt 10 (length level))) (ml4pg-remove-zeros (nth 7 temp2))))
+ (nth 8 temp2)))
+ (setf temp2 (list (+ (nth 0 temp2) (* (expt 10 (length (cdr temp))) (nth 0 (car temp))))
+ (+ (nth 1 temp2) (* (expt 10 (length (cdr temp))) (nth 1 (car temp))))
+ (+ (nth 2 temp2) (* (expt 10 (length (cdr temp))) (nth 2 (car temp))))
+ (+ (nth 3 temp2) (* (expt 10 (length (cdr temp))) (nth 3 (car temp))))
+ (+ (nth 4 temp2) (* (expt 10 (length (cdr temp))) (nth 4 (car temp))))
+ (+ (nth 5 temp2) (* (expt 10 (length (cdr temp))) (nth 5 (car temp))))
+ (+ (nth 6 temp2) (* (expt 10 (length (cdr temp))) (nth 6 (car temp))))
+ (+ (nth 7 temp2) (* (expt 10 (length (cdr temp))) (nth 7 (car temp))))
+ (+ (nth 8 temp2) (nth 8 (car temp))))
+ )
+ ))
+
+
+(defun ml4pg-compute-proof-result ()
+ (append (ml4pg-obtain-level ml4pg-tdl1 1)
+ (ml4pg-obtain-level ml4pg-tdl2 2)
+ (ml4pg-obtain-level ml4pg-tdl3 3)
+ (ml4pg-obtain-level ml4pg-tdl4 4)
+ (ml4pg-obtain-level ml4pg-tdl5 5)))
+
+;; The following function computes the result of the tactic
+
+
+(defun ml4pg-digits (n)
+ (if (= (mod n 10) 0)
+ 0
+ (1+ (ml4pg-digits (/ n 10)))))
+
+(defun ml4pg-first-digit (n digits)
+ (/ n (expt 10 (1- digits))))
+
+(defun ml4pg-rest-of-digits (n digits)
+ (- n (* (ml4pg-first-digit n digits) (expt 10 (1- digits)))))
+
+(defun ml4pg-obtain-tactic-result (tactic)
+ (do ((temp (cdr tactic) (cdr temp))
+ (temp2 (if (endp tactic) (list 0 0 0 0 0)
+ (list (ml4pg-first-digit (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic))))
+ (* (ml4pg-rest-of-digits (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic)))) (expt 10 (length (cdr tactic))))
+ (* (nth 1 (car tactic)) (expt 10 (length (cdr tactic))))
+ (nth 2 (car tactic))
+ (nth 3 (car tactic))))))
+ ((endp temp) temp2)
+ (setf temp2 (list (nth 0 temp2)
+ (+ (nth 1 temp2) (* (expt 10 (length (cdr temp))) (nth 0 (car temp))))
+ (+ (nth 2 temp2) (* (expt 10 (length (cdr temp))) (nth 1 (car temp))))
+ (concat (format "%s" (nth 3 temp2)) (format "%s" (nth 2 (car temp))))
+ (+ (nth 4 temp2) (nth 3 (car temp))))
+ )
+ ))
+
+
+(defun ml4pg-compute-tactic-result ()
+ (append (ml4pg-obtain-tactic-result ml4pg-intro)
+ (ml4pg-obtain-tactic-result ml4pg-case)
+ (ml4pg-obtain-tactic-result ml4pg-simpltrivial)
+ (ml4pg-obtain-tactic-result ml4pg-induction)
+ (ml4pg-obtain-tactic-result ml4pg-simpl)
+ (ml4pg-obtain-tactic-result ml4pg-rewrite)
+ (ml4pg-obtain-tactic-result ml4pg-trivial)))
+
+
+(defvar ml4pg-useless-terms '("Definition" "Defined" "Fixpoint" "Structure" "Section" "Add Ring" "Hypothesis" "Hypotheses" "Include" "Export" "Parameter" "Axiom"
+"End" "Notation" "Hint" "Inductive" "Variable" "Implicit" "Import" "Canonical" "Coercion"
+"Module" "Ltac" "Let" "Opaque" "Bind" "Scope" "Require" "Infix" "Record" "Fact"))
+
+(defun ml4pg-is-in-search (cmd)
+ (do ((temp ml4pg-useless-terms (cdr temp))
+ (is nil))
+ ((or (endp temp) is) is)
+ (if (search (car temp) cmd) (setf is t))))
+
+(defun ml4pg-export-theorem-aux (result name current-level dot-level)
+ (let* ((semis (save-excursion
+ (skip-chars-backward " \t\n"
+ (proof-queue-or-locked-end))
+ (proof-segment-up-to-using-cache (point))))
+ (comment (caar semis))
+ (cmd (cadar semis))
+ (pos_dot (search "." cmd))
+ (pos_space (search " " cmd))
+ (ts nil))
+ (if semis
+ (cond ((or (string= comment "comment")
+ (ml4pg-is-in-search cmd))
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result name current-level dot-level)))
+ ((search "Lemma" cmd)
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result
+ (subseq cmd (1+ (search " " cmd))
+ (search " " cmd :start2 (1+ (search " " cmd))))
+ current-level dot-level)))
+ ((search "Proof" cmd)
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result name current-level dot-level)))
+ ((search "Theorem" cmd)
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result
+ (subseq cmd (1+ (search " " cmd))
+ (search " " cmd :start2 (1+ (search " " cmd))))
+ current-level dot-level)))
+ ((search "Qed." cmd)
+ (progn (proof-assert-next-command-interactive)
+ ; (insert (format "\n(* %s *)\n" (reverse result)))
+ (setf ml4pg-proof-tree-level (append ml4pg-proof-tree-level (list (ml4pg-compute-proof-result))))
+ (setf ml4pg-tactic-level (append ml4pg-tactic-level (list (ml4pg-compute-tactic-result))))
+ (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
+ (list (list name (ml4pg-flat (reverse result))))))))
+ (pos_space
+ (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (ml4pg-get-number-of-goals))
+ (cond ((< ng ng2) (ml4pg-export-theorem-aux
+ (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 1) result)
+ name
+ (1+ current-level)
+ (1+ current-level)))
+ ((< ng2 ng) (ml4pg-export-theorem-aux
+ (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 0) result)
+ name
+ dot-level
+ nil))
+ (t (ml4pg-export-theorem-aux
+ (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 0) result)
+ name
+ (1+ current-level)
+ dot-level)))))
+ (t (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (ml4pg-get-number-of-goals))
+ (cond ((< ng ng2) (ml4pg-export-theorem-aux
+ (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 1) result)
+ name
+ (1+ current-level)
+ (1+ current-level)))
+ ((< ng2 ng) (ml4pg-export-theorem-aux
+ (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 0) result)
+ name
+ dot-level
+ nil))
+ (t (ml4pg-export-theorem-aux
+ (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 0) result)
+ name
+ (1+ current-level)
+ dot-level))
+ )
+ ))))))
+
+
+
+
+
+;;; Functions to save the files
+
+(defun ml4pg-save-file-conventions1 ()
+ (interactive)
+ (let ((file (read-file-name "Save in file (don't include the extension): ")))
+ (progn (with-temp-file (concat file "_goals.csv") (insert (ml4pg-extract-features-1)))
+ (with-temp-file (concat file "_proof_tree.csv") (insert (ml4pg-extract-features-2 proof-tree-level)))
+ (with-temp-file (concat file "_tactic.csv") (insert (ml4pg-extract-features-2 tactic-level)))
+ (with-temp-file (concat file (format "_summary.txt")) (insert (ml4pg-extract-names))))))
+
+
+(defun ml4pg-extract-names ()
+ (do ((temp ml4pg-saved-theorems (cdr temp))
+ (temp2 "")
+ (i 1 (1+ i)))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2 (format "%s . %s\n" i (caar temp))) )))
+
+
+(defun ml4pg-print-list (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) (subseq temp2 0 (1- (length temp2))))
+ (setf temp2 (concat temp2 (format "%s," (car temp))) )))
+
+
+(defun ml4pg-extract-features-1 ()
+ (let ((fm (ml4pg-find-max-length)))
+ (do ((temp ml4pg-saved-theorems (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (if (< (length (cadar temp)) fm)
+ (setf temp2 (concat temp2
+ (format "%s\n"
+ (ml4pg-print-list (ml4pg-take-30 (append (cadar temp)
+ (ml4pg-generate-zeros (- fm (length (cadar temp)))))) ))))
+ (setf temp2 (concat temp2 (format "%s\n" (ml4pg-print-list (ml4pg-take-30 (cadar temp))) )))))
+ ))
+
+
+
+(defun ml4pg-extract-features-2 (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2 (format "%s\n" (ml4pg-print-list (car temp)))))))
+
+
+
+(defun ml4pg-generate-zeros (n)
+ (do ((i 0 (1+ i))
+ (temp nil (cons 0 temp)))
+ ((= i n) temp)))
+
+(defun ml4pg-find-max-length ()
+ (do ((temp ml4pg-saved-theorems (cdr temp))
+ (i 0))
+ ((endp temp) i)
+ (if (< i (length (cadar temp)))
+ (setf i (length (cadar temp)))
+ nil)))
+
+(defun ml4pg-take-30 (list)
+ (do ((i 0 (1+ i))
+ (temp list (cdr temp))
+ (temp2 nil (cons (car temp) temp2)))
+ ((= i 30) (reverse temp2))))
+
+
+;; Function which extract the info of a theorem up to a concrete point
+
+(defun ml4pg-extract-info-up-to-here ()
+ (interactive)
+ (setf ml4pg-tdl1 nil
+ ml4pg-tdl2 nil
+ ml4pg-tdl3 nil
+ ml4pg-tdl4 nil
+ ml4pg-tdl5 nil
+ ml4pg-intro nil
+ ml4pg-case nil
+ ml4pg-simpltrivial nil
+ ml4pg-induction nil
+ ml4pg-simpl nil
+ ml4pg-rewrite nil
+ ml4pg-trivial nil)
+ (let ((final (point))
+ (result nil)
+ (current-level 1))
+ (search-backward "Proof.")
+ (proof-goto-point)
+ (while (< (point) final)
+ (let* ((semis (save-excursion
+ (skip-chars-backward " \t\n"
+ (proof-queue-or-locked-end))
+ (proof-segment-up-to-using-cache (point))))
+ (comment (caar semis))
+ (cmd (cadar semis))
+ (pos_dot (search "." cmd))
+ (pos_space (search " " cmd))
+ (ts nil))
+ (cond (pos_space
+ (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (ml4pg-get-number-of-goals))
+ (cond ((< ng ng2) (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 1) result))
+ (setf current-level (1+ current-level))))
+ ((< ng2 ng) (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 0) result))
+ (setf current-level (1+ current-level))))
+ (t (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 0) result))
+ (setf current-level (1+ current-level)))))))
+ (t (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (ml4pg-get-number-of-goals))
+ (cond ((< ng ng2) (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 1) result))
+ (setf current-level (1+ current-level))))
+ ((< ng2 ng) (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 0) result))
+ (setf current-level (1+ current-level))))
+ (t (progn (setf result(cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 0) result) )
+ (setf current-level (1+ current-level))))
+ )
+ ))))
+ )
+
+
+ (ml4pg-take-30 (append (ml4pg-flat (reverse result)) (ml4pg-generate-zeros 20) ))
+ ))
+
+
+
+(defun ml4pg-extract-features-1-bis (thm)
+ (let ((fm (ml4pg-find-max-length)))
+ (do ((temp ml4pg-saved-theorems (cdr temp))
+ (temp2 ""))
+ ((endp temp) (concat temp2 (format "%s\n" (ml4pg-print-list thm))))
+ (if (< (length (cadar temp)) fm)
+ (setf temp2 (concat temp2
+ (format "%s\n"
+ (ml4pg-print-list (ml4pg-take-30 (append (cadar temp)
+ (ml4pg-generate-zeros (- fm (length (cadar temp)))))) ))))
+ (setf temp2 (concat temp2 (format "%s\n" (ml4pg-print-list (ml4pg-take-30 (cadar temp))) )))))
+ ))
+
+
+;; Function which extract the information from all the theorems up to a point
+
+(defun ml4pg-extract-feature-theorems ()
+ (interactive)
+ (let ((final (point))
+ (current-level 1)
+ (last-point -1))
+ (ml4pg-export-theorem)
+ (while (and (< (point) final) (not (= (point) last-point)))
+ (progn (setq last-point (point))
+ (ml4pg-export-theorem))))
+ )
+
+
+
+
+
+
+(defun ml4pg-extract-theorems-library ()
+ (interactive)
+ (search-backward "Qed.")
+ (forward-char)
+ (forward-char)
+ (forward-char)
+ (forward-char)
+ (let ((final (point))
+ (last-point -1))
+ (beginning-of-buffer)
+ (proof-goto-point)
+ (ml4pg-export-theorem)
+ (while (and (< (point) final) (not (= (point) last-point)))
+ (progn (setq last-point (point))
+ (ml4pg-export-theorem)))
+ )
+
+ )
+
+
+
+ \ No newline at end of file
diff --git a/contrib/ML4PG/coq/lemmas.txt b/contrib/ML4PG/coq/lemmas.txt
new file mode 100644
index 00000000..c818e3b0
--- /dev/null
+++ b/contrib/ML4PG/coq/lemmas.txt
@@ -0,0 +1,44 @@
+size_ncons&102$addn0&103$IHs&104$cats1&105$size_cat&106$addnC&107$last_cat&108$lastI&109$belast_cat&110$catA&111$|&112$rewrite&113$cat0s&114$cats0&115$cat_rcons&116$last_nth&119$nth_nil&120$eq_s12&122$IHs1&123$=>&124$i&125$addn1&126$maxn0&127$maxnE&128$subn1&129$add1n&130$addn_maxr&131$nth_ncons&132$eqSS&133$subnn&134$nth_default&135$subn_gt0&136$size_set_nth&138$maxnA&139$maxnn&140$nth_set_nth&141$maxnCA&142$eq_sym&143$if_neg&144$ne_n12&145$add0n&147$eqn_leq&148$andbC&149$ltnNge&150$count_size&151$leqnn&154$fun_if&155$filter_cat&159$count_filter&160$orbA&161$has_cat&162$has_seq1&163$orbC&164$andbA&165$all_cat&166$all_seq1&167$Ea&168$eq_filter&169$has_count&170$eq_count&171$all_count&172$has_find&173$s12&177$filter_pred0&179$filter_predT&180$addnCA&181$addnA&182$addn_negb&183$count_pred0&184$count_predT&185$negb_and&187$has_predC&188$has_predU&189$iterSr&191$IHn&192$drop_oversize&194$drop0&195$take_oversize&196$cat_take_drop&198$size_drop&199$size_takel&200$ltnW&201$ltnS&202$subSS&203$take0&204$take_cat&205$ltn_neqAle&206$Hn0&207$take_size&208$nth_cat&209$size_take&210$lt_n0_s&211$addKn&212$leq_addr&213$eqnP&216$lt_i_n0&217$1IHs&218$take_size_cat&220$drop_size_cat&221$size_rot&222$rot_size_cat&223$catrev_catr&225$catrevE&226$rev_cons&227$size_rcons&228$catrev_catl&229$rev_cat&230$rev_rcons&231$subn0&232$ltnn&233$subnK&234$addSnnS&235$eqseq_cons&237$andbF&238$1andbA&239$in_cons&241$inE&242$mem_cat&243$mem_seq1&244$mem_rcons&246$mem_head&247$mem_behead&249$s0x&250$s0'x&251$orbT&252$ay&254$eq_a&258$y&259$s_y&260$eq_a12&261$s'y&262$eq_in_count&263$has_filter&264$Es12&265$in&266$Hx&267$*&268$eqxx&270$all_pred1_nseq&271$def_s&273$has_pred0&274$has_sym&275$negb_or&276$cat_uniq&277$andbCA&278$uniq_catC&279$mem_filter&280$negbTE&281$mem_rev&282$Hy&283$all_pred1P&284$count_uniq_mem&285$s_x&286$mem_undup&287$size_undup&288$find_size&290$has_pred1&291$find_cat&292$lt_i_s&293$mem_nth&294$rcons_uniq&295$index_cat&296$size_belast&297$index_uniq&298$eq_sij&299$cat_cons&302$i.+1&304$nax&305$exists&306$i]&307$eq_all&308$a_s&309$IHv&310$count_cat&312$addn_eq0&313$count_predC&314$filter_predI&315$cnt_a'&316$leq_add2r&318$eq12&319$perm_eq_sym&321$eqn_add2l&322$perm_catC&324$perm_cat2r&326$cat1s&328$perm_catCA&329$perm_cons&330$def_s2&331$mem_rot&332$negPf&333$rot_uniq&334$le_s21&335$leqNgt&337$s3x&338$uniq_leq_size&339$eqs12&340$eqs12,&342$uniq_size_uniq&343$@uniq_leq_size&345$s2x&346$Hs12&347$x&352$\in&353$s1&354$by&355$/(rot i s1)&356$def_s1&357$FcatCA&359$addnK&360$rot1_cons&361$rotK&362$has_rot&363$subKn&364$rot0&365$size_rev&367$size_rotr&370$@size_takel&371$5(catA, =^~ rot_size_cat)&372$leq_addl&373$rot_addn&375$addnBA&376$@rot_oversize&377$1ltnW&378$rot_add_mod&379$1addnC&380$rot_rot&381$has_mask_cons&382$Hsn0:&383$size&384$take&385$=&386$Hs&387$size_mask&388$mask_cat&389$mask_rot&392$size_nseq&393$mask_false&394$sz_m&396$geq_min&397$nth_take&398$negb_add&399$addbF&400$addbT&401$negb_eqb&402$before_find&403$def_m_i&404$lt_i_m&405$subnKC&406$congr1&407$drop_nth&410$nth_index&411$index_mem&412$mask0&413$sz_m1&414$sz_m2&415$cat_subseq&416$sub0seq&417$mask_true&419$all_predC&428$map_cat&429$map_take&430$map_drop&431$map_rot&433$size_map&434$filter_mask&435$a_x&436$size_subseq_leqif&438$subseq_filter&439$introT&440$uniq_perm_eq&441$filter_uniq&442$Ds2&444$perm_rcons&445$eqP&446$x']&447$map_mask&449$inj_in_eq&450$count_map&453$Est&454$eq_sz&457$ltis&458$nth_map&459$Ef&460$eq_f12&461$eqf12&462$eqxx,&463$sy&464$gK&466$fK&467$mem_map&468$pmap_filter&469$size_pmap&471$IHn1&475$addnS&476$iota_add&477$size_iota&478$andbN&479$leq_eqVlt&480$mem_iota&482$nth_iota&484$size_mkseq&486$Hi&487$nth_mkseq&488$mkseq_nth&490$perm_map&491$perm_eq_small&492$s&493$Ds&494$iota_addl&495$map_rotr&496$map_comp&497$@eq_map&498$mulnC&499$sumn_nseq&500$foldr_cat&501$revK&502$Hfg&503$Hgf&504$addn_minr&505$size_zip&506$zip_cat&507$zip_rcons&508$IHss&509$IHsh&510$leq_subLR&511$leq_add2l&513$leq_max&514$def_z&515$def_x'&516$map_f&517$not_fxt_z&518$eq_s&519$eq_t&520$fpz&521$sp2&522$Ut&526$:&527$z.1,&528$x,&529$Dz1&530$s1z&531$s1'x&532$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$andb_false_r&108$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$i:&174$F&175$=&176$G&177$by&178$big_const_seq&179$cardE&180$size_iota&181$big_const&182$card_ord&183$big1&186$big_mkcond&187$mul1m,&188$filter_index_enum&189$enum1&190$big_seq1&191$big_cat&193$iota_add&194$leq_sub&195$big_geq&196$@big_cat_nat&197$leqnSn&198$big_nat1&199$big_nat_recr&200$leqW&202$val_enum_ord&204$map_cat&205$map_comp&206$eqxx&207$r2i:&208$\in&209$r2&210$has_pred1&211$eq_r12&212$count_cat&214$uniq_perm_eq&217$enum_uniq&218$big_tnth&219$index_uniq&220$valK&221$filter_undup&222$IHr&223$big_rem&224$idM&225$big_undup&226$undup_uniq&227$mem_undup&228$eq_r&229$big_split&230$simpm&231$bigID&232$orbK&233$cardD1&235$Aj&236$Qp&238$Q0&239$cardD1x&240$bigD1&241$Qj,&242$j&243$P0&244$IH&245$h'K&246$reindex_onto&247$hK&248$reindex_inj&251$addSn&252$subnDr&253$addnBA&254$partition_big&255$Pi&256$andbT&257$andb_idl&259$exchange_big_dep&260$Qi&261$2(big_seq_cond _ _ _ xQ)&262$exchange_big_dep_nat&263$big_endo&264$mulm0&266$x&267$y&268$big_distrl&270$big_distrr&271$f&276$ffunE&277$nri&278$eqP&279$big_distr_big_dep&280$mul0m&282$bigA_distr_big&284$big_has_cond&285$big_all_cond&286$allB&287$sum_nat_const&289$muln1&290$Monoid&291$big_const_nat&292$big_andE&293$@leqif_sum&296$muln_gt0&297$leq_maxl&299$geq_max&304$dvdn_lcm&307$in&308$dvFm&309$p_m&310$dvdn_trans&311$dvdn_lcml&312$dvdn_gcd&313$dvmF&314$m_p&315$dvdn_gcdl&316$mul0n&317$muln0&318$mulnDr&319$mulnDl&320$mulnC&321$addn2&322$exp0n&323$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$i:&174$F&175$=&176$G&177$by&178$big_const_seq&179$cardE&180$size_iota&181$big_const&182$card_ord&183$big1&186$big_mkcond&187$mul1m,&188$filter_index_enum&189$enum1&190$big_seq1&191$big_cat&193$iota_add&194$leq_sub&195$big_geq&196$@big_cat_nat&197$leqnSn&198$big_nat1&199$big_nat_recr&200$leqW&202$val_enum_ord&204$map_cat&205$map_comp&206$eqxx&207$r2i:&208$\in&209$r2&210$has_pred1&211$eq_r12&212$count_cat&214$uniq_perm_eq&217$enum_uniq&218$big_tnth&219$index_uniq&220$valK&221$filter_undup&222$IHr&223$big_rem&224$idM&225$big_undup&226$undup_uniq&227$mem_undup&228$eq_r&229$big_split&230$simpm&231$bigID&232$orbK&233$cardD1&235$Aj&236$Qp&238$Q0&239$cardD1x&240$bigD1&241$Qj,&242$j&243$P0&244$IH&245$h'K&246$reindex_onto&247$hK&248$reindex_inj&251$addSn&252$subnDr&253$addnBA&254$partition_big&255$Pi&256$andbT&257$andb_idl&259$exchange_big_dep&260$Qi&261$2(big_seq_cond _ _ _ xQ)&262$exchange_big_dep_nat&263$big_endo&264$mulm0&266$x&267$y&268$big_distrl&270$big_distrr&271$f&276$ffunE&277$nri&278$eqP&279$big_distr_big_dep&280$mul0m&282$bigA_distr_big&284$big_has_cond&285$big_all_cond&286$allB&287$sum_nat_const&289$muln1&290$Monoid&291$big_const_nat&292$big_andE&293$@leqif_sum&296$muln_gt0&297$leq_maxl&299$geq_max&304$dvdn_lcm&307$in&308$dvFm&309$p_m&310$dvdn_trans&311$dvdn_lcml&312$dvdn_gcd&313$dvmF&314$m_p&315$dvdn_gcdl&316$mul0n&317$muln0&318$mulnDr&319$mulnDl&320$mulnC&321$addn2&322$exp0n&323$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$mxE&102$ord1&105$perm1&106$permM&107$eq_axiomK&108$cast_ord_id&109$castmx_id&110$mxE,&113$unsplitK&116$row_mxEl&117$row_mxEr&118$col_mxEu&120$col_mxEd&121$row_mxKl,&122$col_mxKu,&123$tr_col_mx&125$trmx_usub&126$trmx_dsub&127$hsubmxK&128$castmxE&130$j&131$&&&132$by&133$def_j&134$lshift_subproof&135$mxE]&136$~~&137$j2&138$leqNgt&139$j1&140$<&141$n2&142$ltn_add2l&143$leq_add2l&144$trmx_cast&145$row_mxA&146$tr_col,&147$tr_col',&148$row_mxEl,&149$row_mxEr,&150$col_mxEu,&151$col_mxEd,&152$2mxE&153$def_j'&155$addSn&156$ltn_addr&157$@tr_row'&158$@tr_col_mx&159$col'Kl&160$addnS&161$tr_row',&162$col'Kr&163$vsubmxK&164$col_mxKu&165$row_mxKl&166$row_mxKr&167$col_mxKd&168$submxK&169$trmx_ulsub&170$trmx_ursub&171$trmx_dlsub&172$trmx_drsub&173$block_mxKul&174$block_mxKur&175$block_mxKdl&176$block_mxKdr&177$tr_block_mx&178$tr_row_mx&179$2tr_col_mx&180$block_mxEh&181$col_mxA&182$cast_row_mx&183$block_mxEv&184$cast_col_mx&185$castmx_comp&186$etrans_id&187$card_prod&188$card_ord&189$cast_ordK&190$enum_valK&191$enum_rankK&192$mxvecE&193$castmxE,&194$conform_mx_id&195$neq_mn&196$B&197$nonconform_mx&198$addrA&199$addrC&200$add0r&201$addNr&202$mulrS&203$IHd&204$can2_eq&208$raddf0&209$opp_col_mx&213$opp_row_mx&214$add_col_mx&215$add_row_mx&216$negbTE&217$row0&220$eqxx&221$map_const_mx&222$raddfN&223$raddfD&224$map_mxD&225$map_mxN&226$mul1r&227$mulrDl&228$mulrDr&229$mulrA&230$summxE&231$bigD1&232$mulr1&233$big1&234$addr0&235$diff&236$j'&237$mulr0&238$matrix_sum_delta&239$big_ord1&240$can_eq&241$inj_eq&242$vec_mx_delta&243$vec_mxK&244$scale_col_mx&245$scale_row_mx&246$mulrnAr&247$mulrnDl&248$mulr_natr&249$i'&250$ne_i'i&251$diag_const_mx&253$raddfB&254$scale_scalar_mx&255$diag_mx_sum_delta&256$scalar_mx_sum_delta&258$scaler_sumr&259$scale1r&260$A&262$eqxx]&263$eqn0Ngt&264$n0&265$in&266$*&267$flatmx0&268$val_eqE&269$eqn_add2l&270$big_distrr&271$exchange_big&272$big_distrl&273$mul0r&274$sumrN&275$mulrN&276$mulNr&277$big_split&278$mulmxDl&279$mulNmx&280$mulmxDr&281$mulmxN&282$mul0mx&284$mulmx0&286$rowE&287$mulmxA&288$mulmxnE&289$andbT&290$natrM&291$mulrnA&292$mulnb&293$andbAC&294$mul_delta_mx_cond&295$mulrnAl&296$mul_diag_mx&297$mul_scalar_mx&298$mul_mx_diag&299$reindex_inj&300$permKV&301$mul_col_perm&302$invgK&303$tpermV&304$mul_row_perm&305$mulmx1&306$mul1mx&307$col_permE&308$trmx1&310$tr_perm_mx&311$row_permM&313$perm_mx1&315$perm_mx_is_perm&316$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$m1_lb&186$m2_lb,&187$eqPQ&188$max_i&189$max_j&190$eq_f&191$mulSn&193$mulnS&194$mulnSr&195$muln0&196$muln0,&197$mulnC&198$mulnDl&199$mulnBl&200$mulnA&201$mulnCA&202$mulnBr&203$muln_eq0&204$leq_mul2l&205$le_mn2&207$orbT&208$leq_mul2r&209$le_mn1&210$orb_andr&211$eqn_mul2l&212$eqn_mul2r&213$ltn_mul2l&214$ltn_mul2r&215$mul1n&216$ltn_pmul2r&217$ltn_Pmull&218$maxn_mulr&220$minn_mulr&221$muln1&222$expnS&223$mul1n,&224$exp1n&225$expnD&226$expnMn&227$expnM&228$addn_gt0&229$eqn0Ngt&230$expn_gt0&231$leq_pmul2l&232$leq_pmulr&233$leq_exp2l&234$eqn_exp2l&235$leq_exp2l]&236$ltn_exp2l]&237$leq_mul&239$expn1&240$ltn_mul&241$IHe&242$ltn_exp2r&243$leq_exp2r&244$eqn_exp2r&245$muln_gt0&246$addTb&247$addbA&248$odd_add&251$odd_sub&252$andb_addl&253$odd_mul&254$addnn&255$mul2n&256$doubleB&257$2ltnNge&258$leq_double&259$doubleS&260$ltn_Sdouble&261$addbb&262$muln2&263$uphalf_half&264$doubleD&265$half_double,&266$odd_double_half&267$half_double&268$uphalf_double&269$halfD&270$mulnn&271$mulnDr&272$def_m&273$sqrnD&274$2addnA&275$/(2 * 2)&276$sqrn_sub&277$lte&280$ltm12&281$ltm23&282$andbT&283$eqm12&284$f_mono&285$in&286$hyp&287$*&288$lemn&289$le_ab&290$geq_leqif&291$n12_0&294$le2&295$m2_0&296$n1_gt0&297$n2_gt0&298$sqrn_gt0&299$ne_mn&300$ltn_add2r&301$nat_Cauchy&302$addE&303$add_mulE&304$mulE&305$mul_expE&306$sub2nn&307$:&308$n.*2&309$def_b&106$mem_topred&130$symR&132$Rxy&133$eqiR&134$fK&135$hf&140$fgK&141$mf&143$fgK_on&144$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$le_i_mj&186$:&187$subnBA&188$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$subnBA&186$:&187$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big1&181$big_mkcond&182$mul1m,&183$filter_index_enum&184$enum1&185$big_seq1&186$big_cat&188$iota_add&189$leq_sub&190$big_geq&191$@big_cat_nat&192$leqnSn&193$big_nat1&194$big_nat_recr&195$leqW&197$val_enum_ord&199$map_cat&200$map_comp&201$eqxx&202$count_cat&204$uniq_perm_eq&207$enum_uniq&208$big_tnth&209$index_uniq&210$valK&211$filter_undup&212$IHr&213$big_rem&214$idM&215$big_undup&216$undup_uniq&217$mem_undup&218$eq_r&219$big_split&220$simpm&221$bigID&222$orbK&223$cardD1&225$Aj&226$Qp&228$Q0&229$cardD1x&230$bigD1&231$Qj,&232$j&233$P0&234$IH&235$h'K&236$reindex_onto&237$hK&238$reindex_inj&241$addSn&242$subnDr&243$addnBA&244$partition_big&245$Pi&246$andbT&247$andb_idl&249$exchange_big_dep&250$Qi&251$2(big_seq_cond _ _ _ xQ)&252$exchange_big_dep_nat&253$big_endo&254$mulm0&256$x&257$y&258$big_distrl&260$big_distrr&261$f&263$ffunE&264$nri&265$eqP&266$big_distr_big_dep&267$mul0m&269$bigA_distr_big&271$big_has_cond&272$big_all_cond&273$allB&274$sum_nat_const&276$muln1&277$Monoid&278$big_const_nat&279$big_andE&280$@leqif_sum&283$muln_gt0&284$leq_maxl&286$geq_max&291$dvdn_lcm&294$in&295$dvFm&296$p_m&297$dvdn_trans&298$dvdn_lcml&299$dvdn_gcd&300$dvmF&301$m_p&302$dvdn_gcdl&303$mul0n&304$muln0&305$mulnDr&306$mulnDl&307$mulnC&308$addn2&309$exp0n&310$big1_seq&311$in_nil&312$big_cat_nested,&313$op_idx'&314$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$big_endo&256$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$big_has_cond&274$big_all_cond&275$allB&276$sum_nat_const&278$muln1&279$Monoid&280$big_const_nat&281$big_andE&282$@leqif_sum&285$muln_gt0&286$leq_maxl&288$geq_max&293$dvdn_lcm&296$in&297$dvFm&298$p_m&299$dvdn_trans&300$dvdn_lcml&301$dvdn_gcd&302$dvmF&303$m_p&304$dvdn_gcdl&305$mul0n&306$muln0&307$mulnDr&308$mulnDl&309$mulnC&310$addn2&311$exp0n&312$big1_seq&313$in_nil&314$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$is_perm_mx_tr&312$is_perm_mxMl&313$perm_mx_is_perm,&314$ltn_ord&315$lshift_subproof&316$row_mx0&317$leq_min&318$tr_pid_mx&319$pid_mx_minv&320$pid_mx_minh&321$le_n_i&322$andbCA&323$mul_pid_mx&324$minnn&325$minn_idPr&326$mulmxBl&327$pid_mx_id&328$subrr&329$mulmxBr&330$mul_pid_mx_copid&331$oppr0&332$defk&333$defi&334$big_split_ord&335$mul_col_mx&336$mul_mx_row&337$mul_row_col&338$mul_row_block&339$linear_sum&340$linearZ&341$mul_rV_lin&343$mxvecK&344$scalemxAl&345$linearP&346$row_mul&347$raddf0]&348$mulr_sumr&349$mxtrace_diag&351$mx11_scalar&353$block_mxEul,&354$oner_eq0&355$lift_permV&359$permK&360$canF_eq&361$split1&362$lift0_perm_lift&363$lift0_perm0&364$lift0_mx_perm&365$rmorphM&366$rmorph_sum&367$rmorph_nat&368$rmorphMn&369$map_scalar_mx&370$rmorph1&371$rmorph_sign&373$rmorph_prod&374$det_map_mx&375$map_row'&376$map_col'&377$cofactor_map_mx&378$map_mx_sub&379$map_mx1&380$map_pid_mx&381$map_delta_mx&385$def_gf&386$map_mxvec&388$map_vec_mx&389$trmx_mul_rev&390$mulrC&391$trmx_mul&392$scalemxAr&393$reindex&394$pair_bigA&395$mulrAC&396$mulmx_sum_row&397$scaler_suml&398$mulmx_diag&399$row_id&402$mulrCA&403$BA&404$CA&405$bigID&406$oddMt&410$mulN1r&411$tpermK&412$eqA12&413$odd_permV&414$t&415$Dst&416$det_perm&417$odd_perm1&418$det1&419$prodr_const&420$scale0r&421$detZ&422$exprS&423$bigA_distr_bigA&425$valP&427$signr_addb&428$odd_permM&429$pvalE&430$determinant_alternate&431$simp&432$Ef12&433$p_i&437$ulsfK&439$liftK&440$permE&441$si0&442$signr_odd&443$odd_add&444$odd_lift_perm&445$_]&446$neq_lift&447$partition_big&448$expand_cofactor&449$tr_row'&451$tr_col'&452$det_tr&453$expand_det_row&454$cofactor_tr&455$cofactorZ&456$eqP&457$Di&458$eq_refl&459$trmx_adj&460$mul_mx_adj&461$mul_adj_mx&462$kA:&463$A'&464$*m&465$=&466$1%:M&467$by&468$kA&469$AB1&470$def_m&471$mul_col_row&472$scalar_mx_block&473$BlAu1&474$AuBr0&475$oner_neq0&476$expand_det_col&477$1simp&478$block_mxEdl&479$block_mxEul&480$col'_col_mx&481$row'Ku&482$row'_row_mx&483$IHn1&484$trmx0&485$det_ublock&486$unitmxE&487$unitr1&488$unitrX&489$unitrN&490$unitrM&491$invr1&492$adj1&493$if_same&494$Ua&495$U_A&496$adjZ&497$scalerA&498$invrM&499$unitrX_pos&500$mulrK&501$exprSr&502$prednK&503$divrK&504$scalemx1&505$invmxZ&506$invmx1&507$invr_out&508$nsA&509$mulVr&510$mulVmx&511$mulmxV&512$uA&513$negbT&514$divrr&516$det_inv&517$unitrV&518$unitmx_tr&519$unitmx_inv&521$unitmx_mul&522$unitmx1&523$perm_mxM&526$mulVg&527$unitr0&531$mulf_eq0&533$nz_a&534$subr_eq0&536$orbF&537$scalemx_eq0&538$linearB&539$eq_aAB&540$mul_mx_scalar&542$vA0&543$detA0&544$thinmx0&545$signr_eq0&546$unlift_none&547$wjA'0&548$reindex_onto&551$defA&552$@mul_mx_row&553$/aj&554$aj0&555$wjA'&556$wj0_0&558$subr0&559$negPf&560$w0A'&561$linear0&562$fmorph_unit&565$unitfE&566$map_mxZ&568$map_mx_adj&569$fmorphV&570$is_perm_mxMr&573$mulmxE&575$xrowE&576$/A1&577$/(1 + n.+1)%N&578$mulmx_block&579$subrK&580$lshift0&581$tpermL&582$mulVf&583$_&584$elimNf&585$@det_lblock&586$def_t&589$trmxK&590$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mulC&116$mulm1&117$iteropS&118$mulmA&119$mulmC&120$mulmCA&121$mem_iota&124$leq_subLR&125$subSn&126$subnDA&127$subnKC&128$enumT&129$mem_enum&130$unlock&131$f_op&136$big_filter&139$filter_predI&140$mkseq_nth&143$big_map&144$eqn0Ngt&145$big_hasC&146$has_pred0&147$foldr_cat&149$big_cat_nested&150$big_seq_cond&152$big_andbC&153$big_seq&154$eq_bigr&155$mem_index_iota&156$big_nat_cond&157$big_nil&160$big_cons&161$iota_addl&163$big_addn&164$big_ltn&165$big_add1&166$val_ord_enum&167$sorted_filter&169$iota_ltn_sorted&170$mem_filter&171$andbCA&172$andb_idr&173$big_mkord&174$len12&175$big_ord_widen_cond&176$inord_val&177$big_pred0&178$]&179$big_ord0&180$big_nth&181$tnth_nth&182$big_ord_widen_leq&183$inordK&186$eqFG&187$big_const_seq&188$cardE&189$size_iota&190$big_const&191$card_ord&192$big_cat_nested,&193$op_idx'&194$big1&197$mul1m,&198$filter_index_enum&199$enum1&200$big_seq1&201$big_cat&203$iota_add&204$leq_sub&205$big_geq&206$@big_cat_nat&207$leqnSn&208$leqW&210$val_enum_ord&212$map_cat&213$map_comp&214$eqxx&215$count_cat&217$uniq_perm_eq&220$enum_uniq&221$big_tnth&222$index_uniq&223$valK&224$filter_undup&225$IHr&226$big_rem&227$idM&228$big_undup&229$undup_uniq&230$mem_undup&231$eq_r&232$big_split&233$simpm&234$bigID&235$orbK&236$cardD1&238$Aj&239$Qp&241$Q0&242$cardD1x&243$bigD1&244$Qj,&245$j&246$P0&247$h'K&248$reindex_onto&249$hK&250$reindex_inj&253$addSn&254$subnDr&255$addnBA&256$partition_big&257$Pi&258$andbT&259$andb_idl&261$exchange_big_dep&262$Qi&263$2(big_seq_cond _ _ _ xQ)&264$exchange_big_dep_nat&265$big_endo&266$mulm0&268$x&269$y&270$big_distrl&272$big_distrr&273$f&275$ffunE&276$nri&277$eqP&278$big_distr_big_dep&279$mul0m&281$bigA_distr_big&283$big_has_cond&284$big_all_cond&285$allB&286$sum_nat_const&288$Monoid&289$big_const_nat&290$big_andE&291$@leqif_sum&294$muln_gt0&295$leq_maxl&297$geq_max&302$dvdn_lcm&305$in&306$dvFm&307$p_m&308$dvdn_trans&309$dvdn_lcml&310$dvdn_gcd&311$dvmF&312$m_p&313$dvdn_gcdl&314$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$by&143$nth_nseq&144$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$min0n&155$big_mkord&156$big_ord0&157$GRing&158$minn0&159$mulE&160$addE&161$minSS&162$big_nat_recl&163$GRing.addrC&164$GRing.add0r&165$addnS&167$nth_take&168$nth_drop&170$ltn_add2l&171$lsubseqmxE&172$usubseqmxE&173$rsubseqmxE&174$dsubseqmxE&175$size_row_row_seqmx&176$ltn_add2r&177$leqNgt&178$size_row_col_seqmx&179$ord1&180$row_seqmxE&181$col_seqmxE&182$H2&183$H1&184$H2=>&185$H3&186$H4&187$castmx_id&188$size_iota&189$mkseqmxE&191$oneE&192$scalar_seqmxE&193$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul1n&116$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.Theory.sumrB&115$big_ltn&116$@big_add1&117$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$min0n&155$big_mkord&156$big_ord0&157$GRing&158$minn0&159$mulE&160$addE&161$minSS&162$big_nat_recl&163$GRing.addrC&164$GRing.add0r&165$addnS&167$nth_take&168$nth_drop&170$ltn_add2l&171$lsubseqmxE&172$usubseqmxE&173$rsubseqmxE&174$dsubseqmxE&175$size_row_row_seqmx&176$ltn_add2r&177$leqNgt&178$size_row_col_seqmx&179$ord1&180$row_seqmxE&181$col_seqmxE&182$H2&183$H1&184$H2=>&185$H3&186$H4&187$castmx_id&188$size_iota&189$mkseqmxE&191$oneE&192$scalar_seqmxE&193$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$mxE&102$ord1&103$hjj&104$tpermR&105$hxx&106$hjjj&107$tpermL&108$tpermD&109$hx&110$leq0n&111$hy&112$xcolE&113$xcol_tool&114$vsubmxK&115$lshift0&116$eqP&117$hM00&118$unitmx1&119$mulmx1&120$block_mxEv&121$rshift1&122$unitmxE&123$det_ublock&124$det1&125$mul1r&126$unitr1&127$submxK&128$mulmx_block&129$mulmx0&130$addr0&131$mul_scalar_mx&132$scalerA&133$mulrN&134$mulfV&135$scaleN1r&136$addrC&137$subrr&138$scalemxAr&139$scaleNr&140$unitmx_mul&141$unitmx_perm&142$mul1r
+&143$h1&144$hsubmxK&145$mulmxA&146$@mul_row_block&147$mulmx0
+&148$add0r&149$h3&150$block_mxEh&151$tperm01_tool&152$_(1 + n)]row_mx0&153$dl&154$h&155$row_mx0&156$addsmxC&158$trmx0&160$trmxK&161$trmx_eq0&162$tr_block_mx&163$tr_col_mx&164$mulr1n&167$mxrank_tr&168$mxrank_disjoint_sum&169$rank_rV&170$rank0M&171$trmx_neq0&172$hC&173$tr_scalar_mx&174$sub_capmx&175$hB&176$big1&177$mulr0&178$hb&179$@mul0r&180$scale0r&181$rankaMc&182$M&183$mxrankMfree&184$subnDr&185$subSn&186$rank_leq_row&187$mulmxV&188$mul0mx&189$by&190$hY&191$mul_mx_scalar&192$@mul_row_col&193$@mul_col_mx&194$col_mx0&195$mul1mx&196$@mulmx_block&197$scalar_mx_block&198$m&199$n&200$castmx_mul&201$castmxE&202$thinmx0&203$X&204$hX&205$@mul_mx_row&206$mulmxN&207$addr_eq0&208$scalerN&209$opprK&210$mulVf&211$scale1r&212$hM&213$hR&214$hZ&215$ker0MS&217$dsubseqmxE&218$seqmx0E&219$@seqmxE&220$rsubseqmxE&221$dlsubseqmxE&222$row_seqmxE&223$ursubseqmxE&224$mulseqmxE&225$drsubseqmxE&226$cinvE&227$scaleseqmxE&228$subseqmxE&229$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$HH1&163$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$expn0&102$expnS&103$H&104$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$H&117$addnsubn1&118$addSn&119$mulnDr&120$addn2&121$IH0&122$H1&123$expn_gt0&124$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$H&117$addnsubn1&118$addSn&119$mulnDr&120$addn2&121$IH0&122$H1&123$expn_gt0&124$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$factS&112$fact_auxP&113$prednK&114$addnS&115$pred_Sn&116$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$IH&102$mulSn&103$helper_mul_is_theta&104$IH&102$mulSn&103$helper_mul_is_theta&104$IH&102$IH&102$IH&102$pred_Sn&103$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$helper_expt_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_expt&112$program_is_fn_expt&113$fn_expt_is_theta&114$H&115$program_correct_expt&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$helper_less_is_theta&102$IH&103$pred_Sn&104$loop_is_helper_less&105$program_is_fn_less&106$fn_less_is_theta&107$H&108$program_correct_less&109$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$mulnS&108$helper_power_is_theta&109$mul1n&110$pred_Sn&111$run_app&112$loop_is_helper_power&113$program_is_fn_power&114$fn_power_is_theta&115$H&116$program_correct_power&117$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$factS&112$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$factS&113$fact0&114$mul0n&102$mul1n&103$IH&104$pred_Sn&105$mulnDr&106$mulnDl&107$
+&108$helper_fib_is_theta&109$muln0&110$muln1&111$H&112$in&113$/fib_locals&114$/helper_fib&115$prednK&116$H1&117$run_app&118$loop_is_helper_fib&119$program_is_fn_fib&120$fn_fib_is_theta&121$program_correct_fib&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&291$le2&292$m2_0&293$n1_gt0&294$n2_gt0&295$sqrn_gt0&297$ne_mn&298$ltn_add2r&299$nat_Cauchy&300$addE&301$add_mulE&302$mulE&303$mul_expE&304$sub2nn&305$natTrecE&306$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$/(rot i s1)&229$def_s1&230$FcatCA&232$addnK&233$rot1_cons&234$rotK&235$has_rot&236$subKn&237$rot0&238$size_rev&240$size_rotr&243$@size_takel&244$5(catA, =^~ rot_size_cat)&245$leq_addl&246$rot_addn&248$addnBA&249$@rot_oversize&250$1ltnW&251$rot_add_mod&252$1addnC&253$rot_rot&254$has_mask_cons&255$size_mask&256$mask_cat&257$Hs&258$mask_rot&261$size_nseq&262$mask_false&263$sz_m&265$geq_min&266$nth_take&267$negb_add&268$addbF&269$addbT&270$negb_eqb&271$before_find&272$def_m_i&273$lt_i_m&274$subnKC&275$congr1&276$drop_nth&277$nth_index&278$index_mem&279$mask0&280$sz_m1&281$sz_m2&282$cat_subseq&283$sub0seq&284$mask_true&286$all_predC&295$map_cat&296$map_take&297$map_drop&298$map_rot&300$size_map&301$filter_mask&302$a_x&303$size_subseq_leqif&305$subseq_filter&306$introT&307$uniq_perm_eq&308$filter_uniq&309$x&310$Ds2&312$perm_rcons&313$eqP&315$x']&316$map_mask&318$inj_in_eq&319$count_map&322$Est&323$eq_sz&326$ltis&327$nth_map&328$Ef&329$eq_f12&330$eqf12&331$eqxx,&332$sy&333$gK&335$fK&336$mem_map&337$pmap_filter&338$size_pmap&340$IHn1&344$addnS&345$iota_add&346$size_iota&347$andbN&348$leq_eqVlt&349$mem_iota&351$nth_iota&353$size_mkseq&355$Hi&356$nth_mkseq&357$mkseq_nth&359$perm_map&360$perm_eq_small&361$Ds&362$iota_addl&363$map_rotr&364$map_comp&365$@eq_map&366$mulnC&367$sumn_nseq&368$foldr_cat&369$revK&370$Hfg&371$Hgf&372$addn_minr&373$size_zip&374$zip_cat&375$zip_rcons&376$IHss&377$IHsh&378$leq_subLR&379$leq_add2l&381$leq_max&382$def_z&383$def_x'&384$map_f&385$not_fxt_z&386$eq_s&387$eq_t&388$fpz&389$sp2&390$Ut&391$:&392$z.1,&393$=&394$x,&395$by&396$Dz1&397$s1z&398$s1'x&399$def_b&106$mem_topred&129$symR&131$Rxy&132$eqiR&133$fK&134$hf&139$fgK&140$mf&142$fgK_on&143$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$thinmx0&102$=>&103$H&104$det1&105$det0&106$H1&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$ffunE&102$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$big_endo&256$mxE&108$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$big_has_cond&274$big_all_cond&275$allB&276$sum_nat_const&278$muln1&279$Monoid&280$big_const_nat&281$big_andE&282$@leqif_sum&285$muln_gt0&286$leq_maxl&288$geq_max&293$dvdn_lcm&296$in&297$dvFm&298$p_m&299$dvdn_trans&300$dvdn_lcml&301$dvdn_gcd&302$dvmF&303$m_p&304$dvdn_gcdl&305$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$addnS&155$nth_take&156$nth_drop&158$ltn_add2l&159$lsubseqmxE&160$usubseqmxE&161$rsubseqmxE&162$dsubseqmxE&163$size_row_row_seqmx&164$ltn_add2r&165$leqNgt&166$size_row_col_seqmx&167$ord1&168$row_seqmxE&169$col_seqmxE&170$H2&171$H1&172$H2=>&173$H3&174$H4&175$castmx_id&176$size_iota&177$mkseqmxE&179$oneE&180$scalar_seqmxE&181$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$helper_expt_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_expt&112$program_is_fn_expt&113$fn_expt_is_theta&114$H&115$program_correct_expt&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$mul0n&102$mul1n&103$IH&104$pred_Sn&105$mulnDr&106$mulnDl&107$
+&108$helper_fib_is_theta&109$muln0&110$muln1&111$H&112$in&113$/fib_locals&114$/helper_fib&115$prednK&116$H1&117$run_app&118$loop_is_helper_fib&119$program_is_fn_fib&120$fn_fib_is_theta&121$program_correct_fib&122$helper_less_is_theta&102$IH&103$pred_Sn&104$loop_is_helper_less&105$program_is_fn_less&106$fn_less_is_theta&107$H&108$program_correct_less&109$IH&102$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$mulnS&108$helper_power_is_theta&109$mul1n&110$pred_Sn&111$run_app&112$loop_is_helper_power&113$program_is_fn_power&114$fn_power_is_theta&115$H&116$program_correct_power&117$addn0&102$addn0&102$addn0&102$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$addn0&102$IH&103$addn0&102$IH&103$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$fact0&102$muln1&103$fact0&102$muln1&103$res&104$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$addn0&102$IH&103$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$def_b&106$mem_topred&129$symR&131$Rxy&132$eqiR&133$fK&134$hf&139$fgK&140$mf&142$fgK_on&143$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$/(rot i s1)&229$def_s1&230$FcatCA&232$addnK&233$rot1_cons&234$rotK&235$has_rot&236$subKn&237$rot0&238$size_rev&240$size_rotr&243$@size_takel&244$5(catA, =^~ rot_size_cat)&245$leq_addl&246$rot_addn&248$addnBA&249$@rot_oversize&250$1ltnW&251$rot_add_mod&252$1addnC&253$rot_rot&254$has_mask_cons&255$size_mask&256$mask_cat&257$Hs&258$mask_rot&261$size_nseq&262$mask_false&263$sz_m&265$geq_min&266$nth_take&267$negb_add&268$addbF&269$addbT&270$negb_eqb&271$before_find&272$def_m_i&273$lt_i_m&274$subnKC&275$congr1&276$drop_nth&277$nth_index&278$index_mem&279$mask0&280$sz_m1&281$sz_m2&282$cat_subseq&283$sub0seq&284$mask_true&286$all_predC&295$map_cat&296$map_take&297$map_drop&298$map_rot&300$size_map&301$filter_mask&302$a_x&303$size_subseq_leqif&305$subseq_filter&306$introT&307$uniq_perm_eq&308$filter_uniq&309$x&310$Ds2&312$perm_rcons&313$eqP&315$x']&316$map_mask&318$inj_in_eq&319$count_map&322$Est&323$eq_sz&326$ltis&327$nth_map&328$Ef&329$eq_f12&330$eqf12&331$eqxx,&332$sy&333$gK&335$fK&336$mem_map&337$pmap_filter&338$size_pmap&340$IHn1&344$addnS&345$iota_add&346$size_iota&347$andbN&348$leq_eqVlt&349$mem_iota&351$nth_iota&353$size_mkseq&355$Hi&356$nth_mkseq&357$mkseq_nth&359$perm_map&360$perm_eq_small&361$Ds&362$iota_addl&363$map_rotr&364$map_comp&365$@eq_map&366$mulnC&367$sumn_nseq&368$foldr_cat&369$revK&370$Hfg&371$Hgf&372$addn_minr&373$size_zip&374$zip_cat&375$zip_rcons&376$IHss&377$IHsh&378$leq_subLR&379$leq_add2l&381$leq_max&382$def_z&383$def_x'&384$map_f&385$not_fxt_z&386$eq_s&387$eq_t&388$fpz&389$sp2&390$Ut&391$:&392$z.1,&393$=&394$x,&395$by&396$Dz1&397$s1z&398$s1'x&399$muln1&102$leq_mul&103$fact_gt0&104$ltn_mul&105$big_nil&106$factS&108$big_add1&109$big_nat_recr&110$mulnC&111$logn1&112$big_geq&113$lognM&114$logn_count_dvd&116$big_mkcond&117$big_nat_widen&118$1ltnW&119$exchange_big_nat&122$divn_count_dvd&124$big_filter&125$fact_prod&126$prednK&128$all_predC&129$has_pred1&130$mem_iota&131$leq_eqVlt&132$bigD1&133$lt0n&134$dvdn_gt0&135$dvdn_addr&136$dvdn_mulr&137$dvdn1&138$1((1 =P p.-1)&139$modnMml&141$modnMmr&142$mulnA&143$mul1n&144$val_eqE&145$i_gt0&146$modnMDl&147$modn_small&148$coprime_sym&149$prime_coprime&150$leqNgt&151$ltn_ord&152$vFp0&153$mod0n&154$mFp1r&155$vFpV&156$mFpA&157$vFp0,&158$eqn_mod_dvd&162$modnDl,&163$subnKC&164$2eqFp&165$Euclid_dvdM&166$addnS&167$addnBA&168$mulnDl&169$subn_sqr&170$leq_sqr&171$mulnS&172$mulnn&173$/(Fp1 : nat)&174$dvdn_addl&175$eqFp&176$Fp_mod&177$eqn0Ngt&178$lt0i&179$modnDl&180$eqxx&181$modnDml&182$mod_fact&183$modnn&184$modnMm&185$big_mkord&186$bigID&187$/mFpM&188$mFpC&189$vFpId&190$mFp1&191$lt1p&192$orbT&193$eqF1n1&194$reindex_onto&195$2negb_or&196$E&197$vFpK&198$big_split&199$big1&200$ffactn1&201$ffactSS&202$muln_gt0&203$ffact_gt0&204$ffactnS&205$mulnK&206$binS&207$bin0&208$addn_gt0&209$IHm&210$andKb&211$leq_add&212$bin_gt0&213$bin_small&214$bin1&215$mulSn&216$mulnDr&217$mulnCA&218$mul_Sm_binm&219$divnMA&220$divn_small&221$fact_smonotone&222$ffact_small&223$eqn_pmul2r&224$bin_ffact&225$subKn&226$bin_fact&227$mulnAC&228$bin_sub&229$leqnSn&230$subSnn&231$mul2n&232$half_double&233$bin2&234$divn2&235$muln_divA&236$dvdn2&237$def_p&238$gtnNdvd&239$bin1]&240$addnn&242$big_nat_rev&243$sum_nat_const&244$card_ord&245$big_ord_recl&246$big_ord0&247$expnS&248$big_distrr&249$big_ord_recr&250$binn&251$subnSK&252$2mulnA&253$expnSr&254$/(f _ _)&255$fxx&256$IHk&257$big1_eq&258$mulnBl&259$subnDA&260$addnK&261$exp1n&262$subn_exp&263$reindex_inj&264$@eq_card1&265$t&266$tuple0&267$sum1dep_card&268$partition_big&269$cardD1&270$Ax&271$reindex&272$tuple_eta&273$theadE&274$andbT&275$all_predI&276$card_uniq_tuples&277$on_card_preimset&278$codom_ffun&280$has_map&282$enumT&283$has_filter&284$size_eq0&285$cardE&286$card_inj_ffuns_on&287$2inE&288$eq_card0&289$A&290$leq_ltn_trans&291$sum_nat_dep_const&292$card_inj_ffuns&293$card_imset&294$cardAk&295$enum_rankK_in&298$ffunE&299$inj_eq&300$im_f0&301$ffactnn&302$eq_pij&303$eqEcard&304$mem_imset&305$card_draws&307$mkseq_nth&308$Am&309$sorted_filter&310$unlock&311$val_ord_enum&312$iota_ltn_sorted&313$mem_enum&314$val_fA&315$cardsE&316$card_uniqP&317$size_tuple&318$map_inj_uniq&319$ft_m&321$in&323$t_x&324$*&325$addSn&326$tnth_nth&327$card_ltn_sorted_tuples&328$map_comp&329$eq_map&330$m0&331$def_m&332$drop_nth&333$leq_addl&334$drop_size&335$leq_add2l&336$tnth_ord_tuple,&338$inord_val&339$inc_t&340$tnth_map&341$tnth_ord_tuple&342$inordK&343$leq_subLR&344$nth_map&345$def_e&346$size_map&347$IHj&349$card_sorted_tuples&351$/(val x0)&352$big_cons&353$IHt&354$val_insubd&355$leq_add2r&356$add_mn&357$s&358$sub_mn&359$=&360$x&361$by&362$card_partial_ord_partitions&363$sameP&364$def_n&365$rowK&107$tnth_nth&108$genmx_id&109$gen_vs2mx&111$sameP&113$memvK&115$linear0&116$genmx0&117$genmx_adds&118$genmx_cap&119$genmx1&120$tvalK&121$mulmx_sum_row&122$linear_sum&123$row_b2mx&125$linearZ&126$mul_b2mx&127$mxE&128$span_b2mx&129$size_tuple&130$scalemx_sub&132$sub0mx&133$Uu&134$Uv&135$linearP&136$addmx_sub&137$scale1r&144$memvE&146$subv_refl&147$eqUV&148$row_sub&150$eqEsubv&152$sub0v&153$andbT&154$scaler0,&155$vs2mxF&156$submx1&157$mem_r2v&159$nz_row_sub&160$memv0&161$subv0&162$vs2mx0&163$submx0&164$nz_row_eq0&165$vs2mxD&166$addsmx_sub&167$addsmxSl&169$addsmxSr&170$addsmxC&171$submx_refl&172$addsmxA&173$addvC&175$linearD&177$submxMl&180$bigD1&181$addvSl&182$subv_add&187$vs2mx_sum&189$vs2mxI&190$sub_capmx&191$capmxSl&193$capmxSr&194$capmxC&195$capmxA&196$capvC&197$subv_cap&199$memv_cap&200$vs2mxD,&202$capvSl&204$bigcapv_inf&205$sub1mx&206$capmx_compl&208$diffmxSl&209$capmx_diff&210$addv_diff_cap&211$addvA&212$addv_idPr&213$mxrank0&214$mxrank_eq0&215$mxrank1&216$mxrank_gen&217$rank_rV&218$can2_eq&219$dimvf&223$mxrank_compl&224$mxrank_cap_compl&225$mxrank_sum_cap&226$dimv_sum_cap&227$dxUV&228$dimv0&229$dimv_eq0&231$eqn_add2l&232$dimv_leqif_eq&233$dim_vline&234$eqxx&235$leq_add2l&237$directvE&239$leq_eqVlt&242$dimv_sum_leqif&243$orbF&244$mxdirectE&245$mxdirect_addsE&246$directv_addE&247$directv_trivial&248$subr_eq0&250$opprD&251$addrACA&252$addr_eq0&253$xpair_eqE&254$eq_uv&255$oppr_eq0&256$andbb&257$memvN&258$memvB&259$addrC&260$vs2mx0]&262$2vs2mx_sum&263$dxU&266$sub0r&267$u_0&268$addKr&269$j&270$Dv&271$sumrB&272$big1&273$negPf&274$subrr&275$Pj&276$big1_eq&278$eq_row_sub&279$memv_span&280$rank_leq_row&281$sXU&283$mem_tnth&284$sub_span&286$u&287$eqXY&288$big_rem&289$big_tnth&290$span_def&291$big_nil&292$big_seq1&293$big_cons&294$big_cat&295$mulmxDl&296$scalemxAl&297$Xv&298$mulmxKpV&299$span_nil&300$span_seq1&301$perm_eq_size&302$eq_span&303$seq1_free&304$sum1_card&305$card_ord&306$has_pred1&307$all_predC&308$big_all&309$big_andE&310$free_directv&311$free_b2mx&312$\row_i&313$k&314$=&315$0&316$by&317$mul0mx&318$lin_b2mx&319$kt0&320$kermx_eq0&321$t_free&322$row_mul&323$mulmx1&324$CtK&325$2mulmxA&326$coord_free&327$mulr1&328$addr0&329$j'i&330$mulr0&331$negb_or&332$cat_free&333$perm_free&334$directvEgeq&336$geq_leqif&337$nil_free&338$big_ord0&339$free_cons&340$IH_X&341$big_ord_recl&342$freeE&343$negb_exists&344$negbK&345$in_tupleE&346$freeX&347$def_v&348$big_nth&349$big_mkord&350$index_uniq&351$free_uniq&352$valK&353$insubT&354$coord_sum_free&355$scaler_sumr&356$big_split&357$scalerA&358$scalerDl&359$size_map&360$eq_szX&361$ltiX&362$nth_map&363$neqji&364$scale0r&365$span_cat&367$defU&368$defV&369$freeY&370$eqEdim&371$sUX&372$dimvS&373$tnth_mktuple&375$row_base_free&376$eq_row_base&377$big_morph&381$span_bigcat&382$freeXs&383$bigcat_free&384$directvP&385$mul_rV_lin1&386$rowE&387$fun_of_lfunK&388$eq_fg&389$lfunE&390$addrA&391$add0r&392$addNr&393$scalerDr&394$/(f2mx (Vector.Hom _))&395$mulmxDr&396$scalemxAr&397$mxvecK&401$linearN&402$eqmxMr&404$limg_line&405$limgS&406$mulmxA&408$Drw&409$capvSr&411$big_map&412$limg_sum&413$opp_lfunE&416$add_lfunE&417$fg0&418$memvf&419$comp_lfunE&420$inv_lfun_def&421$lkerE&422$mxrank_mul_ker&423$limg_ker_dim&424$limg_span&425$limg_dim_eq&426$injf&428$memv_ker&429$linearB&430$eq_fuv&431$inj_eq&432$limg_ker0&433$limg_lfunVK&434$fK&435$capv0&436$lker0_limgf&437$lker0_lfunVK&438$comp_lfunA&439$lker0_compfV&440$comp_lfun1l&441$lker0_compVf&442$comp_lfun1r&443$map_id_in&444$map_comp&445$capvA&446$capvv&447$cap0v&448$limg0&449$add0v&450$addvS&451$capvS&452$limg_add&453$limg_comp&454$addv0&455$defW&456$x&457$Xx&458$lpreim_cap_limg&460$lpreimK&461$addNKr&462$Wfu&463$oner_eq0&464$proj_mx_sub&465$subvP&467$proj_mx_id&468$add_proj_mx&469$daddv_pi_add&473$projv_id&475$dimv_compl&476$limg_proj&477$addnK&478$capfv&479$subr0&480$capv_diff&482$addv_pi2_id&483$memv_pi2&484$addv_diff&485$memv_pi1&486$big_filter&487$IHr&488$coord_vbasis&494$vsprojK&495$basis_free&496$vbasis_mem&497$memt_nth&498$rmorphD&501$scale_scalar_mx&502$mx11_scalar&503$hsubmxK&504$row_mxKl&505$row_mxKr&506$ffunE&508$enum_rankK&509$enum_valK&510$sol_u&512$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$exp0n&102$subn0&103$big1_seq&104$muln0&105$in_nil&106$exp0n&102$subn0&103$big1_seq&104$muln0&105$in_nil&106$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$ \ No newline at end of file
diff --git a/contrib/ML4PG/coq/matlab_interaction.el b/contrib/ML4PG/coq/matlab_interaction.el
new file mode 100644
index 00000000..bab2a30f
--- /dev/null
+++ b/contrib/ML4PG/coq/matlab_interaction.el
@@ -0,0 +1,627 @@
+;; This function starts Matlab
+
+(defun ml4pg-init-clusters ()
+ (interactive)
+ (ml4pg-my-config-display)
+ (require 'comint)
+ (apply 'make-comint "matlab" *matlab-program* nil
+ (list "-nodesktop -r 0")))
+ ;(apply 'make-comint "matlab" *matlab-program* nil (list "-nodesktop -r")))
+ ; (shell-command "/home/jonathan/Matlab/bin/matlab -nodesktop -r
+ ; \"load /home/jonathan/Desktop/Research/Matlab/expt1_complete_goals.csv; kmeans_clusters_and_frequencies(expt1_complete_goals,3,1000)\"")
+
+(defvar ml4pg-my-buffer "")
+
+(defun ml4pg-my-config-display ()
+ (delete-other-windows)
+ (switch-to-buffer-other-window "*display*")
+ (erase-buffer)
+ (other-window -1))
+
+;; This function is in charge of processing the output produced by Matlab
+;; The variable signal is used to indicate the function which has called to matlab and to process the result
+
+(defvar ml4pg-signal 0)
+
+(defun ml4pg-my-output-filter (output)
+ (setq ml4pg-my-buffer (concat ml4pg-my-buffer output))
+ (when (and output (get-buffer "*display*"))
+ (with-current-buffer "*display*"
+ (progn (erase-buffer)
+ (cond ((equal ml4pg-signal 0) nil)
+ ;((equal signal 1) (print-similarities (search-cluster (split-clusters-aux (remove-jumps my-buffer) nil) (1+(length saved-theorems)))))
+ ;((equal signal 2) (print-clusters (split-clusters-aux (remove-jumps my-buffer) nil) (split-frequencies my-buffer nil)))
+ ((equal ml4pg-signal 1) (ml4pg-print-similarities (ml4pg-split-clusters-aux2 ml4pg-my-buffer nil)))
+ ;((equal signal 2) (print-clusters (split-clusters-aux my-buffer nil) (split-frequencies my-buffer nil)))
+ ((equal ml4pg-signal 4) (ml4pg-print-clusters-bis (ml4pg-split-clusters-aux ml4pg-my-buffer nil) (ml4pg-split-frequencies ml4pg-my-buffer nil)))
+ ((equal ml4pg-signal 3) (ml4pg-compute-clusters-and-values (ml4pg-split-clusters-aux (ml4pg-remove-jumps (subseq ml4pg-my-buffer (search "load" ml4pg-my-buffer :from-end t))) nil)
+ (ml4pg-split-frequencies (ml4pg-remove-jumps (subseq ml4pg-my-buffer (search "load" ml4pg-my-buffer :from-end t))) nil)))
+ (t nil)))))
+ output)
+
+(add-hook 'comint-preoutput-filter-functions 'ml4pg-my-output-filter)
+
+;(defun ml4pg-split-clusters-aux (str res)
+ ;(let ((init (search "'" str)))
+ ;(if init
+; (let ((end (search "'" str :start2 (1+ init))))
+; (split-clusters-aux (subseq str (1+ end))
+; (cons (cluster-string-to-list (subseq str (1+ init) end)) res)))
+ ; res)))
+
+;(defun ml4pg-split-frequencies (str res)
+ ;(let ((init (search "[" str)))
+ ;(if init
+; (let ((end (search "]" str :start2 (1+ init))))
+; (if (not (search "char" (subseq str init end)))
+; (split-frequencies (subseq str (1+ end))
+; (cons (string-to-number (subseq str (1+ init) end)) res))
+; (split-frequencies (subseq str (1+ (search "[" str :start2 (1+ end)))) res)
+; ))
+ ; res)))
+
+
+(defun ml4pg-split-clusters-aux2 (str res)
+ (let ((init (search "ans =" str)))
+ (if init
+ (list (ml4pg-cluster-string-to-list (ml4pg-remove-jumps (subseq str (+ 5 init) (search ">>" str :from-end t)))))
+ nil)))
+
+(defun ml4pg-split-clusters-aux (str res)
+ (let ((init (search "ans =" str)))
+ (if init
+ (let ((end (search "[" str :start2 (1+ init))))
+ (ml4pg-split-clusters-aux (subseq str (1+ end))
+ (cons (ml4pg-cluster-string-to-list (ml4pg-remove-jumps (subseq str (+ 5 init) end))) res)))
+ res)))
+
+
+(defun ml4pg-split-frequencies (str res)
+(let ((init (search "[" str)))
+ (if init
+ (let ((end (search "]" str :start2 (1+ init))))
+ (if (not (search "char" (subseq str init end)))
+ (ml4pg-split-frequencies (subseq str (1+ end))
+ (cons (string-to-number (ml4pg-remove-jumps (subseq str (1+ init) end))) res))
+ (ml4pg-split-frequencies (subseq str (1+ (search "[" str :start2 (1+ end)))) res)
+ ))
+ res)))
+
+
+
+
+(defun ml4pg-search-cluster (res n)
+ (do ((temp res (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (member (format "%s" n) (car temp))
+ (append temp2 (list (car temp))))))
+
+
+
+(defun ml4pg-cluster-string-to-list (cluster)
+ (do ((temp cluster)
+ (temp2 nil))
+ ((not (search "," temp)) (append temp2 (list temp)))
+ (progn (setf temp2 (append temp2 (list (subseq temp 0 (search "," temp)))))
+ (setf temp (subseq temp (1+ (search "," temp)))))))
+
+
+
+
+
+(defun ml4pg-remove-occurrence (list n)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (not (equal (format "%s" n) (car temp)))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+
+(defvar ml4pg-granularity-level-temp 1)
+
+(defun ml4pg-print-similarities (res)
+ (interactive)
+ (cond ((not (caar res)) (insert (format "Searching similarities...\n")))
+ ((search "None" (caar res))
+ (if (not ml4pg-iterative)
+ (insert (format "Sorry, but we have not found any similarity using granularity %s\n" ml4pg-granularity-level))
+ (if (eq ml4pg-granularity-level-temp 5)
+ (format "Sorry, but we have not found any similarity at any ganularity level\n")
+ (progn (setf ml4pg-granularity-level-temp (1+ ml4pg-granularity-level-temp))
+ (ml4pg-show-clusters-of-theorem-iterative)))))
+ (t (progn (insert (format "Similarities:\n"))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (insert (format "This lemma is similar to the lemmas:\n"))
+ (do ((temp2 (ml4pg-remove-occurrence (car res) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
+ ((endp temp2) )
+ (if (<= (string-to-number (car temp2)) (length ml4pg-saved-theorems))
+ (progn (insert (format "- "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
+ (insert (format "- "))
+ (ml4pg-insert-button-lemma temp-res)))))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (if ml4pg-iterative (insert (format "Similarities found using granularity level %s\n" ml4pg-granularity-level-temp)))
+ )))
+
+
+
+
+(defun ml4pg-print-similarities-matlab ()
+ (with-current-buffer "*display*"
+ (while (string= "0" (car (read-lines (expand-file-name "available.txt"))))
+
+ (progn (erase-buffer)
+ (insert (format "Searching clusters...\n"))
+ (sleep-for 1))
+ )
+ (erase-buffer)
+ (let* ((clu (car (ml4pg-read-lines (expand-file-name "matlab_res.txt")))))
+ (cond
+ ((search "None" clu)
+ (if (not ml4pg-iterative)
+ (insert (format "Sorry, but we have not found any similarity using granularity %s\n" ml4pg-granularity-level))
+ (if (eq ml4pg-granularity-level-temp 5)
+ (format "Sorry, but we have not found any similarity at any ganularity level\n")
+ (progn (setf ml4pg-granularity-level-temp (1+ ml4pg-granularity-level-temp))
+ (ml4pg-show-clusters-of-theorem-iterative)))))
+ (t (progn (insert (format "Similarities:\n"))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (insert (format "This lemma is similar to the lemmas:\n "))
+ (do ((temp2 (ml4pg-remove-occurrence (ml4pg-cluster-string-to-list clu) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
+ ((endp temp2) )
+ (if (<= (string-to-number (car temp2)) (length ml4pg-saved-theorems))
+ (progn (insert (format "- "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
+ (insert (format "- "))
+ (ml4pg-insert-button-lemma temp-res)))))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (if ml4pg-iterative (insert (format "Similarities found using granularity level %s\n" ml4pg-granularity-level-temp)))
+ ))
+)))
+
+
+
+
+
+(defun ml4pg-print-similarities-weka (n)
+ (let ((clusters (ml4pg-extract-clusters-from-file n)))
+ (with-current-buffer "*display*"
+ (erase-buffer)
+ (insert (format "Similarities:\n"))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (insert (format "This lemma is similar to the lemmas:\n "))
+ (do ((temp2 (ml4pg-remove-occurrence (ml4pg-clusters-of-n clusters (nth (1- (length ml4pg-saved-theorems)) clusters)) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
+ ((endp temp2) )
+ (if (<= (car temp2) (length ml4pg-saved-theorems))
+ (progn (insert (format "- "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (car temp2) 1) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (car temp2) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
+ (insert (format "- "))
+ (ml4pg-insert-button-lemma temp-res))))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ )
+ ))
+
+
+
+(defun ml4pg-insert-button-lemma (lemma)
+ (progn (insert-button lemma 'action (ml4pg-insert-button-lemma-macro lemma)
+ 'face (list 'link)
+ 'follow-link t)
+ (insert (format "\n"))))
+
+
+
+(defun ml4pg-insert-button-lemma-macro (test)
+ (list 'lambda '(x)
+ (list 'progn
+ (list 'proof-shell-invisible-cmd-get-result (list 'format '"Unset Printing All."))
+ (list 'if (list 'get-buffer '"*display2*") (list 'with-current-buffer '"*display2*" (list 'delete-window)))
+ (list 'with-current-buffer '"*display*" (list 'split-window-vertically))
+ (list 'switch-to-buffer-other-window '"*display2*")
+ (list 'with-current-buffer '"*display2*" (list 'erase-buffer))
+ (list 'with-current-buffer '"*display2*"
+ (list 'insert (list 'proof-shell-invisible-cmd-get-result
+ (list 'format '"Print %s." test))))
+ )))
+
+
+
+
+
+
+(defvar ml4pg-times 0)
+
+(defun ml4pg-print-clusters (res freq)
+ (interactive)
+ (setf times (1+ times))
+ (if (not (caar res))
+ (insert (format "Searching clusters...\n"))
+ (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
+ (res1 (car temp0))
+ (freq1 (cadr temp0)))
+ (insert (format "We have found the following clusters:\n" ))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (do ((temp res1 (cdr temp))
+ (temp-freq freq1 (cdr temp-freq))
+ (i 1 (1+ i)))
+ ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
+ (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
+ (do ((temp2 (car temp) (cdr temp2)))
+ ((endp temp2) (insert (format "\n")))
+ (progn (insert (format "Lemma "))
+ (ml4pg-insert-button-lemma
+ (ml4pg-remove_last_colon
+ (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))))))))
+
+
+(defun ml4pg-print-clusters-bis (res freq)
+ (interactive)
+ (setf times (1+ times))
+ (if (not (caar res))
+ (insert (format "Searching clusters...\n"))
+ (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
+ (res1 (car temp0))
+ (freq1 (cadr temp0)))
+ (insert (format "We have found the following clusters:\n" ))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (do ((temp res1 (cdr temp))
+ (temp-freq freq1 (cdr temp-freq))
+ (i 1 (1+ i)))
+ ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
+ (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
+ (do ((temp2 (car temp) (cdr temp2)))
+ ((endp temp2) (insert (format "\n")))
+ (if (< (string-to-number (car temp2)) (length ml4pg-saved-theorems))
+ (progn (insert (format "Lemma "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
+ (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (format "%s" (read (current-buffer)))))
+ (insert (format "Lemma " ))
+ (ml4pg-insert-button-lemma temp-res))
+ )))))))
+
+
+(defun ml4pg-extract_clusters_freq (list)
+ (do ((temp list (cdr temp))
+ (clusters nil)
+ (freq nil))
+ ((endp temp) (list clusters freq))
+ (if (not (string= (subseq (car temp) 0 1) "["))
+ (setf clusters (append clusters (list (car temp))))
+ (setf freq (append freq (list (string-to-number (subseq (car temp) 1 (search "]" (car temp))))))))))
+
+
+
+
+
+
+
+
+
+
+
+(defun ml4pg-print-clusters-weka (gra)
+ (let* ((clusters (ml4pg-extract-clusters-from-file gra))
+ (res1 (ml4pg-remove-alone (cdr (ml4pg-form-clusters clusters gra)))))
+ (with-current-buffer "*display*"
+ (erase-buffer)
+ (insert (format "We have found the following clusters:\n" ))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+
+ (do ((temp res1 (cdr temp))
+ (i 1 (1+ i)))
+ ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
+ (progn (insert (format "Cluster %s\n" i ))
+ (do ((temp2 (car temp) (cdr temp2)))
+ ((endp temp2) (insert (format "\n")))
+ (if (< (car temp2) (length ml4pg-saved-theorems))
+ (progn (insert (format "Lemma "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
+ (car (nth (car temp2) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (car temp2) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (format "%s" (read (current-buffer)))))
+ (insert (format "Lemma " ))
+ (if (not (search "home" temp-res) )(ml4pg-insert-button-lemma temp-res)))
+ ))))
+
+
+ )))
+
+
+
+
+
+
+
+(defun ml4pg-remove_last_colon (str)
+ (if (string= (subseq str (1- (length str))) ":")
+ (subseq str 0 (1- (length str)))
+ str))
+
+
+;; This functions shows the cluster of a theorem
+
+
+(defun ml4pg-show-clusters-of-theorem-iterative ()
+ (interactive)
+ (let* ((alg (cond ((string= "g" ml4pg-algorithm) "find_cluster_with_gaussian") (t "find_cluster_with_kmeans")))
+ (gra (if (not ml4pg-iterative)
+ (cond ((eq 2 ml4pg-granularity-level) 5)
+ ((eq 3 ml4pg-granularity-level) 10)
+ ((eq 4 ml4pg-granularity-level) 15)
+ ((eq 5 ml4pg-granularity-level) 20)
+ (t 3))
+ (cond ((eq 2 ml4pg-granularity-level-temp) 5)
+ ((eq 3 ml4pg-granularity-level-temp) 10)
+ ((eq 4 ml4pg-granularity-level-temp) 15)
+ ((eq 5 ml4pg-granularity-level-temp) 20)
+ (t 3)))))
+ (progn (setf ml4pg-signal 1)
+ (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
+ (require 'comint)
+ (comint-send-string (get-buffer-process "*matlab*")
+ (concat "load " (expand-file-name "temp.csv")
+ (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra (1+ (length ml4pg-saved-theorems))
+ (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
+ (ml4pg-print-similarities-matlab)
+ )))
+
+(defun ml4pg-show-clusters-of-theorem ()
+ (interactive)
+ (let* ((alg (cond ((string= "g" ml4pg-algorithm) "find_cluster_with_gaussian") (t "find_cluster_with_kmeans")))
+ (gra (if (not ml4pg-iterative)
+ (cond ((eq 2 ml4pg-granularity-level) 8)
+ ((eq 3 ml4pg-granularity-level) 15)
+ ((eq 4 ml4pg-granularity-level) 25)
+ ((eq 5 ml4pg-granularity-level) 50)
+ (t 5))
+ (cond ((eq 2 ml4pg-granularity-level-temp) 8)
+ ((eq 3 ml4pg-granularity-level-temp) 15)
+ ((eq 4 ml4pg-granularity-level-temp) 25)
+ ((eq 5 ml4pg-granularity-level-temp) 50)
+ (t 5)))))
+ (progn
+ (setq ml4pg-my-buffer "")
+ (setf res (ml4pg-extract-info-up-to-here))
+ (with-temp-file (expand-file-name "temp.csv") (cond ((string= ml4pg-level "g") (insert (ml4pg-extract-features-1-bis res)))
+ ((string= ml4pg-level "t") (insert (ml4pg-extract-features-2-bis tactic-temp tactic-level)))
+ ((string= ml4pg-level "p") (insert (ml4pg-extract-features-2-bis proof-tree-temp proof-tree-level)))))
+ (if ml4pg-libs-menus
+ (progn (ml4pg-add-libraries-temp)
+ (ml4pg-add-names)))
+ (switch-to-buffer-other-window "*display*")
+ (cond ((string= ml4pg-ml-system "m")
+ (progn (setf ml4pg-signal 1)
+ (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
+ (require 'comint)
+ (comint-send-string (get-buffer-process "*matlab*")
+ (concat "load " (expand-file-name "temp.csv")
+ (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra (1+ (length ml4pg-saved-theorems))
+ (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
+ (ml4pg-print-similarities-matlab)
+ ))
+
+ ((string= ml4pg-ml-system "w")
+ (progn (setf ml4pg-signal 5)
+ (ml4pg-weka gra)
+ (sleep-for 1)
+ (ml4pg-print-similarities-weka gra))
+ )
+ )))
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All")))
+
+;; The following function shows all the clusters which have been obtained from all the theorems exported up to now
+
+(defun ml4pg-show-clusters ()
+ (interactive)
+ (let* ((alg (cond ((string= "g" ml4pg-algorithm) "gaussian_clusters") (t "kmeans_clusters_and_frequencies")))
+ (gra (cond ((eq 2 ml4pg-granularity-level) 5)
+ ((eq 3 ml4pg-granularity-level) 10)
+ ((eq 4 ml4pg-granularity-level) 15)
+ ((eq 5 ml4pg-granularity-level) 20)
+ (t 3)))
+ (freq (cond ((eq 2 ml4pg-frequency-precision) 500)
+ ((eq 3 ml4pg-frequency-precision) 1000)
+ (t 100))))
+
+ (progn
+ (setf ml4pg-signal 2)
+ (setf ml4pg-my-buffer "")
+ (progn (with-temp-file (expand-file-name "temp1.csv") (insert (ml4pg-extract-features-1)))
+ (switch-to-buffer-other-window "*display*")
+ (require 'comint)
+ (comint-send-string (get-buffer-process "*matlab*")
+ (concat "load " (expand-file-name "temp1.csv") (format "; %s(temp1,%s,%s)\n" alg gra freq))))
+ )))
+
+
+
+(defun ml4pg-show-clusters-bis ()
+ (interactive)
+ (let* ((alg (cond ((string= "g" ml4pg-algorithm) "gaussian_clusters") (t "kmeans_clusters_and_frequencies")))
+ (gra (cond ((eq 2 ml4pg-granularity-level) 5)
+ ((eq 3 ml4pg-granularity-level) 10)
+ ((eq 4 ml4pg-granularity-level) 15)
+ ((eq 5 ml4pg-granularity-level) 20)
+ (t 3)))
+ (freq (cond ((eq 2 ml4pg-frequency-precision) 500)
+ ((eq 3 ml4pg-frequency-precision) 1000)
+ (t 100))))
+
+ (progn
+ (setf ml4pg-signal 4)
+ (setf ml4pg-my-buffer "")
+ (if ml4pg-libs-menus
+ (progn (with-temp-file (expand-file-name "temp.csv") (cond ((string= ml4pg-level "g") (insert (ml4pg-extract-features-1)))
+ ((string= ml4pg-level "t") (insert (ml4pg-extract-features-2 tactic-level)))
+ ((string= ml4pg-level "p") (insert (ml4pg-extract-features-2 proof-tree-level)))))
+ (ml4pg-add-libraries-temp)
+ (ml4pg-add-names))
+ (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-1))))
+ (switch-to-buffer-other-window "*display*")
+ (cond ((string= ml4pg-ml-system "m")
+ (progn
+ (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
+ (require 'comint)
+ (comint-send-string (get-buffer-process "*matlab*")
+ (concat "load " (expand-file-name "temp.csv") (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra freq
+ (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
+ (ml4pg-print-clusters-matlab)))
+ ((string= ml4pg-ml-system "w")
+ (progn (setf ml4pg-signal 5)
+ (ml4pg-weka gra)
+ (sleep-for 1)
+ (ml4pg-print-clusters-weka gra))
+ )
+
+ )))
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
+)
+
+
+
+
+(defun ml4pg-add-libraries ()
+ (do ((temp ml4pg-libs-menus (cdr temp)))
+ ((endp temp) nil)
+ (cond ((string= ml4pg-level "g") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) ".csv >> " (expand-file-name "temp1.csv"))))
+ ((string= ml4pg-level "t") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_tactics.csv >> " (expand-file-name "temp1.csv"))))
+ ((string= ml4pg-level "p") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_tree.csv >> " (expand-file-name "temp1.csv")))))))
+
+(defun ml4pg-add-libraries-temp ()
+ (do ((temp ml4pg-libs-menus (cdr temp)))
+ ((endp temp) nil)
+ (cond ((string= ml4pg-level "g") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) ".csv >> " (expand-file-name "temp.csv"))))
+ ((string= ml4pg-level "t") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_tactics.csv >> " (expand-file-name "temp.csv"))))
+ ((string= ml4pg-level "p") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_tree.csv >> " (expand-file-name "temp.csv")))))))
+
+(defun ml4pg-add-names ()
+ (shell-command (concat "rm " (expand-file-name "names_temp.txt")))
+ (shell-command (concat "touch " (expand-file-name "names_temp.txt")))
+ (do ((temp ml4pg-libs-menus (cdr temp)))
+ ((endp temp) nil)
+ (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_names >> " (expand-file-name "names_temp.txt")))))
+
+
+
+
+
+
+
+(defvar ml4pg-names-values nil)
+
+(defun ml4pg-print-clusters2 (res freq)
+ (interactive)
+ (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
+ (res1 (car temp0))
+ (freq1 (cadr temp0)))
+ (insert (format "We have found the following clusters:\n"))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (do ((temp res1 (cdr temp))
+ (temp-freq freq1 (cdr temp-freq))
+ (i 1 (1+ i)))
+ ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")))
+ (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
+ (do ((temp2 (car temp) (cdr temp2)))
+ ((endp temp2) (insert (format "\n")))
+ (insert (format "Lemma %s\n"
+ (ml4pg-remove_last_colon
+ (car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems2))))))))))
+
+
+(defun ml4pg-compute-clusters-and-values (list fr)
+ (if (not (ml4pg-left-strings ml4pg-saved-theorems2))
+ (ml4pg-print-clusters2 list fr)
+ (progn (setf ml4pg-names-values (ml4pg-extract-names-dynamic))
+ (do ((temp list (cdr temp))
+ (n 200 (+ n 5)))
+ ((endp temp) (progn (setf ml4pg-names-values (ml4pg-complete-names-values ml4pg-names-values n))
+ (setf ml4pg-saved-theorems2 (ml4pg-recompute-saved-theorems ml4pg-saved-theorems2))
+ (setf ml4pg-my-buffer "")
+ (ml4pg-show-clusters-dynamic-b)
+ )
+nil
+)
+ (ml4pg-assign-values (car temp) n))
+ )))
+
+(defvar ml4pg-granularity-dynamic 0)
+
+(defun ml4pg-show-clusters-dynamic ()
+ (interactive)
+ (setf ml4pg-granularity-dynamic (read-string "Introduce the granularity level (values from 1 to 5): "))
+ (progn
+ (setf ml4pg-signal 3)
+ (setf ml4pg-my-buffer "")
+ (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-dynamic)))
+ (switch-to-buffer-other-window "*display*")
+ (require 'comint)
+ (cond ((string= "1" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,3,100)\n")))
+ ((string= "2" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,5,100)\n")))
+ ((string= "3" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,10,100)\n")))
+ ((string= "4" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,15,100)\n")))
+ ((string= "5" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,20,100)\n")))
+ (t (ml4pg-show-clusters-dynamic)))
+
+ ))
+
+(defun ml4pg-show-clusters-dynamic-b ()
+ (interactive)
+ (progn
+ (setf ml4pg-signal 3)
+ (setf ml4pg-my-buffer "")
+ (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-dynamic)))
+ (require 'comint)
+ (cond ((string= "1" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,3,100)\n")))
+ ((string= "2" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,5,100)\n")))
+ ((string= "3" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,10,100)\n")))
+ ((string= "4" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,15,100)\n")))
+ ((string= "5" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,20,100)\n")))
+ (t (ml4pg-show-clusters-dynamic)))
+ ;(comint-send-string (get-buffer-process "*matlab*")
+; (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,"
+; (format "%s" (floor (length (extract-list-without-strings saved-theorems2)) 5) ) ",100)\n"))
+ )) \ No newline at end of file
diff --git a/contrib/ML4PG/coq/menus.el b/contrib/ML4PG/coq/menus.el
new file mode 100644
index 00000000..97d67963
--- /dev/null
+++ b/contrib/ML4PG/coq/menus.el
@@ -0,0 +1,304 @@
+;;; The menu interaction
+
+(easy-menu-define statistics-menu global-map "Statistics"
+ '("Statistics"
+ ("Configuration"
+ ("Algorithm"
+ ["K-means" (ml4pg-change-algorithm "k")
+ :selected (string= ml4pg-algorithm "k")
+ :style toggle
+ :help "Use k-means algorithm"]
+ ["EM" (ml4pg-change-algorithm "e")
+ :selected (string= ml4pg-algorithm "e")
+ :style toggle
+ :active (string= ml4pg-ml-system "w")
+ :help "Use Simple EM algorithm"]
+ ["FarthestFirst" (ml4pg-change-algorithm "f")
+ :selected (string= ml4pg-algorithm "f")
+ :style toggle
+ :active (string= ml4pg-ml-system "w")
+ :help "Use FarhestFirst algorithm"])
+ ("Granularity"
+ ["1" (ml4pg-change-granularity 1)
+ :selected (eq ml4pg-granularity-level 1)
+ :style toggle
+ :help "We will use 3 clusters"]
+ ["2" (ml4pg-change-granularity 2)
+ :selected (eq ml4pg-granularity-level 2)
+ :style toggle
+ :help "We will use 5 clusters"]
+ ["3" (ml4pg-change-granularity 3)
+ :selected (eq ml4pg-granularity-level 3)
+ :style toggle
+ :help "We will use 10 clusters"]
+ ["4" (ml4pg-change-granularity 4)
+ :selected (eq ml4pg-granularity-level 4)
+ :style toggle
+ :help "We will use 15 clusters"]
+ ["5" (ml4pg-change-granularity 5)
+ :selected (eq ml4pg-granularity-level 5)
+ :style toggle
+ :help "We will use 20 clusters"])
+ ("Frequencies"
+ ["1" (ml4pg-change-frequency 1)
+ :selected (eq ml4pg-frequency-precision 1)
+ :style toggle
+ :help "The experiments will be run 100 times"]
+ ["2" (ml4pg-change-frequency 2)
+ :selected (eq ml4pg-frequency-precision 2)
+ :style toggle
+ :help "The experiments will be run 500 times"]
+ ["3" (ml4pg-change-frequency 3)
+ :selected (eq ml4pg-frequency-precision 3)
+ :style toggle
+ :help "The experiments will be run 1000 times"])
+)
+ ["Extract info up to point" (ml4pg-extract-feature-theorems)
+ :keys "C-c SPC"]
+ ["Show clusters" (ml4pg-show-clusters-bis)
+ :keys "C-c c"]
+ ["Show similar theorems" (ml4pg-show-clusters-of-theorem)
+ :keys "C-c m"]
+ ["Export library" (ml4pg-save-numbers)
+ :keys "C-c n"]
+ ["Show cluster libraries" (ml4pg-exported-libraries)]
+ ["Activate Icons" (ml4pg-activate-icons)]
+))
+
+(easy-menu-remove-item global-map '("menu-bar") "Statistics")
+
+(easy-menu-add-item nil nil statistics-menu "help-menu")
+
+(defun ml4pg-activate-icons ()
+ (interactive)
+ (progn
+ (easy-menu-remove-item nil '("Statistics") "Activate Icons")
+ (define-key coq-mode-map [tool-bar statistical-hint]
+ (list 'menu-item "Statistical Hint" 'ml4pg-show-clusters-of-theorem
+ :help "Statistical Hint"
+ :image (list 'image :type 'xpm
+ :file (concat ml4pg-home-dir "icons/sh-hint.xpm"))))
+ (define-key coq-mode-map [tool-bar clustering]
+ (list 'menu-item "Clustering" 'ml4pg-show-clusters-bis
+ :help "Clustering"
+ :image (list 'image :type 'xpm
+ :file (concat ml4pg-home-dir "icons/clustering.xpm"))))))
+
+
+(defvar ml4pg-ml-system "w")
+(defvar ml4pg-algorithm "k")
+(defvar ml4pg-granularity-level 3)
+(defvar ml4pg-frequency-precision 1)
+(defvar ml4pg-iterative nil)
+(defvar ml4pg-save-automatically nil)
+(defvar ml4pg-level "g")
+
+
+(defun ml4pg-change-level (n)
+ (setq ml4pg-level n))
+
+(defun ml4pg-change-algorithm (s)
+ (setq ml4pg-algorithm s))
+
+(defun ml4pg-change-ml-system (s)
+ (setq ml4pg-ml-system s)
+ (setq ml4pg-algorithm "k")
+ (cond ((string= s "w")
+ (setq ml4pg-iterative nil)
+ ))
+ )
+
+(defun ml4pg-change-granularity (n)
+ (setq ml4pg-granularity-level n))
+
+(defun ml4pg-change-frequency (n)
+ (setq ml4pg-frequency-precision n))
+
+(defun ml4pg-change-iterative-search ()
+ (setq ml4pg-iterative (not ml4pg-iterative)))
+
+(defun ml4pg-change-save ()
+ (setq ml4pg-save-automatically (not ml4pg-save-automatically)))
+
+
+;(easy-menu-add-item nil '("Statistics") statistics-menu "help-menu")
+
+(defun ml4pg-change-algorithm-interactive ()
+ (interactive)
+ (let ((alg (read-string
+ "What algorithm do you want to use (k-means -> k, Gaussian -> g): ")))
+ (setf ml4pg-algorithm (cond ((string= "g" alg) "g")
+ ((string= "k" alg) "k")
+ (t ml4pg-algorithm)))))
+
+(defun ml4pg-change-granularity-interactive ()
+ (interactive)
+ (let ((alg (read-string
+ "Introduce the granularity level (values from 1 to 5): ")))
+ (setf ml4pg-granularity-level (cond ((string= "1" alg) 1)
+ ((string= "2" alg) 2)
+ ((string= "3" alg) 3)
+ ((string= "4" alg) 4)
+ ((string= "5" alg) 5)
+ (t ml4pg-granularity-level)))))
+
+(defun ml4pg-change-frequency-interactive ()
+ (interactive)
+ (let ((alg (read-string
+ "Introduce the precision of the frequencies that you want to obtain (values from 1 to 3): ")))
+ (setf ml4pg-frequency-precision (cond ((string= "1" alg) 1)
+ ((string= "2" alg) 2)
+ ((string= "3" alg) 3)
+ (t ml4pg-frequency-precision)))))
+
+(defun ml4pg-change-iterative-interactive ()
+ (interactive)
+ (let ((alg (read-string
+ "Do you want to perform iterative search? (yes -> y, no -> n): ")))
+ (setf ml4pg-iterative (cond ((string= "y" alg) 1)
+ ((string= "n" alg) 2)
+ (t ml4pg-iterative)))))
+
+
+
+(defun ml4pg-exported-libraries ()
+ (interactive)
+ (easy-menu-remove-item nil '("Statistics") "Show cluster libraries")
+ (easy-menu-add-item nil '("Statistics")
+ (cons "Available libraries for clustering:"
+ (cons ["Current" nil
+ :selected t
+ :style toggle
+ :help "Use the current library for clustering"]
+ (ml4pg-select-libraries)))))
+
+
+(defun ml4pg-select-libraries ()
+ (ml4pg-available-libraries)
+ (ml4pg-available-dirs)
+ (append (ml4pg-select-libraries-aux ml4pg-libs nil) (ml4pg-libraries-dirs)))
+
+
+(defun ml4pg-select-libraries-aux (temp temp2)
+ (if (endp temp)
+ temp2
+ (ml4pg-select-libraries-aux (cdr temp) (append temp2 (list (ml4pg-menu-library (car temp)))))))
+
+
+
+
+(defvar ml4pg-libs nil)
+
+(defun ml4pg-available-libraries ()
+ (shell-command (concat "ls " ml4pg-home-dir "libs/coq | grep .csv | wc -l"))
+ (let ((n nil)
+ (i 0))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (setq n (string-to-number (format "%s" (read (current-buffer))))))
+ (shell-command (concat "ls " ml4pg-home-dir "libs/coq | grep .csv"))
+ (with-current-buffer "*Shell Command Output*"
+ (progn (beginning-of-buffer)
+ (while (< i n)
+ (let ((r (format "%s" (read (current-buffer)))))
+ (progn (setq i (1+ i))
+ (setq ml4pg-libs (append ml4pg-libs (list (subseq r 0 (search "." r))))))))))))
+
+
+
+(defvar ml4pg-dirs nil)
+
+(defun ml4pg-available-dirs ()
+ (shell-command (concat "ls -d " ml4pg-home-dir "libs/coq/*/ | wc -l"))
+ (let ((n nil)
+ (i 0))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (setq n (string-to-number (format "%s" (read (current-buffer))))))
+ (shell-command (concat "ls -d " ml4pg-home-dir "libs/coq/*/"))
+ (with-current-buffer "*Shell Command Output*"
+ (progn (beginning-of-buffer)
+ (while (< i n)
+ (let ((r (format "%s" (read (current-buffer)))))
+ (progn (setq i (1+ i))
+ (setq ml4pg-dirs (append ml4pg-dirs (list (subseq r (length (concat ml4pg-home-dir "libs/coq/")) (1- (length r)))))))))))
+ ))
+
+
+
+
+(defun ml4pg-libraries-dirs ()
+ (do ((temp ml4pg-dirs (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (setf temp2 (append temp2 (list (append (list (car temp)) (ml4pg-libraries-dir (car temp))))))))
+
+
+
+(defun ml4pg-libraries-dir (dir)
+ (shell-command (concat "ls " ml4pg-home-dir "libs/coq/" dir "/ | grep _names | wc -l"))
+ (let ((n nil)
+ (i 0)
+ (temp nil))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (setq n (string-to-number (format "%s" (read (current-buffer))))))
+ (shell-command (concat "ls " ml4pg-home-dir "libs/coq/" dir "/ | grep _names"))
+ (with-current-buffer "*Shell Command Output*"
+ (progn (beginning-of-buffer)
+ (while (< i n)
+ (let* ((r1 (format "%s" (read (current-buffer))))
+ (r (subseq r1 0 (search "_names" r1))))
+ (progn (setq i (1+ i))
+ (setq temp (append temp (list (ml4pg-menu-library-dir (subseq r 0 (search "." r)) dir)))))))
+))
+ temp))
+
+
+
+(defun ml4pg-menu-library-dir (item dir)
+ (vector item (list 'change-library (concat dir "/" item))
+ :selected (list 'string-member (concat dir "/" item) 'ml4pg-libs-menus)
+ :style 'toggle
+ :help (format "Use the %s library for clustering" item)))
+
+(defun ml4pg-menu-library (item)
+ (vector item (list 'change-library item)
+ :selected (list 'string-member item 'ml4pg-libs-menus)
+ :style 'toggle
+ :help (format "Use the %s library for clustering" item)))
+
+
+
+(defvar ml4pg-libs-menus nil)
+
+(defun ml4pg-string-member (string list)
+ (do ((temp list (cdr temp))
+ (is nil))
+ ((or (endp temp) is) is)
+ (if (string= string (car temp))
+ (setf is t))))
+
+
+(defun ml4pg-change-library (string)
+ (if (string-member string ml4pg-libs-menus)
+ (ml4pg-remove-from-menus string)
+ (setq ml4pg-libs-menus (append ml4pg-libs-menus (list string)))))
+
+
+(defun ml4pg-remove-from-menus (string)
+ (do ((temp ml4pg-libs-menus (cdr temp))
+ (temp2 nil))
+ ((endp temp) (setf libs-menus temp2))
+ (if (not (string= string (car temp)))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+
+
+
+
+
+
+
+
+
diff --git a/contrib/ML4PG/coq/save_lemmas.el b/contrib/ML4PG/coq/save_lemmas.el
new file mode 100644
index 00000000..70b06cd8
--- /dev/null
+++ b/contrib/ML4PG/coq/save_lemmas.el
@@ -0,0 +1,117 @@
+(defun ml4pg-proof-assert-next-command-interactive3 ()
+ (interactive)
+ (if (get-buffer "*response*")
+ (if (eq ml4pg-save-automatically 0)
+ (proof-assert-next-command-interactive)
+ (progn (with-current-buffer "*response*"
+ (beginning-of-buffer)
+ (if (zerop (buffer-size))
+ (setf temp nil)
+ (setf temp (search "No"
+ (format "%s" (read (current-buffer)))))))
+ (if temp
+ (ml4pg-export-previous-lemm)
+ (proof-assert-next-command-interactive)
+ ))
+
+ )
+ (proof-assert-next-command-interactive)))
+
+
+(defun ml4pg-export-previous-lemm ()
+ (interactive)
+ (let ((final (point))
+ (result nil)
+ (end nil))
+ (search-backward "Proof.")
+ (proof-goto-point)
+ (while (< (point) final)
+ (let* ((semis (save-excursion
+ (skip-chars-backward " \t\n"
+ (proof-queue-or-locked-end))
+ (proof-segment-up-to-using-cache (point))))
+ (comment (caar semis))
+ (cmd (cadar semis))
+ (ts nil))
+ (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (get-number-of-goals))
+ (if cmd
+ (setf result (cons (append (get-numbers cmd) (list ts) (list ng2)) result))
+ )
+ )
+
+ )
+ )
+ (proof-assert-next-command-interactive)
+ (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
+ (list (list (format "%s" (get-name))
+ (ml4pg-flat (reverse result))))))
+ (search-forward "Qed.")
+
+ ))
+
+
+(defun ml4pg-get-name ()
+ (search-backward "Lemma")
+ (read (current-buffer))
+ (read (current-buffer)))
+
+
+(defun ml4pg-list-to-string (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2 (car temp) ", "))))
+
+
+
+
+
+
+
+(defun ml4pg-save-numbers ()
+ (interactive)
+ (progn (beginning-of-buffer)
+ (proof-goto-point)
+ (end-of-buffer)
+ (ml4pg-extract-feature-theorems)
+ (let ((d (read-string (concat "Where do you want to store this library (" (ml4pg-list-to-string ml4pg-dirs) "n (create new directory)): ")))
+ (d2 nil))
+ (cond ((ml4pg-string-member d ml4pg-dirs)
+ (progn (with-temp-file
+ (concat ml4pg-home-dir "libs/coq/" d "/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ ".csv") (insert (ml4pg-extract-features-1)))
+
+
+ (with-temp-file (concat ml4pg-home-dir "libs/coq/" d "/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ "_names") (insert (ml4pg-extract-names)))))
+ ((string= d "n")
+ (progn
+ (setf d2 (read-string (concat "Introduce a name for the directory:")))
+ (shell-command (concat "mkdir " ml4pg-home-dir "libs/coq/" d2))
+ (with-temp-file
+ (concat ml4pg-home-dir "libs/coq/" d2 "/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ ".csv") (insert (ml4pg-extract-features-1)))
+ (with-temp-file (concat ml4pg-home-dir "libs/coq/" d2 "/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ "_names") (insert (ml4pg-extract-names)))))
+ (t
+ (progn (with-temp-file
+ (concat ml4pg-home-dir "libs/coq/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ ".csv") (insert (ml4pg-extract-features-1)))
+ (with-temp-file (concat ml4pg-home-dir "libs/coq/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ "_names") (insert (ml4pg-extract-names))))))
+))) \ No newline at end of file
diff --git a/contrib/ML4PG/coq/shortcuts.el b/contrib/ML4PG/coq/shortcuts.el
new file mode 100644
index 00000000..d67a7f50
--- /dev/null
+++ b/contrib/ML4PG/coq/shortcuts.el
@@ -0,0 +1,14 @@
+(global-set-key (kbd "C-c C-d") 'ml4pg-export-theorem)
+(global-set-key (kbd "C-c C-e") 'ml4pg-save-file-conventions1)
+(global-set-key (kbd "C-c m") 'ml4pg-show-clusters-of-theorem)
+(global-set-key (kbd "C-c C-SPC") 'ml4pg-extract-feature-theorems)
+(global-set-key (kbd "C-c c") 'ml4pg-show-clusters)
+(global-set-key (kbd "C-c e") 'ml4pg-extract-feature-theorems-dynamic)
+(global-set-key (kbd "C-c d") 'ml4pg-show-clusters-dynamic)
+(global-set-key (kbd "C-c a") 'ml4pg-change-algorithm-interactive)
+(global-set-key (kbd "C-c g") 'ml4pg-change-granularity-interactive)
+(global-set-key (kbd "C-c f") 'ml4pg-change-frequency-interactive)
+(global-set-key (kbd "C-c i") 'ml4pg-change-iterative-interactive)
+(global-set-key (kbd "C-c C-m") 'ml4pg-proof-assert-next-command-interactive3)
+(global-set-key (kbd "C-c n") 'ml4pg-save-numbers)
+
diff --git a/contrib/ML4PG/coq/storage.el b/contrib/ML4PG/coq/storage.el
new file mode 100644
index 00000000..84f1ddc1
--- /dev/null
+++ b/contrib/ML4PG/coq/storage.el
@@ -0,0 +1,51 @@
+(defun ml4pg-save-lemma-aux (string)
+ (append-to-file string nil (concat ml4pg-home-dir "lemmas.txt"))
+)
+
+(defun ml4pg-save-lemma (name value)
+ (ml4pg-save-lemma-aux (format "%s&%s$" name value)))
+
+
+(defun ml4pg-save-view-aux (string)
+ (append-to-file string nil (concat ml4pg-home-dir "views.txt"))
+)
+
+(defun ml4pg-save-view (name value)
+ (sml4pg-ave-view-aux (format "%s&%s$" name value)))
+
+
+(defun ml4pg-read-lemmas ()
+ (if (file-exists-p (concat ml4pg-home-dir "coq/lemmas.txt"))
+ (with-temp-buffer
+ (insert-file-contents (concat ml4pg-home-dir "coq/lemmas.txt"))
+ (let ((temp (format "%s" (read (current-buffer)))))
+ (setf ml4pg-theorems_id (ml4pg-extract-info-from-files temp))
+ ))))
+
+(defun ml4pg-read-views ()
+ (if (file-exists-p (concat ml4pg-home-dir "coq/views.txt"))
+ (with-temp-buffer
+ (insert-file-contents (concat ml4pg-home-dir "coq/views.txt"))
+ (let ((temp (format "%s" (read (current-buffer)))))
+ (setf ml4pg-views_id (ml4pg-extract-info-from-files temp))
+ ))))
+
+(defun ml4pg-extract-info-from-files (string)
+ (do ((temp string)
+ (temp2 nil))
+ ((not (search "$" temp)) temp2)
+ (let ((dollar (search "$" temp))
+ (amper (search "&" temp)))
+ (progn
+ (setf temp2 (append temp2 (list (cons (subseq temp 0 amper)
+ (string-to-number (subseq temp (1+ amper) dollar))))))
+ (setf temp (subseq temp (1+ dollar)))))))
+
+
+
+
+
+
+
+
+
diff --git a/contrib/ML4PG/coq/views.txt b/contrib/ML4PG/coq/views.txt
new file mode 100644
index 00000000..1f40a052
--- /dev/null
+++ b/contrib/ML4PG/coq/views.txt
@@ -0,0 +1 @@
+all_filterP&102$leq_trans->&103$subnKC&104$addIn&105$rot&106$rotr&107$/eqP&108$eqP&109$hasP&110$negP&111$predU1P&112$eq_in_filter&113$allP&114$all_pred1P&115$index&116$nth_find&117$andP&118$i&119$idPn&120$perm_eqP&121$idP&122$perm_eq_trans&123$perm_eqlP&124$perm_eq_size:&125$eqP->&126$uniq_leq_size&127$/idP&128$ss12&129$rot_to:&130$PcatCA&131$PcatCA/IHs/PcatCA&132$catCA_perm_ind&133$has_mask&134$all_nthP&135$subseqP&136$@all_pred1P&137$perm_to_rem/perm_eq_size->&138$esym&139$rem_filter&140$perm_eq_size&141$mapP&142$/mapP&143$@eq_from_nth&144$eq_in_map->&145$filter_uniq&146$map_inj_uniq->&147$It&148$allpairsP&149$orP&150$hasPn&151$eq_bigl&102$eq_bigr->&103$index_iota&104$nilP->&105$eq_bigl->&106$reducebig&107$big_hasC->&108$index_enum&109$big_nat_widen&110$g&111$G&112$eq_bigr&113$_&114$perm_to_rem/(eq_big_perm _)->&115$eq_big_perm&116$big_rem->&117$rem_filter->&118$IHn&119$familyP&120$ffunP&121$eqP/Df&122$IHr&123$familyP/(_ i)&124$existsP&125$forallP&126$bigmax_leqP&127$eq_card0->&128$perm_to_rem/(eq_big_perm _)->&102$eq_big_perm&103$big_rem->&104$rem_filter->&105$IHn&106$familyP&107$ffunP&108$eqP/Df&109$IHr&110$familyP/(_ i)&111$existsP&112$forallP&113$bigmax_leqP&114$eq_card0->&115$matrixP&102$rowP&103$rowP/(_ j):&104$colP&105$canLR&106$conform_mx&107$ord_inj->&108$addnI/val_inj->&109$bump&110$block_mx&111$ulsubmx&112$ursubmx&113$dlsubmx&114$drsubmx&115$nz_row&116$row_matrixP&117$eqP:&118$negbTE&119$is_scalar_mx&120$is_scalar_mxP&121$negbTE->&122$xcol&123$is_perm_mxP&124$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$perm_to_rem/(eq_big_perm _)->&102$eq_big_perm&103$big_rem->&104$rem_filter->&105$IHn&106$familyP&107$ffunP&108$eqP/Df&109$IHr&110$familyP/(_ i)&111$existsP&112$forallP&113$bigmax_leqP&114$eq_card0->&115$lastP:&116$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$b&102$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$rowP&102$1&103$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$matrixP&102$ord_inj&103$bump&104$rowP&105$colP&106$block_mx&107$rowV0P&108$mulIf&109$1&110$ker&111$tool&112$row_freeP&113$kernel&114$eq_row_mx&115$eqP:&116$ker_base&117$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$fact&102$exponential&103$fact&102$exponential&103$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$exponential&102$multiplication&103$fact&104$b&102$a&103$pot_matrix&104$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_expt&102$fn_expt&103$theta_fact&102$fn_fact&103$fn_less&102$theta_power&102$fn_power&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$fn_fib&102$fib_locals&103$helper_fib&104$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$pot_matrix&102$eqP&103$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$val_inj&102$ffunP&103$matrixP&104$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$theta_expt&102$fn_expt&103$theta_fact&102$fn_fact&103$fn_fib&102$fib_locals&103$helper_fib&104$fn_less&102$theta_mul&102$fn_mul&103$theta_power&102$fn_power&103$theta_sum&102$theta_sum&102$theta_sum&102$b&102$a&103$pot_matrix&104$theta_sum&102$theta_sum&102$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$theta_sum&102$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$primeP&102$vFpV&103$dvdn&104$/eqxx&105$ffact_fact&106$eqP:&107$f&108$F&109$injectiveP&110$setP&111$imsetP&112$ffunP&113$ff0'&114$inj_f0&115$subsetP&116$add_mn_nat&117$sub_mn&118$add_mn&119$vs2mx&102$free&103$dimv&104$v2r_inj->&105$vlineP&106$subsetv&107$sU12&108$subvP&109$sVW&110$vs2mxP&111$subv_anti&112$vlinePk&113$subV&114$addv_idPl&115$addv_idPr&116$sub0v&117$subvf&118$sub_addsmxP&119$subv_trans->&120$rpred_sum&121$sumv_sup&122$Uv&123$sub_sumsmxP&124$subV(sameP capmx_idPl eqmxP)&125$capv_idPl&126$capv_idPr&127$eqmxP/matrix_modl&128$val_inj&129$eqmxP/addsmx_diff_cap_eq&130$eq_op&131$dimv_leqif_eq&132$geq_leqif&133$directv_def&134$andP]&135$dxU/(_ i Pi)&136$forall_inP&137$eqP/dxU&138$seq_tnthP&139$span_subvP&140$memv_span&141$subv_sumP&142$leqif_eq&143$dim_span&144$rowP/(_ i):&145$row_free_inj&146$r2v_inj&147$rowV0P&148$rowP&149$row_freeP&150$negPf&151$and3P&152$coord_span&153$sumX&154$k&155$f&156$span_basis&157$basis_of&158$basis_free/free_not0&159$eq_span&160$row_matrixP&161$directvP->&162$/]&163$directvP&164$lfunP&165$submxP&166$memv_imgP&167$lker0P&168$lker0_lfunK&169$eq_map&170$lfun_preim&171$memv_capP&172$canRL&173$rowP/(_ (Ordinal vT_proper))/eqP&174$daddv_pi_id&175$vspaceP&176$sumv_pi_for&177$addv_pi1_pi2&178$iota_uniq&179$val_inj/vsprojK/subvsP&180$p2r&181$r2p&182$fr&183$matrixP&184$ffunP&185$canLR&186$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$rowP&102$1&103$drlower1&104$invmx_uniq&105$b&102$a&103$pot_matrix&104$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$index_iota&102$andP&103$index_iota&102$andP&103$b&102$a&103$pot_matrix&104$ \ No newline at end of file
diff --git a/contrib/ML4PG/coq/weka.el b/contrib/ML4PG/coq/weka.el
new file mode 100644
index 00000000..e21fa35c
--- /dev/null
+++ b/contrib/ML4PG/coq/weka.el
@@ -0,0 +1,81 @@
+(defun ml4pg-weka (n)
+ (let ((alg (cond ((string= "k" ml4pg-algorithm) "SimpleKMeans")
+ ((string= "e" ml4pg-algorithm) "EM")
+ ((string= "f" ml4pg-algorithm) "FarthestFirst")
+ )))
+ ;(comint-send-string (get-buffer-process "*matlab*")
+; (concat "load " (expand-file-name "temp.csv") "; [t1,X,t3] = princomp(temp); X=normalize(X); csvwrite('"
+; (expand-file-name "temp2.csv") "',X);
+;"))
+
+ (shell-command (concat "sleep 1; cat " ml4pg-home-dir "aux_files/headers.txt " (expand-file-name "temp.csv") " > " (expand-file-name "temp3.arff")))
+ (shell-command (concat "java -classpath "
+ *weka-dir*
+ " weka.filters.unsupervised.attribute.AddCluster -W \"weka.clusterers." alg " -N " (format "%s" n) " -S 42\" -I last -i "
+ (expand-file-name "temp3.arff") " -o " (expand-file-name "out.arff")))
+ (shell-command (concat "tail -n +37 "
+ (expand-file-name "out.arff") " > " (expand-file-name "out_bis.arff")))
+ ))
+
+
+(defun ml4pg-0_n (n)
+ (do ((i 0 (1+ i))
+ (temp nil))
+ ((= i n) temp)
+ (setf temp (append temp (list (list i nil))))))
+
+
+(defun ml4pg-read-lines (file)
+ "Return a list of lines in FILE."
+ (with-temp-buffer
+ (insert-file-contents file)
+ (split-string
+ (buffer-string) "\n" t)
+ ))
+
+
+(defun ml4pg-lines-to-clusters (lines)
+ (do ((temp lines (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (setf temp2 (append temp2 (list (string-to-number (subseq (car temp) (+ 7 (search "cluster" (car temp) :from-end t)))))))
+ ))
+
+
+
+(defun ml4pg-extract-clusters-from-file (clusters)
+ (let* ((temp (ml4pg-0_n clusters))
+ (lines (ml4pg-read-lines (expand-file-name "out_bis.arff"))))
+ (ml4pg-lines-to-clusters lines)))
+
+
+
+
+
+(defun ml4pg-form-clusters (list n)
+ (do ((i 0 (1+ i))
+ (temp nil))
+ ((= i n) temp)
+ (setf temp (append temp (list (ml4pg-clusters-of-n list i))))))
+
+
+
+
+(defun ml4pg-clusters-of-n (list n)
+ (do ((temp list (cdr temp))
+ (i 1 (1+ i))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (equal (car temp) n)
+ (setf temp2 (append temp2 (list i))))))
+
+
+(defun ml4pg-remove-alone (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (not (= (length (car temp)) 1))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+
+
diff --git a/contrib/ML4PG/doc/ml4pg.v b/contrib/ML4PG/doc/ml4pg.v
new file mode 100644
index 00000000..ced9f9a4
--- /dev/null
+++ b/contrib/ML4PG/doc/ml4pg.v
@@ -0,0 +1,659 @@
+Inductive nat : Set :=
+ | O : nat
+ | S : nat -> nat.
+
+Delimit Scope nat_scope with nat.
+
+
+Fixpoint plus (n m:nat) : nat :=
+ match n with
+ | O => m
+ | S p => S (p + m)
+ end
+
+where "n + m" := (plus n m) : nat_scope.
+
+Fixpoint mult (n m:nat) : nat :=
+ match n with
+ | O => O
+ | S p => m + p * m
+ end
+
+where "n * m" := (mult n m) : nat_scope.
+
+Fixpoint minus (n m:nat) : nat :=
+ match n, m with
+ | O, _ => n
+ | S k, O => n
+ | S k, S l => k - l
+ end
+
+where "n - m" := (minus n m) : nat_scope.
+
+
+Require Import Coq.Lists.List.
+
+Variable A: Type.
+
+Local Notation "[ ]" := nil : list_scope.
+Local Notation "[ a ; .. ; b ]" := (a :: .. (b :: []) ..) : list_scope.
+
+Set Implicit Arguments.
+Open Scope nat.
+
+
+(*********************************************************************************************)
+(* Exported theorems *)
+(*********************************************************************************************)
+
+(*-------------------------------------------------------------------------------------------*)
+(* Layer 0 : Fundamental lemmas *)
+(*-------------------------------------------------------------------------------------------*)
+
+(*1.*)
+Lemma app_nil_l : forall l:list A, [] ++ l = l.
+intro l.
+case l.
+simpl; trivial.
+intros a0 l0.
+simpl; trivial.
+Qed.
+
+(*2.*)
+Theorem app_nil_l_shorter : forall l:list A, [] ++ l = l.
+intro l.
+simpl; trivial.
+Qed.
+
+
+(*3. alternativeApp_nil_l*)
+Theorem app_nil_l_shorter' : forall l:list A, [] ++ l = l.
+intro l.
+simpl.
+trivial.
+Qed.
+
+(* 4 *)
+Theorem app_nil_l2 : forall l: list A, l ++ [] = l.
+intro l.
+ induction l.
+ simpl; trivial.
+ simpl.
+ rewrite IHl.
+ trivial.
+Qed.
+
+
+
+(* 5 *)
+Theorem app_nil_l2' : forall l: list A, l ++ [] = l.
+induction l.
+simpl; trivial.
+simpl.
+rewrite IHl.
+trivial.
+Qed.
+
+(*6.*)
+Lemma mult_n_O : forall n:nat, O = n * O.
+induction n.
+simpl; trivial.
+simpl; trivial.
+Qed.
+
+(*7.*)
+Lemma mult_O_n : forall n: nat, O = O * n.
+intro.
+simpl.
+trivial.
+Qed.
+
+(*8.*)
+
+Lemma M15_c : forall a: nat, a = S O -> (S O - a) * a = O.
+intros.
+rewrite H.
+simpl.
+trivial.
+Qed.
+
+(*9.*)
+Lemma O_minus : forall m, O-m = O.
+intro. simpl. trivial.
+Qed.
+
+(*10.*)
+Lemma minus_O : forall m, m-O = m.
+induction m.
+ trivial.
+simpl; trivial.
+Qed.
+
+(*11.*)
+Lemma plus_n_O : forall n:nat, n = n + O.
+induction n.
+ simpl; trivial.
+simpl; trivial.
+rewrite <- IHn.
+trivial.
+Qed.
+
+(*12.*)
+Lemma plus_0_n : forall n:nat, n = O + n.
+simpl; trivial.
+Qed.
+
+(*13.*)
+Lemma addSn : forall m n, S m + n = S (m + n).
+trivial.
+Qed.
+
+(*14.*)
+Lemma mulSn : forall m n, S m * n = n + m * n.
+trivial. Qed.
+
+(*15.*)
+Lemma plus_n_Sm : forall n m:nat, S (n + m) = n + S m.
+induction n.
+ simpl; trivial.
+simpl.
+intro m.
+rewrite <- IHn.
+trivial.
+Qed.
+
+(*16.*)
+Lemma plus_Sn_m : forall n m:nat, S n + m = S (n + m).
+induction n.
+ simpl; trivial.
+simpl; trivial.
+Qed.
+
+(*17.*)
+Lemma aux10 : forall a, (S a - a) = S O.
+induction a.
+ simpl; trivial.
+simpl; trivial.
+Qed.
+
+(*18.*)
+Lemma aux12 : forall n, (n * S O) = n.
+induction n.
+ simpl; trivial.
+simpl.
+rewrite IHn.
+trivial.
+Qed.
+
+(*-------------------------------------------------------------------------------------------*)
+(* Layer 1 : Lemmas which use layer 0 lemmas *)
+(*-------------------------------------------------------------------------------------------*)
+
+(*19.*)
+Lemma addnS : forall m n, m + S n = S (m + n).
+induction m.
+ trivial.
+intro n.
+rewrite addSn.
+rewrite addSn.
+rewrite IHm.
+trivial.
+Qed.
+
+(*20.*)
+Lemma addnCA : forall m n k, m + (n + k) = n + (m + k).
+intros m n k.
+induction m.
+ trivial.
+rewrite plus_Sn_m.
+rewrite plus_Sn_m.
+rewrite <- plus_n_Sm.
+rewrite IHm.
+trivial.
+Qed.
+
+
+
+(*21.L1M*)
+Lemma M1_corrected : forall l: list A, l= []
+ -> tl (tl (tl l) ++ nil) = nil.
+intro l.
+intro H.
+rewrite H.
+rewrite app_nil_l2.
+simpl; trivial.
+Qed.
+
+(*22. L1Mbutwithintros *)
+Lemma L1Mbutwithintros : forall l: list A, l= []
+ -> tl (tl (tl l) ++ nil) = nil.
+intros l H.
+rewrite H.
+rewrite app_nil_l2.
+simpl; trivial.
+Qed.
+
+(*23.*)
+Lemma M2 : forall a: A,
+tl (tl (tl ([a] ++ []))) = [].
+intro.
+rewrite app_nil_l2.
+simpl.
+trivial.
+Qed.
+
+(*24. L31Mintroal*)
+Lemma M3_1: forall (a: nat) (l :list nat), (hd O (a :: l)) * O = O.
+intro a.
+intro l.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(* 25. L31M*)
+Lemma L31M : forall (a: nat) (l :list nat), (hd O (a :: l)) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(* 26. L31Mextrasimpl *)
+Lemma L31Mextrasimpl : forall (a: nat) (l :list nat), (hd O (a :: l)) * O = O.
+intros.
+simpl.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*Many profs below follow that exact scheme with reduction of *, but it would be completely different strategies if reduction was first made in lists...*)
+
+(*27. L32M*)
+Lemma M3_2 : forall (a: nat) (l :list nat), l= [a] -> (hd O [a]) * O = O.
+intro a.
+intro l.
+intro H.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*28. L32Mlessintro *)
+Lemma L32Mlessintro : forall (a: nat) (l :list nat), l= [a] -> (hd O [a]) * O = O.
+intro a.
+intro l.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+
+(* 29. L32Mintros *)
+Lemma L32Mintros : forall (a: nat) (l :list nat), l= [a] -> (hd O [a]) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+
+Definition hdn (l:list nat) :=
+ match l with
+ | nil => O
+ | cons x _ => x
+ end.
+
+(*30*)
+Lemma M3_3: forall (a: nat) (l :list nat), l= [a] -> (hdn [a]) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*31*)
+Lemma M3_4: forall a: nat, (hd O ([a] ++ [])) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+
+(*32*)
+Lemma M4: forall a: nat, hd O ([a] ++ [a]) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+
+(*33*)
+Lemma M8: forall (a b : nat), hd O [a] * O * b = O.
+(* This alone does not work: intros; simpl; auto.*)
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+
+(*34*)
+Lemma M16: forall a: nat, (S a - a) * O = O.
+intros. rewrite <- mult_n_O. trivial.
+Qed.
+
+(*35*)
+Lemma M10: forall a: nat, a * S O * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*36*)
+Lemma M13: forall a b : nat, a * hd O [b] * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*37*)
+Lemma M14 : forall a: nat, (hd O [a] + O) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*38*)
+Lemma M17 : forall a b: nat, (S a - b) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*39*)
+Lemma M18 : forall (a b :nat), ((hd O [a]) - b) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*40*)
+Lemma M18' : forall (a: list nat)(b:nat), (hd O a - b) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*41*)
+Lemma M19 : forall a:nat, (O - hd O [a]) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*42*)
+Lemma M20 : forall a b:nat, (O - hd O [a]) * b =O.
+intros. rewrite O_minus. trivial.
+Qed.
+
+(*43*)
+Lemma M21 : forall (a :nat) (b: list nat), (a - hd O b) * O = O.
+intros.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*44*)
+Lemma M22 : forall a: nat, a * O * S O = O.
+intros.
+rewrite <- mult_n_O.
+rewrite <- mult_O_n.
+trivial.
+Qed.
+
+(*45*)
+Lemma M24 : forall a: nat, (O - a) * S O = O.
+intro.
+rewrite O_minus.
+rewrite <- mult_O_n.
+trivial.
+Qed.
+
+(*46*)
+Lemma M25 : forall a:nat,
+(O - a) * S a = O.
+intro.
+rewrite O_minus.
+rewrite <- mult_O_n.
+trivial.
+Qed.
+
+(*47*)
+Lemma M26 : forall a b: nat, (O - a) * S b = O.
+intros.
+rewrite O_minus.
+rewrite <- mult_O_n.
+trivial.
+Qed.
+
+(*48*)
+Lemma aux7 : forall a:nat, a-a = O.
+induction a.
+rewrite O_minus.
+trivial.
+rewrite <- IHa.
+trivial.
+Qed.
+
+
+(*49*)
+Lemma M31 : forall a b, hd O a * (b * O) = O.
+intros.
+rewrite <- mult_n_O.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+
+
+(*50*)
+Lemma M32 : forall a b, hd O a * (O - b) = O.
+intros.
+rewrite O_minus.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+
+(*51.*)
+Lemma aux11 : forall n, (S O * n) = n.
+induction n.
+ simpl; trivial.
+simpl.
+rewrite <- plus_n_O.
+trivial.
+Qed.
+
+(*52*)
+Lemma M36 : forall a, a * S (a * O) = a.
+intro. rewrite <- mult_n_O.
+rewrite aux12. trivial.
+Qed.
+
+(*53*)
+Lemma M37 : forall a b, a * S (b * O) = a.
+intros. rewrite <- mult_n_O.
+rewrite aux12. trivial.
+Qed.
+
+(*54*)
+Lemma M38 : forall a, a * S (O - a) = a.
+intro. rewrite O_minus.
+rewrite aux12.
+trivial.
+Qed.
+
+(*55*)
+Lemma M39 : forall a, a * S (a - a) = a.
+intro. rewrite aux7. rewrite aux12. trivial.
+Qed.
+
+(*56*)
+Lemma M40 : forall a, a * (S a - a) = a.
+intro. rewrite aux10.
+rewrite aux12. trivial.
+Qed.
+
+(*57*)
+Lemma M41 : forall a b, a * (O - hd O b) = O.
+intros. rewrite O_minus.
+rewrite <- mult_n_O. trivial.
+Qed.
+
+(*58*)
+Lemma M42 : forall a, hd O a * O + O = O.
+intro. rewrite <- plus_n_O.
+rewrite <- mult_n_O. trivial.
+Qed.
+
+(*59*)
+Lemma M43 : forall a b, hd O a * O + b = b.
+intros.
+rewrite <- mult_n_O.
+simpl; trivial.
+Qed.
+
+(*60*)
+Lemma M44 : forall a, a * S O + O = a.
+intro. rewrite aux12.
+rewrite <- plus_n_O. trivial.
+Qed.
+
+(*-------------------------------------------------------------------------------------------*)
+(* Layer 2 : Lemmas which use layer 1 lemmas *)
+(*-------------------------------------------------------------------------------------------*)
+
+
+
+
+(*61*)
+Lemma mulnS : forall n m, n * S m = n + n * m.
+induction n.
+ trivial. intro m.
+rewrite mulSn. rewrite mulSn. rewrite addSn. rewrite addSn. rewrite addnCA.
+rewrite IHn. trivial.
+Qed.
+
+(*62*)
+Lemma M27 : forall a, (a - a) * S O = O.
+(*intros; simpl; auto. will not work *)
+intro.
+rewrite aux7.
+rewrite <- mult_O_n.
+trivial.
+Qed.
+
+(*63*)
+ (*Same proof*)
+Lemma M28 : forall a, (a - a) * S a = O.
+intro.
+rewrite aux7.
+rewrite <- mult_O_n.
+trivial.
+Qed.
+
+(*64*)
+Lemma M29 : forall a b, (a - a) * S b = O.
+intros.
+rewrite aux7.
+rewrite <- mult_O_n.
+trivial.
+Qed.
+
+(*65*)
+Lemma M30 : forall a b, (a - a) * hd O b = O.
+intros.
+rewrite aux7.
+rewrite <- mult_O_n.
+trivial.
+Qed.
+
+(*66*)
+Lemma M33 : forall a b, hd O a * (b - b) = O.
+intros.
+rewrite aux7.
+rewrite <- mult_n_O.
+trivial.
+Qed.
+
+(*67*)
+Lemma M34 : forall a:nat, (S a - a) * a = a.
+intro. rewrite aux10.
+rewrite aux11. trivial.
+Qed.
+
+(*68*)
+Lemma M35 : forall a b, (S a - a) * b = b.
+intros. rewrite aux10.
+rewrite aux11. trivial.
+Qed.
+
+
+(*-------------------------------------------------------------------------------------------*)
+(* Layer 3 : Lemmas which use layer 1 lemmas *)
+(*-------------------------------------------------------------------------------------------*)
+
+
+(*69*)
+Lemma M23 : forall a: nat, (a + O) * S O = a.
+intro.
+rewrite <- plus_n_O.
+rewrite mulnS.
+rewrite <- mult_n_O.
+rewrite <- plus_n_O.
+trivial.
+Qed.
+
+(*********************************************************************************************)
+(*********************************************************************************************)
+(*********************************************************************************************)
+
+
+(*-------------------------------------------------------------------------------------------*)
+ (* Lemmas to look for similarities *)
+(*-------------------------------------------------------------------------------------------*)
+
+
+
+Definition hdb (l:list bool) :=
+ match l with
+ | nil => false
+ | cons x _ => x
+ end.
+
+(*58*)
+
+Lemma andb_false_r : forall (a : bool) , false = andb a false.
+Proof.
+intros.
+case a.
+ simpl; trivial.
+simpl; trivial.
+Qed.
+
+Lemma M3_3b: forall (a: bool) (l :list bool), l= [a] -> andb (hdb [a]) false = false.
+Proof.
+intros.
+rewrite <- andb_false_r.
+
+
+
+
+
+
+
+Lemma aux7_bis: forall a:nat, a-a = O.
+Proof.
+induction a.
+ simpl; trivial.
+
+
+
+
+
+
+
diff --git a/contrib/ML4PG/doc/ml4pg_manual.pdf b/contrib/ML4PG/doc/ml4pg_manual.pdf
new file mode 100644
index 00000000..c13f6801
--- /dev/null
+++ b/contrib/ML4PG/doc/ml4pg_manual.pdf
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/algorithm1.png b/contrib/ML4PG/doc/src/images/algorithm1.png
new file mode 100644
index 00000000..8c8f47b5
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/algorithm1.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/algorithm2.png b/contrib/ML4PG/doc/src/images/algorithm2.png
new file mode 100644
index 00000000..6b5e0835
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/algorithm2.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/clusters1.png b/contrib/ML4PG/doc/src/images/clusters1.png
new file mode 100644
index 00000000..ca4ef219
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/clusters1.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/clusters1pg.png b/contrib/ML4PG/doc/src/images/clusters1pg.png
new file mode 100644
index 00000000..b39d409f
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/clusters1pg.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/clusters2.png b/contrib/ML4PG/doc/src/images/clusters2.png
new file mode 100644
index 00000000..f091abbe
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/clusters2.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/clusters2pg.png b/contrib/ML4PG/doc/src/images/clusters2pg.png
new file mode 100644
index 00000000..6ba6dcb4
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/clusters2pg.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/export.png b/contrib/ML4PG/doc/src/images/export.png
new file mode 100644
index 00000000..de048b47
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/export.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig1.png b/contrib/ML4PG/doc/src/images/fig1.png
new file mode 100644
index 00000000..955fd048
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/fig1.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig1pg.png b/contrib/ML4PG/doc/src/images/fig1pg.png
new file mode 100644
index 00000000..d4a0df9f
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/fig1pg.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig2.png b/contrib/ML4PG/doc/src/images/fig2.png
new file mode 100644
index 00000000..ed8c399e
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/fig2.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig3.png b/contrib/ML4PG/doc/src/images/fig3.png
new file mode 100644
index 00000000..f3741a0e
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/fig3.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig4.png b/contrib/ML4PG/doc/src/images/fig4.png
new file mode 100644
index 00000000..9df097bd
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/fig4.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig5.png b/contrib/ML4PG/doc/src/images/fig5.png
new file mode 100644
index 00000000..733a3d22
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/fig5.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/frequencies.png b/contrib/ML4PG/doc/src/images/frequencies.png
new file mode 100644
index 00000000..4f90b5fc
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/frequencies.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/granularity.png b/contrib/ML4PG/doc/src/images/granularity.png
new file mode 100644
index 00000000..385b3972
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/granularity.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/levels.png b/contrib/ML4PG/doc/src/images/levels.png
new file mode 100644
index 00000000..48e02db7
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/levels.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/ml_system1.png b/contrib/ML4PG/doc/src/images/ml_system1.png
new file mode 100644
index 00000000..f11cebf1
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/ml_system1.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/ml_system2.png b/contrib/ML4PG/doc/src/images/ml_system2.png
new file mode 100644
index 00000000..792c423d
--- /dev/null
+++ b/contrib/ML4PG/doc/src/images/ml_system2.png
Binary files differ
diff --git a/contrib/ML4PG/doc/src/ml4pg_manual.bib b/contrib/ML4PG/doc/src/ml4pg_manual.bib
new file mode 100644
index 00000000..07dcb4ba
--- /dev/null
+++ b/contrib/ML4PG/doc/src/ml4pg_manual.bib
@@ -0,0 +1,12 @@
+@Article{KHG12,
+ author = {E. Komendantskaya and J. Heras and G. Grov},
+ title = {Machine Learning in Proof General: interfacing interfaces},
+ year = {2012},
+}
+
+
+@Article{HK13,
+ author = {J. Heras and E. Komendantskaya},
+ title = {ML4PG Case studies},
+ year = {2013},
+} \ No newline at end of file
diff --git a/contrib/ML4PG/doc/src/ml4pg_manual.pdf b/contrib/ML4PG/doc/src/ml4pg_manual.pdf
new file mode 100644
index 00000000..c13f6801
--- /dev/null
+++ b/contrib/ML4PG/doc/src/ml4pg_manual.pdf
Binary files differ
diff --git a/contrib/ML4PG/doc/src/ml4pg_manual.tex b/contrib/ML4PG/doc/src/ml4pg_manual.tex
new file mode 100644
index 00000000..2eb92b7e
--- /dev/null
+++ b/contrib/ML4PG/doc/src/ml4pg_manual.tex
@@ -0,0 +1,209 @@
+\documentclass[10pt]{article}
+
+
+\usepackage[utf8]{inputenc}
+
+\usepackage{hyperref}
+\usepackage{graphicx}
+\usepackage{amssymb}
+\usepackage{color}
+\usepackage{listings}
+\usepackage{tikz}
+\usepackage{verbatim}
+\usepackage{theorem}
+
+
+
+\begin{document}
+
+\title{ML4PG: Machine learning for Proof General}
+\author{J\'onathan Heras and Ekaterina Komendantskaya\\
+\{jonathanheras,katya\}@computing.dundee.ac.uk}
+ \maketitle
+
+
+
+\tableofcontents
+
+
+\section{Using ML4PG}
+
+
+To illustrate the use of ML4PG, we will use the file \verb"ml4pg.v" which can be find in the same folder of this manual.
+This file contains various lemmas about natural numbers and lists.
+
+\subsection{Getting started}
+
+Open the file \verb"ml4pg.v" using emacs. The Proof General interface is the usual one, but it includes a new option in the Coq menu
+called ML4PG.
+
+\begin{figure}
+ \centering
+ \includegraphics[scale=0.4]{images/fig1pg.png}
+ \caption{Proof General with the ML4PG option.}\label{fig1}
+\end{figure}
+
+If you select this option, the interface asks you if you are developing your proofs using the plain Coq style or the SSReflect style, in this case we select the Coq mode (c).
+Subsequently, the interface asks you if you want to extract the information associated with the lemmas which have been previously developed in this library. In this case,
+we select no (c). Once that this is done, the Proof General interface is extended with a new menu called \emph{Statistics} and two buttons, see Figure~\ref{fig3}.
+
+\begin{figure}
+ \centering
+ \includegraphics[scale=0.4]{images/fig3.png}
+ \caption{ML4PG interface with all the options active.}\label{fig3}
+\end{figure}
+
+
+\subsection{Extracting feature vectors}
+
+Feature vectors can be extracted in two different ways:
+
+\begin{itemize}
+ \item During the development of the proofs. To this aim, you have to use the shortcut Ctrl-C Ctrl-M to process the next proof command.
+ \item Several proofs at the same time. If you want to extract the feature vectors of several proofs, go to the last proof and use the shortcut Ctrl-C Space.
+ You can also use the \emph{Extract info up to point} option of the statistics menu.
+\end{itemize}
+
+Go to the end of \verb"emacs ml4pg.v" file; there, you can see two unfinished proofs: \verb"M3_3b" and \verb"aux7_bis". Put the cursor at the end of
+the proof of Lemma \verb"andb_false_r" and use the shortcut Ctrl-C Space or the \emph{Extract info up to point} option of the statistics menu. In this
+way the information associated with each proof will be extracted and you will be able to use it to obtain proof clusters (groups of similar proofs).
+
+Now, let us explain the functionality of the options included in the Statistics menu.
+
+\subsection{Configuration menu}
+
+The different options to configure the Machine-learning environments were detailed in~\cite{KHG12}. All those options can be accessed from the Configuration
+submenu of the Statistics menu, see Figure~\ref{fig3}.
+
+
+
+\paragraph{Algorithms:}
+
+The user can select different algorithms to obtain proof similarities (all of them behave similar, see~\cite{HK13}).
+ML4PG offers different algorithms, see Figure~\ref{algorithms}.
+
+In the case of MATLAB; there are three algorithms available: K-means and Gaussian. In the case of Weka, the algorithms
+which are available are: K-means, EM and FarthestFirst.
+
+\begin{figure}
+ \centering
+ \includegraphics[scale=0.4]{images/algorithm2.png}
+ \caption{The ML algorithms menu.}\label{algorithms}
+\end{figure}
+
+\paragraph{Granularity:}
+
+In the machine learning literature, there exists a number of heuristics to determine this optimal number of clusters.
+We used them as an inspiration to formulate our own algorithm for ML4PG, tailored
+to the interactive proofs. It takes into consideration the size of the proof library and an auxiliary parameter
+ -- called granularity. This parameter is used to calculate the optimal number of
+proof clusters, the process to calculate this optimal number was described in~\cite{KHG12}. The user decides the
+granularity in ML4PG menu (see Figure~\ref{granularity}), by selecting a value between 1 and 5, where 1 stands for a
+low granularity (producing big and general clusters) and 5 stands for a high granularity (producing small
+and precise clusters).
+
+
+\begin{figure}
+ \centering
+ \includegraphics[scale=0.4]{images/granularity.png}
+ \caption{ML4PG granularity menu.}\label{granularity}
+\end{figure}
+
+
+
+\paragraph{Frequencies:}
+
+Clustering techniques divide data into n groups of similar objects (called clusters), where the value of
+n is a ``learning'' parameter provided by the user together with other inputs to the clustering algorithms.
+Increasing the value of n means that the algorithm will try to separate objects into more classes, and, as a
+consequence, each cluster will contain examples with higher correlation. The frequencies of clusters can
+serve for analysis of their reliability. Results of one run of a clustering algorithm may differ from another,
+even on the same data set. This is due to the fact that clustering algorithms randomly choose examples
+to start from, and then, form clusters relative to those examples. However, it may happen that certain
+clusters are found repeatedly – and frequently – in different runs; then, we can use these frequencies to
+determine the reliable clusters. The frequencies can be determined using the threshold presented in Figure~\ref{frequencies},
+a detailed description of this parameter was given in~\cite{KHG12}.
+
+
+\begin{figure}
+ \centering
+ \includegraphics[scale=0.4]{images/frequencies.png}
+ \caption{ML4PG frequencies menu.}\label{frequencies}
+\end{figure}
+
+
+\subsection{Show clusters}
+
+The option \emph{Show Clusters} of the Statistics menu shows clusters when a library is clustered
+irrespective of the current proof goal. An example using the \verb"ml4pg.v" library with the options:
+
+\begin{itemize}
+ \item Algorithm: K-means,
+ \item Granularity: 3,
+ \item Frequencies: 1.
+\end{itemize}
+
+\noindent is shown in Figure~\ref{clusters1}.
+
+\begin{figure}
+ \centering
+ \includegraphics[scale=0.23]{images/clusters1pg.png}
+ \caption{Clusters for the ml4pg library. The Proof General window has been split into two windows positioned side by
+side: the left one keeps the current proof script, and the right one shows the clusters. If the user clicks
+on the name of a theorem showed in the right screen, such a window is split horizontally and a brief description of the selected
+theorem is shown.}\label{clusters1}
+\end{figure}
+
+This functionality can also invoked using the second right most button of the Proof General toolbar.
+
+\subsection{Show similar theorems}
+
+The example above shows one mode of working with ML4PG: that is, when a library is clustered
+irrespective of the current proof goal. However, it may be useful to use this technology to aid the interactive
+proof development. In which case, we can cluster libraries relative to a few initial proof steps for the
+current proof goal. An example using the \verb"ml4pg.v" library with the options:
+
+\begin{itemize}
+ \item Algorithm: FarthestFirst,
+ \item Granularity: 2,
+ \item Frequencies: 2.
+\end{itemize}
+
+\noindent and with the few steps included about the proof of \verb"M3_3b" is shown in Figure~\ref{clusters2}.
+
+
+\begin{figure}
+ \centering
+ \includegraphics[scale=0.23]{images/clusters2pg.png}
+ \caption{On the right side, several suggestions provided by ML4PG. If the user clicks on the name of one of the
+suggested lemmas, a brief description about it is shown.}\label{clusters2}
+\end{figure}
+
+This functionality can also invoked using the right most button of the Proof General toolbar.
+
+\subsection{Export Library}
+
+Using the Export library option, the user can export the library for further use (see Figure~\ref{export}) with the
+Available libraries for clustering option.
+
+
+\begin{figure}
+ \centering
+ \includegraphics[scale=0.4]{images/export.png}
+ \caption{ML4PG export menu.}\label{export}
+\end{figure}
+
+
+
+
+
+
+
+
+
+
+\bibliographystyle{plain}
+\bibliography{ml4pg_manual}
+
+
+\end{document}
diff --git a/contrib/ML4PG/icons/Clustering.png b/contrib/ML4PG/icons/Clustering.png
new file mode 100644
index 00000000..1f878eca
--- /dev/null
+++ b/contrib/ML4PG/icons/Clustering.png
Binary files differ
diff --git a/contrib/ML4PG/icons/Hint.png b/contrib/ML4PG/icons/Hint.png
new file mode 100644
index 00000000..f84346e4
--- /dev/null
+++ b/contrib/ML4PG/icons/Hint.png
Binary files differ
diff --git a/contrib/ML4PG/icons/clustering.xpm b/contrib/ML4PG/icons/clustering.xpm
new file mode 100644
index 00000000..ff0728fc
--- /dev/null
+++ b/contrib/ML4PG/icons/clustering.xpm
@@ -0,0 +1,30 @@
+/* XPM */
+static char * clustering_xpm[] = {
+"20 20 7 1",
+" c None",
+". c #FBFE00",
+"+ c #FCFF00",
+"@ c #FE0000",
+"# c #FF0000",
+"$ c #4DFE00",
+"% c #4EFF00",
+" ",
+" ",
+" . + ",
+" ",
+" . . . ",
+" . . . ",
+" + @ ",
+" . . . ",
+" + @@ ",
+" + # @ ",
+" ++ @ # ",
+" ",
+" $ @ #@ ",
+" % ### ",
+" $ % # ",
+" % # ",
+" % $% #@ ",
+" $ $ ",
+" $ # ",
+" "};
diff --git a/contrib/ML4PG/icons/sh-hint.xpm b/contrib/ML4PG/icons/sh-hint.xpm
new file mode 100644
index 00000000..f5f5ea8b
--- /dev/null
+++ b/contrib/ML4PG/icons/sh-hint.xpm
@@ -0,0 +1,160 @@
+/* XPM */
+static char * sh_hint_xpm[] = {
+"20 20 137 2",
+" c None",
+". c #C1D2D1",
+"+ c #C2D2D1",
+"@ c #C1D2D0",
+"# c #BBCECE",
+"$ c #E3EFEF",
+"% c #F7FFFF",
+"& c #FBFDFD",
+"* c #FBFFFF",
+"= c #F7FAFA",
+"- c #E2EEED",
+"; c #BBCDCC",
+"> c #ACC2C0",
+", c #ECF3F3",
+"' c #FFC9CE",
+") c #FC828D",
+"! c #FEF2F3",
+"~ c #FDB4BB",
+"{ c #FEEEEF",
+"] c #FFD5D8",
+"^ c #EBF3F3",
+"/ c #AAC1C0",
+"( c #91AFAC",
+"_ c #DDE8E8",
+": c #FEC9CF",
+"< c #FC7481",
+"[ c #FDD9DC",
+"} c #FFFFFF",
+"| c #FB2237",
+"1 c #FECED2",
+"2 c #FD7F8B",
+"3 c #DBE5E6",
+"4 c #93B0AD",
+"5 c #B6CAC9",
+"6 c #E4EDEE",
+"7 c #FBE1E4",
+"8 c #FA5867",
+"9 c #FB7985",
+"0 c #FDFFFF",
+"a c #FB182E",
+"b c #FDC0C5",
+"c c #FC7B87",
+"d c #E5ECED",
+"e c #B7CBCA",
+"f c #C2D3D3",
+"g c #DAE6E7",
+"h c #F3EEEF",
+"i c #FAC9CE",
+"j c #FB4D5E",
+"k c #FDEEEF",
+"l c #FA0017",
+"m c #FB7481",
+"n c #FB7683",
+"o c #F9FFFF",
+"p c #DCE7E7",
+"q c #C2D3D4",
+"r c #B4C9C8",
+"s c #D4E2E3",
+"t c #E3D6D9",
+"u c #F37C89",
+"v c #F8959F",
+"w c #FAFCFD",
+"x c #FA8995",
+"y c #FAE8EA",
+"z c #F5B8BF",
+"A c #E7F2F2",
+"B c #D5E2E3",
+"C c #B4C9C9",
+"D c #98B4B3",
+"E c #CAD9DA",
+"F c #D7E5E3",
+"G c #E2F3EA",
+"H c #ECF9ED",
+"I c #F1F4EA",
+"J c #F2FFF2",
+"K c #E9EEE5",
+"L c #E5F0E8",
+"M c #DCE6DE",
+"N c #CBDADA",
+"O c #9BB8B6",
+"P c #A8C0BF",
+"Q c #D6E1DE",
+"R c #CFD9D7",
+"S c #DCE4E2",
+"T c #D8E2E1",
+"U c #D0DAD6",
+"V c #DBE4E1",
+"W c #D5E1E2",
+"X c #A8C1BF",
+"Y c #B1C7C7",
+"Z c #C6D5D6",
+"` c #C3D5D5",
+" . c #BECFCF",
+".. c #CBDADB",
+"+. c #D4E0E1",
+"@. c #B2C8C7",
+"#. c #CFDDDD",
+"$. c #AAC2C4",
+"%. c #A6BDC0",
+"&. c #C4D6D8",
+"*. c #BDD0D1",
+"=. c #A2BDBF",
+"-. c #C7D5D8",
+";. c #A3B7B9",
+">. c #95AEAF",
+",. c #ACC2C7",
+"'. c #94B4B7",
+"). c #9EAB78",
+"!. c #9BB29D",
+"~. c #90AAAF",
+"{. c #8AA6AC",
+"]. c #8FAA96",
+"^. c #95A778",
+"/. c #A2971A",
+"(. c #ACA644",
+"_. c #C9C95E",
+":. c #D3D45F",
+"<. c #B9B34A",
+"[. c #A5981C",
+"}. c #ACA11C",
+"|. c #D0CD4C",
+"1. c #E9E989",
+"2. c #F0F09E",
+"3. c #D5D25F",
+"4. c #ABA11E",
+"5. c #A69918",
+"6. c #B6B02E",
+"7. c #CCCB45",
+"8. c #D0CF47",
+"9. c #BCB836",
+"0. c #A69A1A",
+"a. c #AFA626",
+"b. c #B1AC32",
+"c. c #AFA931",
+"d. c #AEA525",
+"e. c #AA9F27",
+"f. c #A79B22",
+" ",
+" . + + @ ",
+" # $ % & * = - ; ",
+" > , ' ) ! ~ { ] ^ / ",
+" ( _ : < [ } | 1 2 } 3 4 ",
+" 5 6 7 8 9 0 a b c } d e ",
+" f g h i j k l m n o p q ",
+" r s t u v w x y z A B C ",
+" D E F G H I J K L M N O ",
+" P B Q R S T U V W X ",
+" Y B Z ` ...+.@. ",
+" ` #.$.%.&.*. ",
+" =.-.;.>.,.'. ",
+" ).!.~.{.].^. ",
+" /.(._.:.<.[. ",
+" }.|.1.2.3.4. ",
+" 5.6.7.8.9.0. ",
+" a.b.c.d. ",
+" e.f. ",
+" "};
diff --git a/contrib/ML4PG/icons/sh-hint2.xpm b/contrib/ML4PG/icons/sh-hint2.xpm
new file mode 100644
index 00000000..900ed4cf
--- /dev/null
+++ b/contrib/ML4PG/icons/sh-hint2.xpm
@@ -0,0 +1,103 @@
+/* XPM */
+static char * sh_hint2_xpm[] = {
+"16 16 84 1",
+" c None",
+". c #D1DDDD",
+"+ c #D4E0DF",
+"@ c #D0DCDC",
+"# c #B1C6C6",
+"$ c #F1F4F5",
+"% c #FFFFFF",
+"& c #FEFEFE",
+"* c #F1F5F5",
+"= c #AFC5C4",
+"- c #DCE6E6",
+"; c #FDB8BF",
+"> c #FC7682",
+", c #FC7E8A",
+"' c #FB0920",
+") c #FD8A95",
+"! c #DBE4E5",
+"~ c #B5C9C8",
+"{ c #EAF1F1",
+"] c #FADCE0",
+"^ c #FB6876",
+"/ c #FC949E",
+"( c #FA1127",
+"_ c #FB7E8A",
+": c #FB97A0",
+"< c #ECF2F2",
+"[ c #B5C9C9",
+"} c #B8CCCB",
+"| c #DBE5E7",
+"1 c #F4C1C6",
+"2 c #FA7581",
+"3 c #FB5565",
+"4 c #FA081F",
+"5 c #FCFDFC",
+"6 c #F98792",
+"7 c #DEE8E8",
+"8 c #B8CCCC",
+"9 c #D2E0E1",
+"0 c #DFE9E9",
+"a c #EDF2EF",
+"b c #F6F8F2",
+"c c #F8FAEF",
+"d c #ECEEF0",
+"e c #E5EDE9",
+"f c #D3E0E2",
+"g c #A1BCBA",
+"h c #B7CCCC",
+"i c #D8E4DF",
+"j c #D2DBD2",
+"k c #E1E9E4",
+"l c #D9E2E1",
+"m c #D9E2D8",
+"n c #DAE4DD",
+"o c #B8CDCC",
+"p c #C0D2D2",
+"q c #D4E2E3",
+"r c #BCCDCE",
+"s c #BCCCCD",
+"t c #D1DFE0",
+"u c #C1D3D3",
+"v c #99B4B4",
+"w c #D5E3E3",
+"x c #ACC3C4",
+"y c #A4BFC0",
+"z c #C5D6D7",
+"A c #97B5B5",
+"B c #9BB5B4",
+"C c #9EB2B5",
+"D c #8FA8AA",
+"E c #88A9AD",
+"F c #AAA330",
+"G c #B7BF75",
+"H c #C0C877",
+"I c #B2A933",
+"J c #B1A82D",
+"K c #D7D368",
+"L c #DFDD79",
+"M c #B7AF37",
+"N c #BAB328",
+"O c #D2D551",
+"P c #D3D653",
+"Q c #B9B32C",
+"R c #A4961E",
+"S c #A1921C",
+" ",
+" .++@ ",
+" #$%&&&*= ",
+" -;>,'%)! ",
+" ~{]^/(_:<[ ",
+" }|12345678 ",
+" 90abcdefg ",
+" hijklmno ",
+" pqrstu ",
+" vwxyzA ",
+" BCDE ",
+" FGHI ",
+" JKLM ",
+" NOPQ ",
+" RS ",
+" "};
diff --git a/contrib/ML4PG/icons/sh.xpm b/contrib/ML4PG/icons/sh.xpm
new file mode 100644
index 00000000..3fa7dde6
--- /dev/null
+++ b/contrib/ML4PG/icons/sh.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * sh_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #FB0920",
+" ",
+" ",
+" ",
+" ",
+" ... . . ",
+" . . . . ",
+" . . . ",
+" ... ...... ",
+" . . . ",
+" . . . . ",
+" ... . . ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/contrib/ML4PG/icons/sh1.xpm b/contrib/ML4PG/icons/sh1.xpm
new file mode 100644
index 00000000..3fa7dde6
--- /dev/null
+++ b/contrib/ML4PG/icons/sh1.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * sh_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #FB0920",
+" ",
+" ",
+" ",
+" ",
+" ... . . ",
+" . . . . ",
+" . . . ",
+" ... ...... ",
+" . . . ",
+" . . . . ",
+" ... . . ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/contrib/ML4PG/icons/test.xpm b/contrib/ML4PG/icons/test.xpm
new file mode 100644
index 00000000..5e1f0fa5
--- /dev/null
+++ b/contrib/ML4PG/icons/test.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char * 8885_xpm[] = {
+"32 32 3 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ... . ",
+" .... .. ",
+" .+++. ... ",
+" .+... .... ",
+" .+++. .+++. ",
+" .+... ..++++.. ",
+" .+++.. .+.++++++. ",
+" .++.++... ..+.++++.++. ",
+" .+.++..++.. ..++.+++.++. ",
+" .+.++.+++..+. .+.++++++.++. ",
+" .+++.+++.++++..++.+++++++++.",
+" .++.+++.+++..++++++....++++.",
+" .+++++.+++.+++.++++++++++++.",
+" .++++++++.+++.++++++++++++. ",
+" .++++++++++++++++++++++.... ",
+" .+++.+++++.++++++++.... ",
+" ..+.+++..+..++++++++++++. ",
+" .+++..+...+++++++++++++... ",
+" .++....++...+++++++..+.++.. ",
+" .+..+.... .........+.++.++. ",
+" ...+. ...+..++.+. ",
+" .. .++..+++. ",
+" .. ... ",
+" ",
+" ",
+" ",
+" "};
diff --git a/contrib/ML4PG/lemmas.txt b/contrib/ML4PG/lemmas.txt
new file mode 100644
index 00000000..d6c69678
--- /dev/null
+++ b/contrib/ML4PG/lemmas.txt
@@ -0,0 +1,55 @@
+fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&193$mulnS&194$muln0&195$iter_addn&196$mulnSr&197$muln0,&198$mulnC&199$mulnDl&200$mulnBl&201$mulnA&202$mulnCA&203$mulnBr&204$muln_eq0&205$leq_mul2l&206$le_mn2&208$orbT&209$leq_mul2r&210$le_mn1&211$orb_andr&212$eqn_mul2l&213$eqn_mul2r&214$ltn_mul2l&215$ltn_mul2r&216$mul1n&217$ltn_pmul2r&218$ltn_Pmull&219$maxn_mulr&221$minn_mulr&222$muln1&223$expnS&224$iter_muln&225$mul1n,&226$exp1n&227$expnD&228$expnMn&229$expnM&230$addn_gt0&231$eqn0Ngt&232$expn_gt0&233$leq_pmul2l&234$leq_pmulr&235$leq_exp2l&236$eqn_exp2l&237$leq_exp2l]&238$ltn_exp2l]&239$leq_mul&241$expn1&242$ltn_mul&243$IHe&244$ltn_exp2r&245$leq_exp2r&246$eqn_exp2r&247$muln_gt0&248$mulnbl&249$addTb&250$addbA&251$odd_add&254$odd_sub&255$andb_addl&256$odd_mul&257$addnn&258$mul2n&259$doubleB&260$2ltnNge&261$leq_double&262$doubleS&263$ltn_Sdouble&264$addbb&265$muln2&266$uphalf_half&267$doubleD&268$half_double,&269$odd_double_half&270$half_double&271$uphalf_double&272$halfD&273$odd_n&274$leq_Sdouble&275$odd_geq&276$mulnn&277$mulnDr&278$def_m&279$sqrnD&280$2addnA&281$/(2 * 2)&282$sqrn_sub&283$lte&286$ltm12&287$ltm23&288$andbT&289$eqm12&290$f_mono&291$lemn&292$le_ab&293$geq_leqif&294$mono_leqif&295$n12_0&297$le2&298$m2_0&299$n1_gt0&300$n2_gt0&301$in&302$le1&303$sqrn_gt0&304$ne_mn&305$ltn_add2r&306$nat_Cauchy&307$addE&308$add_mulE&309$mulE&310$mul_expE&311$sub2nn&312$natTrecE&313$by&316$IHp&317$nat_of_succ_gt0&318$doubleS,&319$doubleMl&321$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$@block_seqmxE&132$seqmx0E&133$drsubseqmxE&134$mulseqmxE&135$oppseqmxE&136$dlsubseqmxE&137$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$@block_seqmxE&132$seqmx0E&133$drsubseqmxE&134$mulseqmxE&135$oppseqmxE&136$dlsubseqmxE&137$helper_fact_is_theta&102$mul1n&103$mul0n&138$big_nat1&139$muln0&140$big_nat_recr&141$mulnDr&142$IH&143$exp0n&144$big1_seq&145$in_nil&146$big_mkcond&147$muln1&148$addn2&149$mul1n&150$GRing.subr_eq&151$GRing.addrA&152$GRing.addrC&153$GRing&154$addrA&155$sumrB&156$@big_nat_recl&157$addrC
+&158$_(0 <= i < n.+1)&159$x&160$@eq_bigr&161$@big1&162$GRing.subr_eq0&163$in&164$H1&165$eqP&166$GRing.Theory.sumrB&167$big_ltn&168$@big_add1&169$big_addn&170$ltn_predK&171$pred_Sn&172$subr_sub&173$subnDA&174$subnS&175$H4&176$addnBA&177$subnDl&178$lemma2_aux&179$subn_eq0&180$big_nil&181$leq_eqVlt&182$lemma1&183$lemma2'&184$lemma2&185$/pot_matrix&186$det1&187$det0&188$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$h&126$addSn&127$IHm&128$plus_Sn_m&129$mulSn&130$addnS&131$plus_assoc&132$minus_n_O&133$app_nil_r&134$mult_n_O&135$seqmx1E&169$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$exp0n&102$muln0&103$big_nat1&104$big_nat_recr&105$mulnDr&106$IH&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$andb_false_r&120$mul0n&102$big_nat1&103$muln0&104$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$HH1&169$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$big_endo&256$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$HH1&169$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$HH1&169$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$aux11&100.1999755859375$mulnS&100.19998779296874$andb_false_r&100.19999389648437$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$aux11&100.1999755859375$mulnS&100.19998779296874$andb_false_r&100.19999389648437$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$aux11&100.1999755859375$mulnS&100.19998779296874$andb_false_r&100.19999389648437$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
+&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
+&165$submx_sub&166$GRing.sub0r&167$p&168$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$aux11&100.1999755859375$mulnS&100.19998779296874$andb_false_r&100.19999389648437$ \ No newline at end of file
diff --git a/contrib/ML4PG/libs/coq/test/peano.csv b/contrib/ML4PG/libs/coq/test/peano.csv
new file mode 100644
index 00000000..06face92
--- /dev/null
+++ b/contrib/ML4PG/libs/coq/test/peano.csv
@@ -0,0 +1,73 @@
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0
+1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1
+5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
+34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1
+5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1
+111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.14999999999999,6,1,6,1,-4,100.14999999999999,6,1
+1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0
+11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0
+1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,6,1,-4,100.19687499999999,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.199609375,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951171875,6,1,6,1,-4,100.199951171875,6,1
+1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19998779296874,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.19921875,6,1
+1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0
+111,3,-354,-1,557,1,6,1,-4,100.19999389648437,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/coq/test/peano_names b/contrib/ML4PG/libs/coq/test/peano_names
new file mode 100644
index 00000000..0ad40090
--- /dev/null
+++ b/contrib/ML4PG/libs/coq/test/peano_names
@@ -0,0 +1,73 @@
+1 . nil
+2 . app_nil_l
+3 . app_nil_l_shorter
+4 . app_nil_l_shorter'
+5 . app_nil_l2
+6 . app_nil_l2'
+7 . mult_n_O
+8 . mult_O_n
+9 . M15_c
+10 . O_minus
+11 . minus_O
+12 . plus_n_O
+13 . plus_0_n
+14 . addSn
+15 . mulSn
+16 . plus_n_Sm
+17 . plus_Sn_m
+18 . aux10
+19 . aux12
+20 . addnS
+21 . addnCA
+22 . M1_corrected
+23 . L1Mbutwithintros
+24 . M2
+25 . M3_1:
+26 . L31M
+27 . L31Mextrasimpl
+28 . M3_2
+29 . L32Mlessintro
+30 . L32Mintros
+31 . M3_3:
+32 . M3_4:
+33 . M4:
+34 . M8:
+35 . M16:
+36 . M10:
+37 . M13:
+38 . M14
+39 . M17
+40 . M18
+41 . M18'
+42 . M19
+43 . M20
+44 . M21
+45 . M22
+46 . M24
+47 . M25
+48 . M26
+49 . aux7
+50 . M31
+51 . M32
+52 . aux11
+53 . M36
+54 . M37
+55 . M38
+56 . M39
+57 . M40
+58 . M41
+59 . M42
+60 . M43
+61 . M44
+62 . mulnS
+63 . M27
+64 . M28
+65 . M29
+66 . M30
+67 . M33
+68 . M34
+69 . M35
+70 . M23
+71 . andb_false_r
+72 . M3_3b:
+73 . aux7_bis:
diff --git a/contrib/ML4PG/libs/ssreflect/advance/bigop.csv b/contrib/ML4PG/libs/ssreflect/advance/bigop.csv
new file mode 100644
index 00000000..380bf70e
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/bigop.csv
@@ -0,0 +1,157 @@
+1170,4,6640,-111020,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1170,4,6640,-111020,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+111170,6,66640,-11111020,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,70,-10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,70,-10,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,70,-10,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-2107770,7,686604440.0,-110191103104.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,90,-10,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+111770,6,666440,-1111051060.0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+111770,6,666440,-1111051060.0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1111770,7,6666440,-1111105107.0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,100,-10,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,100,-10,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,105,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,106,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,107,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,108,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,109,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,103,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,110,-10,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,110,-10,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7200,3,44800,-110100,6,1,777777770.0,11,4444444400.0,100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1151160,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-731102009.0,9,4666012800.04,-1171110100.0118,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-4111190,7,4666640,-1191111120.0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-731102009.0,9,4666012800.04,-1171110100.0118,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-411190,6,466640,-1211111200.0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-73110770,8,46660440,-1171110122155.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-731102009.0,9,4666012800.04,-1171110100.012,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-411090,6,466000,-12311000,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,124,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-7311020,7,4666040,-117111010,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,125125,6,1,-7419,4,-4464,-1261691149.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1770,4,6440,-11251690,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-4190,4,4640,-12711490,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+10,2,60,-10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-57570,5,44440,102110310,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+790,3,440,11280,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+70,2,40,1170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+70,2,40,1170,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-731100,6,466600,-11711100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77770,5,44440,1291302320.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77777770,8,44444440,1.2517016013111712e+170,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77700,5,44400,13213300,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-5790,4,4440,10611340,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1171350,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1361240,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777,3,444,125125159,7,1,7720,4,44130,-17016010,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-7311020,7,4666040,-117111010,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-7410,4,4460,-12513710,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1381390,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1770,4,6440,-11401410,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-74170,5,44640,-1381271142.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1431390,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+117777,6,1324444,-1111138138.0,7,1,-417770,6,4144440,-1281242142.0,6,2,490,3,440,14410,6,1,790,3,440,14910,7,0,0,0,0,0,0,0
+140,3,640,-11450,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+17770,5,4440,-12161460,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-21777700,8,680044440.0,-1111214700.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+19,2,-4,-1148,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77777,5,44444,113107149130.0,6,1,-41170,5,48840,-128111070,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-77741170,8,44448840,-126150129128.01112,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77700,5,44400,15115200,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777,3,444,232130,6,1,7770,4,4440,1171530,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1777,4,15444,-1125126125.0,7,1,6,1,4777770,7,4444440,154155156124125.0,6,1,777777770.0,9,444444440,1.5714215816515915e+170,6,1,-570,3,440,10310,7,0,0,0,0,0
+-517770,6,464440,-1101160161160.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+190,3,40,-100,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-15,-1,7,1,77,2,44,162,6,1,-41170,5,46840,-128111630,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1641241650.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-211077,6,168186044,-1110146166.0,23,1,-774170,6,444640,-1671601281.0168,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-211110,6,688086808.0,-111110,23,2,77777070,8,44444040,166164124125.0238,6,1,-741,3,-4418,-1691281,6,2,-4147700,7,4044400,-1701171172.0,6,1,1147700,7,19044400,-1117117200.0,7,0
+9,1,-4,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+6,1,7,1,4,141,6,1,777770,7,444440,1511521600.0,6,1,-4170,4,4640,-14111730,6,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1741601750.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1741851760.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1771780,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1777,4,444,-1125170160.0,7,1,61111,5,-46177,-1021111,7,1,77770,5,44440,105179180103.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11400580,7,60400460,-1118100110.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-731090,6,406040,-1741101090.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-5790,4,4440,11311820,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+17770,5,64440,-1138139183.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77700,5,44400,11710300,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-73110270,8,46660640,-11711101109.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,184117,6,1,-311070,6,666040,-11101850,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77770,5,44440,125186187188.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-5790,4,4440,10211890,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+117777,6,4444,-11190114191113.0,7,1,77700,5,44400,11419200,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7777700,8,4444400,1511931030.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777700,6,444400,1941951960.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+6,2,-74170,5,44640,-1601411163.0,6,1,77,2,44,197160,6,2,47700,5,44400,17117200,6,1,-41477700,8,46444400,-1411198172199.0,6,0,0,0,0,0
+7777700,7,4444400,1171901300.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,130130,6,1,74,2,-44,190200,6,1,777777,6,444444,115201202203201.0,6,1,77,2,44,203203,6,1,7770,4,4440,1491031910.0,6,0
+-57,2,44,121184,7,1,-311111,6,-7666760,-111111,7,2,-211057700,9,1609561560.0444,-1110114204.0,6,1,6,1,11111111777.0,12,216776808444.0,-11111111190147.0,6,1,-7741,4,-44413,-1071902051.0
+174,3,-44,-1125208,7,1,777777070.0,9,444444040,186209210124125.0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-15741,5,-1544422,-1139211141.01,7,1,77700,5,44400,21221300,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-57770,5,44440,1031184147.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+177,3,2344,-1125214,7,1,-31110,5,415840,-11110,6,1,-217770,6,12804440,-111472150,6,1,7770,4,4440,2161052170.0,6,0,0,0,0,0,0,0
+11777705,9,-230444404,-112182180104.0,7,1,777770770.0,9,444440440,209219124125.02203,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7777700,7,4444400,103107105107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,184222,6,1,-41270,5,46440,-141112230,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+17,2,154,-1224,7,1,-417,3,4224,-1271225,6,1,777020,6,444040,-149242010,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+17,2,154,-1224,7,1,-417702000,8,4644019800.0,-2261149010.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-557770,6,444440,10510611125.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+177,3,1544,-1227228,7,1,-4177700,7,4644400,-2291242149.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-12,-1,7,2,-4127700,7,4644400,-1271123000.0,6,1,-31110,5,1343330,-11110,6,1,-2111,4,-48685,-1111,7,2,77770770,8,44440440,1641241250.0231237,6,1
+-1311110,7,1214243342.0,-1111110,7,1,-2111,4,-48685,-1111,7,2,7777070,7,4444040,1641242350.0236,6,1,-7751,4,-44426,-2022321071.0,7,1,77,2,44,233233,6,1
+-21117,5,249824984,-1111239,7,1,-417277700,9,464044400,-12712421240204.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+19,2,-64,-1241242,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-217,3,495154,-11193,6,1,7,1,4,234,6,1,77770,5,44440,1501602430.0,6,1,-4117777700.0,10,4664444400.0,-12811244245107246.0,6,0,0,0,0,0,0,0
+7701,3,-44019,-24712401,6,1,-41100,4,423500,-1411100,6,2,-417770,6,464440,-1271204248249.0,6,1,-2110011570.0,9,666600198.044,-1110011126.01,7,0,0,0,0,0,0,0
+9,1,-4,250,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,250,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-12,-1,7,1,7,1,4,141,6,1,7,1,4,141,6,1,77,2,44,250239,6,1,-411077770,9,4198044440.0,-128110204249251.0,6,1
+-7704110,7,44043050,-2520141110.0,6,1,-41770,5,46440,-1271253249.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+17,2,124,-1141,7,1,77770,5,44440,1382521240.0,6,2,77770,5,44440,1421240,7,1,-7410,4,44140,-25414110,6,1,-74170,5,44640,-1381271165.0,6,0
+770,3,440,2550,6,1,-411041770,9,466046440,-1411101271.0253248,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+790,3,440,2562570,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777777090.0,9,444444040,256258124259260.03,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-74170,5,44640,-2621411263.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7,1,77,2,44,125186,7,1,7,2,-4177,4,42244,-1281125186.0,7,2,-417700,6,464400,-264111600,7,1,7,1,-31110,5,66660,-11110,7,2
+-741,3,-4422,-2691271,7,1,551120,6,44661240,-1081081110.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-2119,4,-48854,-111270,7,1,-772111,6,-444083066,-1151111,7,2,7,2,7,1,4,226,7,2,555110,6,4446220,-1081091091.01,7,1,7,1,-2959640470.0,12
+9,1,-4,272,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-74190,5,44840,-2731271108.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+70,2,40,1170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+70,2,40,1170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1841170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1841170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+755180,6,444660,-2741101131.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+755111770.0,9,444942440,-275114114111.0276,6,1,9,1,-4,277,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-73100,5,42600,-1771100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2782790,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1772800,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-73100,5,40800,-2811100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2812800,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+17,2,124,-1282,7,1,90,2,40,2830,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+190,3,640,-12840,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1432851820.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+17770,5,64440,-12861240,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+19,2,-64,-1287,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1770,4,6440,-12332880,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,289,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-41111,5,-416035,-2901111,7,2,490,3,440,2912922890.0,2,1,7770,4,4440,2931240,21,0,0,0,0,0,0,0,0,0,0,0,0,0
+1190,4,6040,-112912940,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-121110,6,15103622362.0,-111110,7,1,57777090,8,44444040,109148289249.0115,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-21157,5,-4823544,-1111161,7,1,820,3,10100,-10,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+11780,5,6460,-11100,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,295,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-41111,5,-417365,-2901111,7,2,777770011.0,9,4444400222.0,-233296297298.011,2,1,770,3,440,2962990,21,0,0,0,0,0,0,0,0,0,0,0,0,0
+11777700,8,60444400,-11300233301.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-41111,5,-417365,-2901111,7,2,777770011.0,9,4444400222.0,-233302297303.011,2,1,770,3,440,3023040,21,0,0,0,0,0,0,0,0,0,0,0,0,0
+14770,5,64440,-1300233305.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/bigop_names b/contrib/ML4PG/libs/ssreflect/advance/bigop_names
new file mode 100644
index 00000000..d228e3ab
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/bigop_names
@@ -0,0 +1,157 @@
+1 mulC_id
+2 mulC_zero
+3 mulC_dist
+4 mul1m
+5 mulm1
+6 mulmA
+7 iteropE
+8 mulmC
+9 mulmCA
+10 mulmAC
+11 mulmACA
+12 mul0m
+13 mulm0
+14 addmA
+15 addmC
+16 addmCA
+17 addmAC
+18 add0m
+19 addm0
+20 mulm_addl
+21 mulm_addr
+22 bigopE
+23 mem_index_iota
+24 mem_index_enum
+25 filter_index_enum
+26 big_load
+27 big_rec3
+28 big_ind3
+29 big_rec2
+30 big_ind2
+31 big_morph
+32 big_rec
+33 big_ind
+34 eq_big_op
+35 big_endo
+36 big_filter
+37 big_filter_cond
+38 eq_bigl
+39 big_andbC
+40 eq_bigr
+41 eq_big
+42 congr_big
+43 big_nil
+44 big_cons
+45 big_map
+46 big_nth
+47 big_hasC
+48 big_pred0_eq
+49 big_pred0
+50 big_cat_nested
+51 big_catl
+52 big_catr
+53 big_const_seq
+54 big_seq_cond
+55 big_seq
+56 eq_big_seq
+57 big_nat_cond
+58 big_nat
+59 congr_big_nat
+60 eq_big_nat
+61 big_geq
+62 big_ltn_cond
+63 big_ltn
+64 big_addn
+65 big_add1
+66 big_nat_recl
+67 big_mkord
+68 big_nat_widen
+69 big_ord_widen_cond
+70 big_ord_widen
+71 big_ord_widen_leq
+72 big_ord0
+73 big_tnth
+74 big_ord_narrow_cond
+75 big_ord_narrow_cond_leq
+76 big_ord_narrow
+77 big_ord_narrow_leq
+78 big_ord_recl
+79 big_const
+80 big_const_nat
+81 big_const_ord
+82 eq_big_idx_seq
+83 eq_big_idx
+84 big1_eq
+85 big1
+86 big1_seq
+87 big_seq1
+88 big_mkcond
+89 big_cat
+90 big_pred1_eq
+91 big_pred1
+92 big_cat_nat
+93 big_nat1
+94 big_nat_recr
+95 big_ord_recr
+96 big_sumType
+97 big_split_ord
+98 eq_big_perm
+99 big_uniq
+100 big_index_uniq
+101 big_rem
+102 big_undup
+103 eq_big_idem
+104 big_split
+105 bigID
+106 bigU
+107 bigD1
+108 bigD1_seq
+109 cardD1x
+110 partition_big
+111 reindex_onto
+112 reindex
+113 reindex_inj
+114 big_nat_rev
+115 pair_big_dep
+116 pair_big
+117 pair_bigA
+118 exchange_big_dep
+119 exchange_big
+120 exchange_big_dep_nat
+121 exchange_big_nat
+122 big_distrl
+123 big_distrr
+124 big_distrlr
+125 big_distr_big_dep
+126 big_distr_big
+127 bigA_distr_big_dep
+128 bigA_distr_big
+129 bigA_distr_bigA
+130 big_has
+131 big_all
+132 big_has_cond
+133 big_all_cond
+134 big_orE
+135 big_andE
+136 sum_nat_const
+137 sum1_card
+138 prod_nat_const
+139 sum_nat_const_nat
+140 prod_nat_const_nat
+141 leqif_sum
+142 leq_sum
+143 sum_nat_eq0
+144 prodn_cond_gt0
+145 prodn_gt0
+146 leq_bigmax_cond
+147 leq_bigmax
+148 bigmax_leqP
+149 bigmax_sup
+150 bigmax_eq_arg
+151 eq_bigmax_cond
+152 eq_bigmax
+153 expn_sum
+154 dvdn_biglcmP
+155 biglcmn_sup
+156 dvdn_biggcdP
+157 biggcdn_inf
diff --git a/contrib/ML4PG/libs/ssreflect/advance/bigop_tactics.csv b/contrib/ML4PG/libs/ssreflect/advance/bigop_tactics.csv
new file mode 100644
index 00000000..1f8d30e3
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/bigop_tactics.csv
@@ -0,0 +1,156 @@
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-7;0;-1;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-7;0;-1;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-7;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;191103104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105106;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105106;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-666;-1111;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105107;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-10;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;10;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;11;1
+0;0;0;0;0;-11;0;-1;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-11;0;-1;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.1011111213611311e+20;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;115116;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;22;1;-6;0;-1;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
+0;0;0;0;0;-12;0;-1;22;1;-6;0;-1;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117122155;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;22;1;-6;0;-1;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;125125126;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;125169;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102103;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;129130232;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.2517016013111712e+17;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;132133;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;117135;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;136124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-13;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;125125159170160.0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;125;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;138139;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;140141;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;138142;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143139;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;-12;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;138138242142149.0;767;3;0;0;0;0;0;0;0;0;0;0;-4;0;100100;67;2
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;216146;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;112147;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;113107149130.0107;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;126150129126.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;151152;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;232130117153.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;103;7;1;0;0;0;0;0;-4;44;1.2512612515515613e+20;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;110;7;1;0;0;0;0;0;-4;44;160161160;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;162163;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;164124165;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-16;0;-1;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;146166167160168.0;2366;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;4444;166164124125.0238;66667;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;23;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;23;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;23;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;141151152160173.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;174160175;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;174185176;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;177178;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;-4;44;1.2517016010517919e+20;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;110;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;174;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;138139183;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;117103;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117109;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;184117185;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;125186187188.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;190114191113.0114;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;151193103;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;194195196;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.6016319716017216e+20;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;117190130;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.301301901152012e+23;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-16;0;-1;6;1;-6;0;-1;7;1;0;0;0;0;0;-4;0;121114114;766;3;-4;0;0;6;1;-4;0;1.842041901471072e+23;766666;6;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.2518620921012413e+17;72121;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;211212213;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;103;7;1;0;0;0;0;0;-4;4;184147;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-23;0;-1;7;1;-12;0;-1;6;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.252141472152161e+20;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-23;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;2.1821820921912413e+17;722;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;103107105107.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;184222223;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;224225149242.0;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;7;1;-19;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;224149;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;125;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;227228242149.0;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;0;-1;7;1;-4;0;-1;676;3;0;0;-1;6;1;0;0;0;0;0;-4;0;107;7;1;0;0;0;0;0;-4;4;2.3016412412523123e+35;6667666;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;0;-1;7;1;-4;0;-1;76;2;0;0;-1;7;1;-4;-4;108109;6;1;-4;-4;107;7;1;0;0;0;0;0;-4;444;1.6412423523620224e+41;6676666;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-22;0;-1;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;239242240204.0;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.9323415016024324e+26;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;-4;0;0;67;2;-4;4;2471240204248249.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+-12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;0;1.4114125023920425e+20;6666;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;252253249;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.4113825212414213e+26;767666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;255253249;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;256;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;256258124259260.0;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;262263;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-19;0;-1;662177;5;-6;0;-1;7;1;-4;-4;1.081091091091181e+26;77677;5;-4;0;112;7;1;-4;0;0;7;1;-4;4;1.2518612518611622e+26;7.777777777676673e+21;20;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-12;0;-1;7;1;0;0;0;0;0;-4;-4;108108;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;269;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-22;0;-1;7;1;-4;0;-1;77;2;0;0;0;0;0;-4;-4;108109109108.0;777;3;0;0;0;0;0;0;0;0;0;0;-4;4;100;7777;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;273;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;184117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;184117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;110113;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;274;6;1;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;114114;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;275276;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;21;1
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;177;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;278279;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;177280;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;281;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;281280;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;282;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;24;1
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;143285182;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;286124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;233288;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;21;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;293124;21;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
+-6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-15;0;-1;7;1;0;0;-1;7;1;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;0;0;0;0;0;-4;444;148289249;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;-4;0;-1;725;2;0;0;0;0;0;0;0;0;0;0;-4;0;116;7;1;0;0;0;0;0;0;0;0;0;0;8;0;1;25;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;2;1;-4;4444;233296297298.02963;221;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;300233301;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;2;1;-4;4444;233302297303.03024;221;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;233305;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/binomial.csv b/contrib/ML4PG/libs/ssreflect/advance/binomial.csv
new file mode 100644
index 00000000..66a967ab
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/binomial.csv
@@ -0,0 +1,47 @@
+-31107;5;22904;-1110106;6;1;4777777700.0;11;4444444400.0;100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1;1;0;-1;7;2;-7311077;7;4229044;-1091110112113.0;6;2;777777700.0;9;444444400;100;6;1;6;2;-411770;6;420440;-115111160;6;2;-7777041;7;-4444042;-1171181190.0121
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;102;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077;7;22282044;-11110201144.0;6;1;7770;4;4440;2021921430.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311107770;9;666660444.0;-11110202203192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7720;4;4480;-15020410;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3110770;7;6660440;-1110205192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111107777.0;12;66666004444.0;-111110144143192.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-57770;5;44440;1061206104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311077770;9;666044440.0;-1110207208192126.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110;5;222820;-11110;6;1;7777770;7;4444440;2.072092101642062e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111111077.0;11;2222282200.044;-11111110208.0;7;1;777700;6;444400;2072122100.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7720;4;4480;-15021310;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3110770;7;6660440;-1110207214.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311107777;9;2228204444.0;-11110208215102144.0;6;1;7777770;7;4444440;2.162072171812102e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-51117;5;-44724;-1041111;7;1;-31177;5;22944;-111208144;6;1;7777770;7;4444440;1.432181432191432e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+1;1;0;-1;7;2;777700;6;444400;2062031040.0;6;1;777777700.0;10;444444400;214220221104222.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+5;1;-4;109;6;2;770;3;440;2142230;10;1;70;2;40;2240;10;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2252061040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1551;4;440;-11091071;7;1;777777770.0;11;4444444400.0;100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7777700;7;4444400;229230231215.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21077770;8;676604444.0;-110215219232233.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211077770;9;67666604444.0;-1110234235236237.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;2;-4;-1118;7;1;2;1;777777770.0;11;4444444400.0;100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3117777777.0;11;6664444444.0;-1.1111311211311018e+230;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+74;2;-44;234241233;6;1;7777770;7;4444440;242243199186147.0;6;1;77;2;44;244245;6;1;-21110770;8;676600440.0;-11110203234.0;7;0;0;0;0;0;0;0
+-31177770;8;22944440;-111246102247.0;6;1;-2959640470.0;11;4444444440.0;2.4819216924924613e+200;6;1;-2959640470.0;10;4444444440.0;2.502511342082321e+230;6;0;7770;4;4440;1821990;6;0;-41777770;8;414444440;-1231218143248252.0;6;0
+6;1;6;2;-3111177777.0;10;62266244444.0;-11111255256257208.0;6;3;777770;6;444440;246258103144232.0;6;2;777770;6;444440;246247103208102.0;6;1;77;2;44;246;6;1;7770;4
+-217;3;2724;-11247;6;1;77777770;8;44444440;2.592492462502321e+170;6;1;7777;4;4444;134144248260.0;6;1;77777770;8;44444440;123261124125.0;6;1;777770;6;444440;218248143248252.0;6;0
+777;3;444;129262263;6;1;-7410;4;44150;-26412310;6;1;77770;5;44440;129260262102.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111;4;-76676;-1111;6;2;77770770;8;44440440;2651242660.0267243;6;1;77770;5;44440;2682691240.0;6;2;1111010;6;116660130;-1111010;7;1;2;1;-2;-1;6;1
+7;1;4;277;7;1;7;2;-81090;5;186040;-1101400;5;1;-741;3;-4415;-2782791;7;1;774;3;-444;242280281;7;1;7777770;7;4444440;1.882822832842853e+170
+-741;3;-4415;-2872791;7;1;72000;4;47000;-2881000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+6;2;7777770;8;4444440;214289124290.0;6;2;777770;6;444440;242148149151291.0;6;1;57;2;44;109224;6;1;7777;4;4444;292245293268.0;10;1;10;1;7;1
+6;2;-21401;4;-676408;-1128901;6;2;-41770;5;46440;-3061267242.0;6;1;77;2;44;245307;6;1;6;1;6;1;6;2;17770;5;64440;-1308286309.0
+6;1;6;2;77770;5;44440;202326167212.0;10;1;6;1;6;1;6;2;17700;5;64400;-132700;18;1;6;1;77770;5;44440;3282682720.0;6;2
+6;1;6;1;6;1;77770;5;44440;3512682720.0;6;2;-417;3;4174;-1201147;6;2;2;1;-28;-1;6;2;-7311110;7;4466830;-352111110;6;3
+6;1;6;1;77770;5;44440;3632682720.0;6;2;-417777700;9;464444400;-1201353107364128.0;6;1;-8111;4;-895;-1111;15;2;9;1;-4;140;6;1;1117777770.0;10
diff --git a/contrib/ML4PG/libs/ssreflect/advance/binomial_names b/contrib/ML4PG/libs/ssreflect/advance/binomial_names
new file mode 100644
index 00000000..e7b814dd
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/binomial_names
@@ -0,0 +1,47 @@
+1 fact_prod
+2 logn_fact
+3 ffactE
+4 ffactn0
+5 ffact0n
+6 ffactnS
+7 ffactSS
+8 ffactn1
+9 ffactnSr
+10 ffact_gt0
+11 ffact_small
+12 ffactnn
+13 ffact_fact
+14 ffact_factd
+15 binE
+16 bin0
+17 bin0n
+18 binS
+19 bin1
+20 bin_gt0
+21 leq_bin2l
+22 bin_small
+23 binn
+24 mul_Sm_binm
+25 bin_fact
+26 bin_factd
+27 bin_ffact
+28 bin_ffactd
+29 bin_sub
+30 binSn
+31 bin2
+32 bin2odd
+33 prime_dvd_bin
+34 triangular_sum
+35 textbook_triangular_sum
+36 Pascal
+37 Vandermonde
+38 subn_exp
+39 predn_exp
+40 card_uniq_tuples
+41 card_inj_ffuns_on
+42 card_inj_ffuns
+43 card_draws
+44 card_ltn_sorted_tuples
+45 card_sorted_tuples
+46 card_partial_ord_partitions
+47 card_ord_partitions
diff --git a/contrib/ML4PG/libs/ssreflect/advance/binomial_tactics.csv b/contrib/ML4PG/libs/ssreflect/advance/binomial_tactics.csv
new file mode 100644
index 00000000..5efa52fd
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/binomial_tactics.csv
@@ -0,0 +1,48 @@
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.0610819210911011e+17;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6666666;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;77111314;5;-4;0;-1;2666;4;0;0;0;0;0;-4;0;1.021221221021111e+17;66227;5;-4;-44444;103;67;2;-4;0;0;6;1;-4;4;100;7.610777721122276e+55;48;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;201144202192143.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;202203192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150204;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;205192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;144143192;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;7;1;0;0;0;0;0;-4;4;206104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;207208192126.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;2.072092101642062e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;208207212210.0;72;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150213;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;207214;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;208215102144.02;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4;-72;111;7;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;-4;4;2.081441432181432e+23;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;2.0620310421422022e+23;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;214223224;1010;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;225206104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;109;7;1;-4;-4;107;7;1;0;0;0;0;0;-4;4444444;2.262271432282241e+17;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;229230231215.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;215219232233.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;234235236237.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;2.3821923812816624e+17;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.1311211311019221e+20;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2.3424224319918614e+17;66667;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;2.4610224724819217e+211;666666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;255256257207.02463;666666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.2926226326412927e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-2;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;77;2;-4;444;2.6512426626724226e+38;666666666.0;9;8;0;1;15;1;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2.7727824228018827e+29;7776;4;8;0;1;5;1;0;0;0;0;0;-4;0;100;5;1
+0;0;0;0;0;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;287288;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-8;0;-1;77;2;0;0;0;0;0;-4;0;1.091091111121221e+32;676677610.0;8;-4;-4;110114109;77;2;0;0;0;0;0;-4;44444;214289124290.0242;6.661010771677778e+23;19;8;8080;111;7167;3;0;0;0;0;0;-4;0;100100100100.0;761717;4
+-6;0;-1;7;1;-6;0;-1;6;1;0;0;0;0;0;-4;0;1.1112212210914214e+17;76106;4;-4;-4;109109109;777;3;-4;0;0;67;2;-4;4;2.672422453073083e+38;6671010106776106.0;12;8;0;1;6;1;0;0;0;0;0;-4;0;100;10;1
+-6;0;-111111111;18610;3;0;0;-1;1710;2;-6;0;-1;67;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;202326167212.03275;1.0186666666677777e+37;29;8;0;1;15;1;0;0;0;0;0;0;0;0;0;0
+0;0;111;10610;3;-27;0;-1;6107710;5;-4;0;-1;677;3;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;444;3.512682721473521e+26;6.666666610767711e+17;16;8;0;1;15;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;13;1;-4;444;3.632682723531074e+20;66136;4;8;0;1;15;1;0;0;0;0;0;-4;0;100;6;1
diff --git a/contrib/ML4PG/libs/ssreflect/advance/binomial_tree.csv b/contrib/ML4PG/libs/ssreflect/advance/binomial_tree.csv
new file mode 100644
index 00000000..4097929e
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/binomial_tree.csv
@@ -0,0 +1,48 @@
+0;0;-2;100;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;100100100100.0;0;0;0;44444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10;-4;0;100100100100.01111;-4;-4;0;4444444444.044444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-472;0;-2;0;0;-4;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;-4;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;100;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;100;0;0;0;44444444444.04444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;100;0;0;0;444444444444.0444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;0;0;0;0;0;444444444444444.06;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;-6;100100;0;0;0;44444444444.04444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100;0;0;0;444444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;100100100;-4;-4;0;444444444444.04443;111;0;100100100100.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;0;100100100100.0;-4;-4;0;44444444444.04444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-14;-6;100100100100.0111;0;0;0;44444444444.04444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-261;-4;100100100100.01;0;0;0;44444444444.04444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100100;0;0;0;444444444444.044;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/matrix.csv b/contrib/ML4PG/libs/ssreflect/advance/matrix.csv
new file mode 100644
index 00000000..65bb8920
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/matrix.csv
@@ -0,0 +1,396 @@
+7700,4,4400,10200,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+8,1,551190,6,446640,-10210311103.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77770,5,44440,104105106107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2220,4,660,-1110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,109,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5170,4,4640,-10411110,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5170,4,4640,-10511080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511,3,-477,-10411,8,1,-5170,4,4440,-10611080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111110,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5170,4,4640,-10511080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5170,4,4640,-10711080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108112.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108112.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108113.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108113.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-211770,6,8000440,-1111141140.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+22220,5,600660060.0,-11110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+220,3,60600,-110,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+220,3,60600,-110,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-50,2,40,1080,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+22270,5,668666840.0,-1111150,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-721070,6,49888040,-1101160,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+720,3,490,-10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2220,4,668680,-1110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+151170,6,646640,-1104111080.0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,117118,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-21151170,8,800046640.0,-11110411119.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,120,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,121,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51770,5,46440,-1051108111.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51770,5,46440,-1071108111.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-51170,5,46640,-105111080,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-51170,5,46640,-107111080,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-5117701117.0,9,-4111440774.0,-10411242143.01111,7,1,70,2,40,1080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-5111770117.0,9,-4108144074.0,-104111242143.0111,7,1,70,2,40,1080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1081220,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108123.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1081220,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108124.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117,4,4774,-10411108,6,1,-21107709,8,-1286666044.04,-11101080125.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1081220,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108126.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1081220,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108127.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-111,3,-1344,-111,7,1,70,2,40,1280,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-111,3,-1344,-111,7,1,70,2,40,1290,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+477770,6,444440,130131132133134.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,600,-10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+20,2,600,-10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+4511,4,-4477,-13510411,14,1,-7772110,7,4441287070.0,-1361081151.011,6,2,6,2,-12107770,8,128804440,-1110137124.0,7,1,-2117,4,120870704,-111108,6,2,6,2,7,2
+47770,5,44440,130138131139.0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-51172170,8,4664486640.0,-1041110811.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+470,3,440,1301400,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-51172170,8,4664486640.0,-1041110811.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+470,3,440,1301410,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111420,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111430,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111440,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111450,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51117,5,47874,-104111146,6,1,-211,3,-1287070,-111,6,2,774,3,-444,108123147,6,2,7700,4,4400,14800,6,1,7400,3,4400,12414700,6,1
+477770,6,444440,130131151152153.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-2170,4,6640,-111540,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511777,6,477444,-10411136108115.0,6,1,-2110,4,12870700,-1110,6,2,774,3,-444,108123147,6,2,7777700,7,4444400,1551561500.0,6,1,774,3,-444,146124147,6,1
+47770,5,44440,130138158159.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+101770,5,440,-101110,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1341600,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1261230,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1611620,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1261240,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1611630,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1271230,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1641620,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1271240,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1641630,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77777,5,44444,165166167168169.0,6,1,77770,5,44440,170171172173.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+47770,5,44440,130174175176.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7777770,7,4444440,177178179180177.0,14,1,777777,6,444444,1.8017713918117718e+17,6,1,770,3,440,1821830,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1061070,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7,1,4,184,15,1,720,3,400,-18510,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77770,5,44440,136108184186.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1511770,7,6466440,-110411108187.0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1510111177.0,10,646066644.0,-1105101111.0187109,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-81110,5,147760,-11110,17,2,770,3,440,1841860,6,1,11111770,8,6668440,-11111184186.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5170,4,4640,-10511080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5170,4,4640,-10711080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111880,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-1,1,-15,-1,6,2,70,2,40,1890,6,1,777770,6,444440,187124190191.0192,7,0,0,0,0,0,0,0,0,0,0,0,0,0
+5170,4,4640,-10511880,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-511770210,9,4664401288.08,-1041110801.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-511770210,9,4664401288.08,-1041110801.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-511770210,9,4664401288.08,-1041110801.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+111511770,9,666466440.0,-11110411108193.0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+11511770,8,66466440,-1110411108194.0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1511770,7,6466440,-110411108195.0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1511770,7,6466440,-110411108196.0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-3117770,7,6664440,-111197108198.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-41170,5,46640,-111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1151170,7,6646640,-1110411108.0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1151170,7,6646640,-1110411108.0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+150,3,640,-11040,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1510,4,6460,-110410,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,199,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,200,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,201,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2022030,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2022030,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,204,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,205,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,206,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2072080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77700,5,44400,20921000,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-721110,6,412817760,-11110,6,2,740770,5,440440,2112122130.0214214,6,1,-755151770.0,9,444644440,-2151091191.012112,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2162030,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108217.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108218.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2192200,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108221.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108222.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108223.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108224.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511,3,-477,-10411,6,1,-2959640470.0,11,4444444440.0,2.252262252261082e+200,6,1,777707777.0,9,444404444,2282291240.0143123,6,2,7777770777.0,11,4444440444.0,225228124231.01083,6,1,77770,5,44440,108215230232.0,6,0
+1151170,7,6646640,-1110411108.0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108149.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2332340,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177,5,47744,-10411108235.0,6,1,-721770,6,41288440,-12211108238.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177,5,47744,-10411108235.0,6,1,-721770,6,41288440,-12211108238.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177,5,47744,-10411108235.0,6,1,-72170,5,4128840,-122111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177,5,47744,-10411108235.0,6,1,-72170,5,4128840,-122111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177700,8,46644400,-10411108236.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2372380,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2392400,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511772000,8,4664498000.0,-10411108143.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1115117770.0,10,666466444.0,-11110411108241242.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117777770.0,11,4774444440.0,-10411225226108216.0,6,1,777777770.0,9,444444440,1.4324322822912423e+200,6,1,77770,5,44440,108143211232.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108143.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,246,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+11770,5,66440,-112472480,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108241.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2492270,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-774170,6,444640,-2472502511.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,2522532540.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51770,5,46440,-1051108143.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-721,3,-412818,-11,26,2,-41777770,8,46444440,-2.5512561121131083e+180,26,1,77778,5,-444419,2581242590.0,7,1,7777770,7,4444440,203259260256261.03,6,0,0,0,0,0,0,0
+580,3,460,12300,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5870,4,41940,12302030,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51770,5,46440,-1051111108.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4774440,-10411108263.0,6,1,-217777700,9,1288444440.0,-11137113264143.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117,4,4774,-10411108,6,1,6,2,-41770,5,46440,-2511108265.0,6,1,-7417770,7,44164440,-2662511108267.0,6,1,-4170,4,4640,-25112240,6,0,0,0,0,0
+5117777770.077,13,4664444440.044,-10411108228124268.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117777770.077,13,4664444440.044,-10411108228124268.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177,5,47744,-10411108270.0,6,1,-41770,5,46440,-2511108271.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177,5,47744,-10411108270.0,6,1,-41770,5,46440,-2511108272.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4774440,-10411108273.0,6,1,-41770,5,46440,-2511108222.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4774440,-10411108273.0,6,1,-41770,5,46440,-2511108223.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2742750,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2762770,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-411770,6,466440,-27811279274.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-411770,6,466440,-28011281276.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4774440,-10411108265.0,24,1,-41770,5,46440,-2511224108.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+517777770,9,474444440,-1.0511082261082151e+180,6,1,77777707777.0,13,44444404444.0,228229124244245.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2822830,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-51774170,8,46444640,-1051108225.0251111,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4774440,-10411108226.0,6,1,-295964047,9,444444444,2.841082152852863e+26,6,1,-777770777.057,12,4444404444.04,228229124268.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2902150,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,2901240,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511261585009.0,15,477149477148.0,-1.0411108226108217e+280,6,1,777770,6,444440,108143291124.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511261585009.0,15,477149477148.0,-1.0411108226108217e+280,6,1,-777570,6,444440,108143241124.01,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4664440,-10411292108241.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7751170,7,4446640,-24729210411.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2932490,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2932540,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,247294,6,1,511770,6,466440,-10411108227.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177,5,47744,-10411108295.0,6,1,-410770,6,460440,-25110108296.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2972980,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2972990,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,3003012980.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777770,6,444440,302300301300302.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,3032990,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,304,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777770,6,444440,301120297305302.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3062990,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,307,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3043080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-4180,4,4660,-309100,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+580,3,460,12600,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3103110,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+117,3,-204,-111,7,1,551117,6,-4420204,-1261261111.0,6,2,870,3,2140,3120,28,1,8,1,-21,0,28,1,7777770,7,4444440,3.123133043083143e+170,6,0
+5511178,7,-442020421,-1261261111.0,6,2,7770,4,4440,3063133150.0,6,1,70,2,40,3060,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+117,3,-204,-111,7,1,77777,5,44444,298303316121304.0,6,1,770,3,440,3173180,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108238.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4664440,-10411108319285.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511777,6,477444,-10411108319285.0,6,1,-21770,5,12877440,-111080,6,1,77770,5,44440,148149156320.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177,5,47744,-10411108149.0,6,1,-2177700,7,1286644400.0,-1110814300.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511777,6,477444,-10411108321149.0,6,1,-2177021770.0,10,128774401287.0744,-11108011108.0,6,1,77770,5,44440,148149156320.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+511772000,8,4664498000.0,-10411108143.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4664440,-10411108322319.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+4770,4,4440,1303233240.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51177,5,47744,-10411108322.0,6,1,6,2,7777770,7,4444440,238228124268.0,6,2,77777770,8,44444440,3.251083221503262e+200,6,1,7,1,4,226,6,2,77777700,8,44444400,108215286288327.0
+17770,5,4440,-1328329330.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+177770,6,44440,-1331302332333.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+177770,6,44440,-1334301332333.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+177777700,9,44444400,-1331302335336229.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117,4,4774,-10411108,6,1,-2741770,7,4446440,-11082511108337.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117,4,4774,-10411108,6,1,-2741770,7,4446440,-11082511108338.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4774440,-10411108339.0,6,1,-4177,4,4744,-2511123126.0,6,1,770,3,440,1241270,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3403410,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1773413420.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3403420,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3403430,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77751,5,-44447,-233234344105.01,7,1,-7741770,7,4446440,-1082252511.0345109,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,346,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3473480,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3473480,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3473480,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+11177700,8,66644400,-1112743490.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+11150111,7,-24534077,-1111190111.0,7,1,777777770.0,10,444444440,3.502823472373503e+170,6,1,51,2,-47,-1191,7,1,777770,6,444440,345351282290.0,6,1,27777770,8,44444440,-1.2823451121132794e+180,6,0
+-4170,4,4640,-25111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-111777041,9,-24534440416.0,-1113532730.02511,7,1,70,2,40,1080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,203,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,218,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,354,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-41770,5,46440,-2511108215.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,247355,6,1,70,2,40,2510,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,356,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3573560,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,3390,6,1,-4170,4,4640,-25113580,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5551770,7,44412440,-1091141091.010836,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+90,2,40,3600,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,361,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,362,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+17770,5,64440,-13633640,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+70,2,40,3650,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-5111777021.0,11,48774440128.07,-104111108366.011,6,2,77770,5,44440,3671083660.0,6,2,-2170,4,128640,-112360,6,1,77770,5,44440,3681083660.0,6,1,-217700,6,12864400,-1110800,6,0
+770,3,440,3693110,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-51174170,8,46644640,-10411108251.01108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108370.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5117770,7,4774440,-10411108371.0,7,1,-41770,5,46440,-2511108370.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108372.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108373.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108373.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,3743750,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108372.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,376,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108372.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-74170,5,44640,-3712511108.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-77041,5,-440416,-37102511,7,1,777,3,444,370377378,7,1,-4170,4,4640,-25111080,7,0,0,0,0,0,0,0,0,0,0,0,0,0
+777770,6,444440,370377379380381.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108382.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,3833843850.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+90,2,40,386112387388.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+151177770,9,46644440,-1.1041110838939011e+170,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-1410,4,4150,-139110,7,1,7770,4,4440,3923903930.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+75117,5,44774,-39410411108.0,6,1,-4170,4,4640,-25113950,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+47777700,8,44444400,130396345396349.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1170,4,6640,-113970,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1115177777.0,12,24534744444.0,-1111191350282347.0,7,1,70,2,40,3500,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1115177777.0,12,24534744444.0,-1111191350282346.0,7,1,70,2,40,3500,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77700,5,44400,34634800,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+6,2,51777,5,46444,-1051111108398.0,6,2,-774110,6,444770,-39922525111.0,6,2,7777770,7,4444440,1.081871082341084e+170,6,1,-77410,5,444160,-4012662511.0,6,1,770,3,440,1084020
+751770,6,446440,-4031051108395.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,404,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+477770,6,444440,130396246293345.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,405,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,4052930,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+6,2,-4170,4,4640,-25111080,6,1,-74107,5,441604,-26625110108.0,6,1,-419,3,-464,-2511395,6,0,0,0,0,0,0,0,0,0,0,0
+-751,3,-4424,-4061291,7,1,-5151,4,-425425,-13011301,7,1,-77410,5,444160,-2652732511.0,6,1,7,1,4,407,6,1,7,1,4,226,6,0
+11,2,-24,-11,7,1,6,1,7,1,4,410,6,1,477,3,444,411412195270.0,6,1,-7410,4,44200,-29541310,6,1,77777,5,44444,414124415221.0
+7,1,4,295,6,1,-41077,5,426044,-25110418295.0,6,1,-41770,5,46440,-2511108364.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+777707770.0,9,444404440,2262281240.0108213,6,1,77777770,8,44444440,2.272282291244194e+170,6,1,-21111,5,-421700,-11111,6,2,777777700.0,10,444444400,226407108211269.0,6,1,-1151510,7,27646440,-1113311201.0,6,0
+7770,4,4440,3104214220.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,2622624230.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-770417,6,4404164,-26502511407.0,6,1,77770,5,44440,1074242730.0,6,1,-4170,4,4640,-25111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+77770,5,44440,425426427269.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777770,6,444440,227249426423227.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,428,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,2670,6,1,6,1,6,2,-7410770,7,44200440,-26625110265.0,6,2,7,1,4,429,7,2,-4170,4,4640,-25111080,6,1,7,1
+9,1,-4,438,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7777770,7,4444440,226194228124.0,6,2,-777417770.0,9,444464440,-195422221251.0111,6,1,6,2,-451551,6,-44284416,-4394401351.010913,27,2,-755570,6,444440,112109120136.0242,6,1,-117751,6,1064440,-11242143121.01
+-211112,6,-356695773577.07,-111111,6,1,7,1,4,398,6,2,17,2,17,3,7,1,4,0,6,3,70,2,40,2360,7,2,17,3
+7770,4,4440,4520,6,1,-417770,6,474440,-2511453265.0,6,1,-411,3,-4213,-25111,6,1,77,2,44,407410,6,1,-4170,4,4640,-45411430,6,0
+77,2,44,107,6,1,777,3,444,455456457,6,1,51170,5,48840,-104111080,24,0,0,0,0,0,0,0,0,0,0,0,0,0
+777770,6,444440,345426407224.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,457458,6,1,-41770,5,46440,-2511459108.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108459.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+511770,6,466440,-10411108460.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+51172,5,-47744,-104111081,6,2,7770,4,4440,4614580,6,2,-4170,4,4640,-25111080,6,1,6,1,77770,5,44440,1084624630.0,6,1,77,2,44,435458
+4777770,7,4444440,1.3039646446545725e+170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,4234663010.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-13,-1,7,1,-407995279,13,227034908,4.674684692564705e+38,6,1,77777770,8,44444440,3.494662493954385e+200,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+17517,5,1344124,-11561111235.0,7,1,-1111177777.0,10,820644444.0,-1.111147526025619e+19,7,1,7777,4,4444,160134476477.0,7,1,611111,6,-413439,-12011111,7,1,77777770,8,44444440,3.024782834792812e+200,27,0
+-3111111,7,-6669658,-1111111,6,2,6,2,77511,5,-44477,-42322110411.0,6,2,-72105170,8,4128860484.0,-1081101021.01,6,1,7,1,4,481,6,1,7777777,7,4444444,194228482124.0483
+777770,6,444440,457174489490457.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,4914234920.0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777770,6,444440,491421493494492.0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,4914570,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+177770,6,644440,-1491426495493.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7777770,7,4444440,423496254497498.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777777,6,444444,491426495124.0,7,1,7777770,7,4444440,499500501502503.0,24,1,-21177,5,55951544,-111262262,6,1,77770777,8,44440444,5042604990.05054,6,1,77777700,8,44444400,506507224508493.0,6,0
+2,1,-4,-1,24,2,777777770.0,10,4444444400.0,509260499261.051,24,1,777,3,444,499262,24,1,777777077.0,10,4444440440.0,491428504260499.06,24,0,0,0,0,0,0,0
+117777770,9,664444440.0,-11513349466249514.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+117777770,9,664444440.0,-11513397465249514.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+11107770,8,66604440,-1110283515302.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+11107770,8,66604440,-1110283516302.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+11107770,8,66604440,-1110283516301.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+11107770,8,66604440,-1110283515301.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+27777,5,44444,-1517512518.0,24,1,477770,6,444440,519438516520423.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,4915215220.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,4954380,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77777700,8,44444400,155345464523457.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1277,4,15444,-11517,32,1,4777700,7,4444400,524515516525.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+157770,6,644440,-1118526474527.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+200,2,0,-100,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+177777700,9,644444400.0,-1242144124.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,521,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,523,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,528,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+74,2,-44,221529,24,1,7770,4,4440,3123143100.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+55118,5,-4421321,-126126110,6,2,7770,4,4440,5305315320.0,24,1,770,3,440,5315320,24,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,431,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,533,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+477770,6,444440,534535491124.0536,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2077,3,498044,-10425215,6,1,55179,5,-441344,-10910911537.0,6,1,-511551,6,-477446,-10411109141.01,6,1,7770,4,4440,1085385390.0,7,0,0,0,0,0,0,0
+11114,5,-16504,-11115401,7,1,7777,4,4444,541542124.0,7,1,7777700,7,4444400,543544541545.0,27,0,0,0,0,0,0,0,0,0,0,0,0,0
+-41111,5,-47683,-2551111,26,2,-417,3,404,-5405461236.0,6,2,7777770,7,4444440,5.375474652835483e+170,27,1,-3111111,7,-6669638,-1111111,33,2,1177770,7,27044440,-11549550550423.0,33,1
+111511,6,-1650477,-11110411,7,1,-51790,5,40440,-1461108567.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-7210,4,498180,-110,7,1,7777090,7,4444040,1083742360.0568,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77777700,9,44444400,491379569570.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,571,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,571,7,1,77770,5,44440,572573379574.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+9,1,-4,575,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+70,2,40,2360,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-31111109,8,-23295804,-1111110576.0,27,1,-5121111,7,-468816682,-114111111,27,1,7,1,4,577,7,1,1179,4,-644,-111578,7,0,0,0,0,0,0,0
+-31111107,8,23295804,-1111110221.0,36,1,37,1,-51211110,8,41389316663.0,-1141111110.0,37,1,77777770,8,44444440,2.2457958058158218e+170,6,1,7777777,7,4444444,5.832792811952293e+20,6,0,777777,6,444444,3.493972831942236e+17
+-31111107,8,23295804,-1111110423.0,6,1,-51211111,8,-46893166833.0,-1141111111.0,6,1,7770,4,4440,590423221.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+-311111110777.0,12,232957780444.0,-1.111111101111111e+17,7,1,-51211111,8,-46892166832.0,-1141111111.0,7,1,-7721077,7,441287044,-108366110108366.0,7,2,-21090,5,1286040,-1105910,7,1,-217700,6,12864400,-1110800,7,0
+-3111111107.0,10,2329577804.0,-111111110111.0,7,1,-51211111,8,-46892166832.0,-1141111111.0,7,1,-7721077,7,441287044,-108366110108366.0,7,1,-2190,4,128640,-11592112113137.0,7,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/matrix_names b/contrib/ML4PG/libs/ssreflect/advance/matrix_names
new file mode 100644
index 00000000..41837a27
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/matrix_names
@@ -0,0 +1,396 @@
+1 mxE
+2 matrixP
+3 card_matrix
+4 castmx_const
+5 trmx_const
+6 row_perm_const
+7 col_perm_const
+8 xrow_const
+9 xcol_const
+10 rowP
+11 rowK
+12 row_matrixP
+13 colP
+14 row_const
+15 col_const
+16 row'_const
+17 col'_const
+18 col_perm1
+19 row_perm1
+20 col_permM
+21 row_permM
+22 col_row_permC
+23 castmx_id
+24 castmx_comp
+25 castmxK
+26 castmxKV
+27 castmx_sym
+28 castmxE
+29 conform_mx_id
+30 nonconform_mx
+31 conform_castmx
+32 trmxK
+33 trmx_inj
+34 trmx_cast
+35 tr_row_perm
+36 tr_col_perm
+37 tr_xrow
+38 tr_xcol
+39 row_id
+40 col_id
+41 row_eq
+42 col_eq
+43 row'_eq
+44 col'_eq
+45 tr_row
+46 tr_row'
+47 tr_col
+48 tr_col'
+49 row_mxEl
+50 row_mxKl
+51 row_mxEr
+52 row_mxKr
+53 hsubmxK
+54 col_mxEu
+55 col_mxKu
+56 col_mxEd
+57 col_mxKd
+58 eq_row_mx
+59 eq_col_mx
+60 row_mx_const
+61 col_mx_const
+62 trmx_lsub
+63 trmx_rsub
+64 tr_row_mx
+65 tr_col_mx
+66 trmx_usub
+67 trmx_dsub
+68 vsubmxK
+69 cast_row_mx
+70 cast_col_mx
+71 row_mxA
+72 col_mxA
+73 row_row_mx
+74 col_col_mx
+75 row'_row_mx
+76 col'_col_mx
+77 colKl
+78 colKr
+79 rowKu
+80 rowKd
+81 col'Kl
+82 row'Ku
+83 mx'_cast
+84 col'Kr
+85 row'Kd
+86 eq_block_mx
+87 block_mx_const
+88 submxK
+89 block_mxEul
+90 block_mxKul
+91 block_mxEur
+92 block_mxKur
+93 block_mxEdl
+94 block_mxKdl
+95 block_mxEdr
+96 block_mxKdr
+97 block_mxEv
+98 trmx_ulsub
+99 trmx_ursub
+100 trmx_dlsub
+101 trmx_drsub
+102 tr_block_mx
+103 block_mxEh
+104 block_mxA
+105 mxvec_cast
+106 mxvec_indexP
+107 mxvecE
+108 mxvecK
+109 vec_mxK
+110 curry_mxvec_bij
+111 map_trmx
+112 map_const_mx
+113 map_row
+114 map_col
+115 map_row'
+116 map_col'
+117 map_row_perm
+118 map_col_perm
+119 map_xrow
+120 map_xcol
+121 map_castmx
+122 map_conform_mx
+123 map_mxvec
+124 map_vec_mx
+125 map_row_mx
+126 map_col_mx
+127 map_block_mx
+128 map_lsubmx
+129 map_rsubmx
+130 map_usubmx
+131 map_dsubmx
+132 map_ulsubmx
+133 map_ursubmx
+134 map_dlsubmx
+135 map_drsubmx
+136 addmxA
+137 addmxC
+138 add0mx
+139 addNmx
+140 mulmxnE
+141 summxE
+142 const_mx_is_additive
+143 swizzle_mx_is_additive
+144 flatmx0
+145 thinmx0
+146 trmx0
+147 row0
+148 col0
+149 mxvec_eq0
+150 vec_mx_eq0
+151 row_mx0
+152 col_mx0
+153 block_mx0
+154 opp_row_mx
+155 opp_col_mx
+156 opp_block_mx
+157 add_row_mx
+158 add_col_mx
+159 add_block_mx
+160 nz_row_eq0
+161 map_mx0
+162 map_mxN
+163 map_mxD
+164 map_mx_sub
+165 scale1mx
+166 scalemxDl
+167 scalemxDr
+168 scalemxA
+169 scalemx_const
+170 matrix_sum_delta
+171 swizzle_mx_is_scalable
+172 trmx_delta
+173 row_sum_delta
+174 delta_mx_lshift
+175 delta_mx_rshift
+176 delta_mx_ushift
+177 delta_mx_dshift
+178 vec_mx_delta
+179 mxvec_delta
+180 scale_row_mx
+181 scale_col_mx
+182 scale_block_mx
+183 tr_diag_mx
+184 diag_mx_is_linear
+185 diag_mx_sum_delta
+186 diag_const_mx
+187 tr_scalar_mx
+188 trmx1
+189 scalar_mx_is_additive
+190 scale_scalar_mx
+191 scalemx1
+192 scalar_mx_sum_delta
+193 mx1_sum_delta
+194 row1
+195 is_scalar_mxP
+196 scalar_mx_is_scalar
+197 mx0_is_scalar
+198 mx11_scalar
+199 scalar_mx_block
+200 mulmxA
+201 mul0mx
+202 mulmx0
+203 mulmxN
+204 mulNmx
+205 mulmxDl
+206 mulmxDr
+207 mulmxBl
+208 mulmxBr
+209 mulmx_suml
+210 mulmx_sumr
+211 scalemxAl
+212 rowE
+213 row_mul
+214 mulmx_sum_row
+215 mul_delta_mx_cond
+216 mul_delta_mx
+217 mul_delta_mx_0
+218 mul_diag_mx
+219 mul_mx_diag
+220 mulmx_diag
+221 mul_scalar_mx
+222 scalar_mxM
+223 mul1mx
+224 mulmx1
+225 mul_col_perm
+226 mul_row_perm
+227 mul_xcol
+228 col_permE
+229 row_permE
+230 xcolE
+231 xrowE
+232 tr_perm_mx
+233 tr_tperm_mx
+234 perm_mx1
+235 perm_mxM
+236 is_perm_mxP
+237 perm_mx_is_perm
+238 is_perm_mx1
+239 is_perm_mxMl
+240 is_perm_mx_tr
+241 is_perm_mxMr
+242 pid_mx_0
+243 pid_mx_1
+244 pid_mx_row
+245 pid_mx_col
+246 pid_mx_block
+247 tr_pid_mx
+248 pid_mx_minv
+249 pid_mx_minh
+250 mul_pid_mx
+251 pid_mx_id
+252 mul_copid_mx_pid
+253 mul_pid_mx_copid
+254 copid_mx_id
+255 mul_mx_row
+256 mul_col_mx
+257 mul_row_col
+258 mul_col_row
+259 mul_row_block
+260 mul_block_col
+261 mulmx_block
+262 mul_rV_lin1
+263 mul_rV_lin
+264 mul_vec_lin
+265 mx_rV_lin
+266 mx_vec_lin
+267 mulmxr_is_linear
+268 lin_mulmxr_is_linear
+269 mxtrace_tr
+270 mxtrace_is_scalar
+271 mxtrace0
+272 mxtraceD
+273 mxtraceZ
+274 mxtrace_diag
+275 mxtrace_scalar
+276 mxtrace1
+277 trace_mx11
+278 mxtrace_block
+279 matrix_nonzero1
+280 mulmxE
+281 idmxE
+282 scalar_mx_is_multiplicative
+283 lift0_perm0
+284 lift0_perm_lift
+285 lift0_permK
+286 lift0_perm_eq0
+287 lift0_mx_perm
+288 lift0_mx_is_perm
+289 trmx_mul_rev
+290 map_mxZ
+291 map_mxM
+292 map_delta_mx
+293 map_diag_mx
+294 map_scalar_mx
+295 map_mx1
+296 map_perm_mx
+297 map_tperm_mx
+298 map_pid_mx
+299 trace_map_mx
+300 det_map_mx
+301 cofactor_map_mx
+302 map_mx_adj
+303 map_copid_mx
+304 map_mx_is_multiplicative
+305 map_lin1_mx
+306 map_lin_mx
+307 trmx_mul
+308 scalemxAr
+309 mulmx_is_scalable
+310 lin_mulmx_is_linear
+311 lin_mul_row_is_linear
+312 mul_vec_lin_row
+313 mxvec_dotmul
+314 diag_mxC
+315 diag_mx_comm
+316 scalar_mxC
+317 scalar_mx_comm
+318 mul_mx_scalar
+319 mxtrace_mulC
+320 determinant_multilinear
+321 determinant_alternate
+322 det_tr
+323 det_perm
+324 det1
+325 det_mx00
+326 detZ
+327 det0
+328 det_scalar
+329 det_scalar1
+330 det_mulmx
+331 detM
+332 det_diag
+333 expand_cofactor
+334 expand_det_row
+335 cofactor_tr
+336 cofactorZ
+337 expand_det_col
+338 trmx_adj
+339 adjZ
+340 mul_mx_adj
+341 mul_adj_mx
+342 adj1
+343 mulmx1C
+344 mulmx1_min
+345 det_ublock
+346 det_lblock
+347 unitmxE
+348 unitmx1
+349 unitmx_perm
+350 unitmx_tr
+351 unitmxZ
+352 invmx1
+353 invmxZ
+354 invmx_scalar
+355 mulVmx
+356 mulmxV
+357 mulKmx
+358 mulKVmx
+359 mulmxK
+360 mulmxKV
+361 det_inv
+362 unitmx_inv
+363 unitmx_mul
+364 trmx_inv
+365 invmxK
+366 mulmx1_unit
+367 intro_unitmx
+368 invmx_out
+369 detV
+370 unitr_trmx
+371 trmxV
+372 perm_mxV
+373 is_perm_mxV
+374 GL_1E
+375 GL_VE
+376 GL_VxE
+377 GL_ME
+378 GL_MxE
+379 GL_unit
+380 GL_unitmx
+381 GL_det
+382 scalemx_eq0
+383 scalemx_inj
+384 det0P
+385 map_mx_inj
+386 map_mx_is_scalar
+387 map_unitmx
+388 map_mx_unit
+389 map_invmx
+390 map_mx_inv
+391 map_mx_eq0
+392 cormen_lup_perm
+393 cormen_lup_correct
+394 cormen_lup_detL
+395 cormen_lup_lower
+396 cormen_lup_upper
diff --git a/contrib/ML4PG/libs/ssreflect/advance/matrix_tactics.csv b/contrib/ML4PG/libs/ssreflect/advance/matrix_tactics.csv
new file mode 100644
index 00000000..6b82eaa4
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/matrix_tactics.csv
@@ -0,0 +1,395 @@
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;102103;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;104105106107.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;11;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;8;1;-4;-4;106;6;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;11;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108113;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108113;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;1212;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;1212;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;115;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;116;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;12;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
+0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;105;7;1;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;107;7;1;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;104;7;1;-4;0;0;7;1;-4;4;242143108;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-444;104;7;1;-4;0;0;7;1;-4;4;242143108;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108124;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108126;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108127;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;0;-111;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;128;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;0;-111;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;131132133134.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;11;77;2;-12;0;-1;67677;5;0;0;0;0;0;-4;0;104;14;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.361081151371241e+23;6767;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;138131139;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;140;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;141;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;142;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;144;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;145;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.4610812314812414e+26;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;131151152153.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;154;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.3610811510812316e+38;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;138158159;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;134160;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;126123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;161162;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;126124;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;161163;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;127123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;164162;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;127124;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;164163;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;165166167168169.03;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;174175176;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;177178179180177.0;1466;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;184185;1516;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;136108184186.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;12;1;0;0;0;0;0;0;0;0;0;0;-4;4;108187;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;-4;0;105;12;1;0;0;0;0;0;-4;0;0;12;1;-4;4;187108;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;-4;4;184186184186.0;66;2;8;0;1;17;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;188;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;189187124190191.03;677;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;188;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;18;1;0;0;0;0;0;0;0;0;0;0;-4;4;108193;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;19;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;19;1;0;0;0;0;0;0;0;0;0;0;-4;4;108194;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;20;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;20;1;0;0;0;0;0;0;0;0;0;0;-4;4;108195;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;21;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;21;1;0;0;0;0;0;0;0;0;0;0;-4;4;108196;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;197108198;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;23;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;23;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202203;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202203;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;207208;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;209210;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;-4;109119;6;1;-4;-4;120;6;1;0;0;0;0;0;-4;0;211214215215214.0;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;216203;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108217;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108218;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;219220;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108221;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108222;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108223;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108224;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;24;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444444;1.0e+INF;666666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;25;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;25;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;25;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108149;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;233234;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108235122108238.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108235122108238.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108235122108.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108235122108.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108236;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;237238;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;239240;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;108241242;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;225226108215.01;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+-6;-6;-11;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;247248;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108241;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;249227;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;247250108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;252253254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;256112113108257.03;26267666;6;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;123;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;123;27;1;0;0;0;0;0;0;0;0;0;0;-4;0;203;27;1;8;0;1;27;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;111108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0826313711326414e+17;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.0810826526610827e+20;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;108228124268.01083;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;108228124268.01082;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108270108271.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108270108272.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108273108222.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108273108223.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;274275;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;276277;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;279274;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;281276;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;24;1;0;0;0;0;0;0;0;0;0;0;-4;44;108265224108.0;246;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;108226108215221.02;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;282283;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108225108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;-4;0;124;6;1;0;0;0;0;0;-4;44;1.0e+INF;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;290215;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;290124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;444444444;1.0e+INF;67;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;-4;0;124;7;1;0;0;0;0;0;-4;444444444;1.0e+INF;67;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;292108241;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;247292108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;293249;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;293254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;247294108227.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108295108296.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;297298;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;297299;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;300301298;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;302300301300302.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;303299;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;301120297305302.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;306299;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;304308;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;26;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;310311;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;126126;6;1;0;0;0;0;0;-4;0;0;7;1;-4;0;3.123123133043083e+20;286;2;8;80;11;2828;2;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;126126;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;306313315306.0;66;2;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;4444;298303316121304.06;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108238;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108319285;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0831928510814815e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108149108143.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;66;2;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0832114910810816e+26;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108322319;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;323324;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0832223822812427e+17;666667;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;328329330;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;331302332333.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;334301332333.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;331302335336229.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108108337.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108108338.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0833912312612413e+17;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;340341;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;177341342;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;340342;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;340343;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;2.3323434410822533e+20;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;347348;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;347348;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;347348;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;274349;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-22;-253;-111;7;1;-4;0;-1;6;1;0;0;0;0;0;-4;0;119119;77;2;0;0;0;0;0;-4;0;0;7;1;-4;4444444;1.0e+INF;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-22;-253;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;353273108;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108215;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;247355251;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;357356;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;339358;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;109114109;27;1;0;0;0;0;0;0;0;0;0;0;-4;4;108359;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;29;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+-6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;363364;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;365;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;666;3;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0836636710836624e+29;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;369311;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108370;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;108371108370.0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108372;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108373;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108373;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;374375;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108372;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108372;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;371108;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;371370377378108.0;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;370377379380381.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108382;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;383384385;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;108389390108.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;392390393;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;394108395;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;396345396349.0;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;25;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;397;25;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-22;-253;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;119;7;1;0;0;0;0;0;0;0;0;0;0;-4;4444;350282347350.0;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-22;-253;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;119;7;1;0;0;0;0;0;0;0;0;0;0;-4;4444;350282346350.0;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;346348;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0e+INF;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;403108395;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;30;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;396246293345.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;30;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;405293;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108266108;666;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;129130130;777;3;0;0;0;0;0;-4;0;4.062652734072264e+20;76666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-24;-11;7;1;-12;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;4.1019527029541414e+35;66677666;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;295418295108364.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;133;6;1;-4;-4;120;6;1;-4;0;0;6;1;-4;444;1.0e+INF;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;310421422;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;262262423;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;2.6540710742427312e+17;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;425426427269.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;227249426423227.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;-4;4;1.0e+INF;6.667666666666666e+17;18;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109133109120.0;272766;4;-4;-4;135136121;2767;3;-4;0;0;7;1;-4;44444;226194228124.01953;6666676;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-20;0;-1;5;1;-2;0;-1;6666;4;0;0;0;0;0;-4;0;133133;67;2;-4;-4;138;7;1;-4;0;0;7;1;-4;0;3.9802364433644445e+27;667666666666617.0;14;8;80;11;1717;2;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;4.524532654074101e+17;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;24;1;0;0;0;0;0;0;0;0;0;0;-4;4;107455456457108.0;6624;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;345426407224.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;457458459108.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108459;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108460;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.0846145810810847e+44;6666666;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;396464465457246.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;423466301;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-84670692;1.0e+INF;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;0;-111111;777;3;0;0;0;0;0;0;0;0;0;0;-4;0;111;7;1;0;0;0;0;0;-4;0;120;7;1;-4;0;1.562354752602562e+20;777727;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;-6;0;-1;6;1;-4;0;104;6;1;-4;-4;102;6;1;0;0;0;0;0;-4;4;4.2322110848119425e+23;66666666;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;457174489490457.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;491423492;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;491421493494492.0;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;491457;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;491426495493.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;423496254497498.0;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;491426495124.0499;7246666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;509260499261.051;242424242424.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;513349466249514.0;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;513397465249514.0;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;283515302;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;283516302;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;283516301;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;283515301;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;5.175125184385165e+20;2424;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;491521522;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;495438;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;155345464523457.0;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;32;1;-4;0;-1;32;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;517515516525.0;326;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;118;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;526474527;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;1;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;242144124;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;221312314310.0;2424;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;126126;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;530531532531532.0;2424;2;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;27;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;27;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;491124536;2727;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;-4;109109104109.0;666;3;-4;-4;141;6;1;0;0;0;0;0;-4;4;425215108538539.0;67;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;-1650;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;541542124.0543544;727;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-12;0;-1;6;1;-6;0;-1;33;1;-4;0;1.041091091051051e+17;66272433;5;-4;-4;143144120145.0;663327;4;-4;0;0;33733;3;-4;0;1.0e+INF;6.273333246666356e+30;22;8;808080;1111;33343333;4;0;0;0;0;0;0;0;0;0;0
+-15;-150;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;-4;-4;146;6;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108374236;77;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;491379569570.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;571572573379574.0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;236;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;27;1;-2;0;-1;27;1;0;0;0;0;0;-4;-4;114;27;1;-4;0;0;7;1;-4;0;577;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100100;277;2
+0;0;0;0;0;0;0;-1;376;2;-2;0;-1;36;1;-4;0;107;6;1;-4;-4;114;37;1;0;0;0;0;0;-4;0;2.2122457958058158e+178;366666666;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;6;1;-2;0;-1;6;1;0;0;0;0;0;-4;-4;114;6;1;0;0;0;0;0;-4;0;423590423221.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;7777;4;-2;0;-1;7;1;0;0;0;0;0;-4;-4;114;7;1;0;0;0;0;0;-4;44;1.1111110810836611e+23;7777;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;-1;777;3;-2;0;-1;7;1;0;0;0;0;0;-4;-4;114;7;1;0;0;0;0;0;-4;0;111108366108366.0;777;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
diff --git a/contrib/ML4PG/libs/ssreflect/advance/series.csv b/contrib/ML4PG/libs/ssreflect/advance/series.csv
new file mode 100644
index 00000000..c64eeb0d
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/series.csv
@@ -0,0 +1,22 @@
+3,1,-6,-1,6,2,7770,4,4440,1021031040.0,6,1,11,2,-27,-11,7,1,777,3,444,105106107,6,1,6,0,0,0,0,0
+3,1,-6,-1,6,2,7770,4,4440,1021031040.0,6,1,11,2,-27,-11,7,1,77770,5,44440,1051061070.0,6,1,6,0,0,0,0,0
+3,1,-6,-1,6,2,77777700,8,44444400,108104103103104.0,6,1,11,2,-27,-11,7,1,77770,5,44440,1051061070.0,6,1,6,0,0,0,0,0
+3,1,-6,-1,6,2,7777770,8,4444440,1082321090.0,6,2,-151770,6,646440,-11181104110.0,7,1,1,1,-2,-1,7,1,777,3,444,111124107,7,1
+3,1,-6,-1,6,2,7777770,8,4444440,1082321090.0,6,2,-151770,6,646440,-11181104110.0,7,1,1,1,-2,-1,7,1,777,3,444,111124107,7,1
+3,1,-6,-1,6,2,7777770,8,4444440,1082321090.0,6,2,-151770,6,646440,-11181104110.0,7,1,1,1,-2,-1,7,1,777,3,444,111124107,7,1
+3,1,-6,-1,6,2,77770,5,44440,103102103114.0,6,1,11,2,-27,-11,7,1,777,3,444,105106107,6,1,6,0,0,0,0,0
+5,1,-4,109,6,1,77770,5,44440,115116117118.0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+70,2,40,1190,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-31,2,-66,-11,6,2,70,2,40,1030,6,1,777777,6,444444,1.2010512112212312e+17,6,1,7017,3,-4064,-118011,6,1,70,2,40,1180,6,0
+6,2,1070,4,6040,-101180,7,1,6,1,7,1,4,125,6,1,7,1,4,118,6,1,0,0,0,0,6,1,77,2
+77770,5,44440,1311321330.0,6,1,77,2,44,147134,6,1,7777,4,4444,136128135136.0,6,1,77,2,44,129105,6,1,6,1,5,1,-4,150
+6,1,770,3,440,1441370,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7,1,4,135,6,1,-1757,4,-444,-11181091,6,1,770,3,440,0,6,1,6,1,-750770,6,440440,14510901146.0,7,0,0,0,0,0
+-175,3,-844,-1147150,6,2,-1517770,7,8484440,-11091148149.0,6,1,7770,4,4440,1481500,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1111,4,-2997,-1111,7,1,6,1,6,1,770,3,440,1511520,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-7,-1,7,1,6,1,777770,6,444440,153154155156157.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3777,4,6444,-1157153,6,1,1177,4,2744,-11158,7,1,770,3,440,1551070,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-4,109,11,1,77770,5,44440,115116117118.0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+287,3,2104,-10159,7,1,11,2,-29,-11,7,1,2,1,-6,-1,7,2,777,3,444,124135,7,2,12,2,-77771,5,44440,-160161124129.01
+-1111,4,-10112,-1111,7,1,8,1,-9,0,13,1,70,2,40,1560,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+-11,2,-90,-11,6,1,2117,4,2604,-111159,7,1,11,2,-29,-11,7,1,2,1,-2,-1,7,2,777,3,444,124135,7,2
diff --git a/contrib/ML4PG/libs/ssreflect/advance/vector.csv b/contrib/ML4PG/libs/ssreflect/advance/vector.csv
new file mode 100644
index 00000000..18f6b2c4
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/vector.csv
@@ -0,0 +1,236 @@
+9;1;-4;103;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;104105;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+40;2;0;0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;104106;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1071061080.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5720;4;4480;-109010;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+147700;6;844400;-111011100;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;112;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-41777770;8;48444440;-1311115112126132.0;17;1;1177780;7;844480;-1112612400.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;138;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;139;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;140;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;141;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;142;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;143;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5870;4;41140;10601440;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-411;3;-4133;-14511;17;2;777770;6;444440;1461121240.0;7;1;77770;5;44440;1461121050.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;109;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11111555511.0;12;888884444.088;-11111109109.010912;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1150;4;8840;-111110;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+551770;6;440440;-10812211147.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-41140;4;48840;-131111490;17;1;11;2;-14;-11;7;1;87770;5;84440;1151051500.0;25;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;151;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1521531540.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5557770;7;4444440;12210911311.0155;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1561570;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;158;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1591600;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77777770;8;44444440;1.6115916216316415e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1661670;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7740;4;4440;1661680;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1661690;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1661700;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1157770;7;8844440;-11111166171172.0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11157770;8;88844440;-111111166173172.0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77740;5;44440;1131661740.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+740;3;440;1751760;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+150;3;840;-11150;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1550;4;8440;-11161170;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1550;4;8440;-11151170;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1550;4;8440;-11151180;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1550;4;8440;-11161180;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77740;5;44440;115112177178.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-411119;6;-488884;-1311111179.0;17;1;7777;4;4444;115112124;7;1;770;3;440;1770;25;1;8877700;7;88844400;15918000;25;0;0;0;0;0;0;0
+-1057770;7;8044440;-101201181182.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-41111;5;-416165;-1311111;7;2;440;3;440;183184185186.0;2;1;777700;6;444400;1531871840.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
+1511550;7;8488440;-112111122123.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4119;4;-4884;-13111188;7;1;7777;4;4444;115189124;7;1;-770810;6;44010100;-1230110;7;1;770;3;440;1591800;15;0;0;0;0;0;0;0
+7770;4;4440;1901910;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7740;4;4440;1901920;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1901930;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1901940;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1157770;7;8844440;-11111190195172.0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11157770;8;88844440;-111111190196172.0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7740;4;4440;1901740;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+740;3;440;1971980;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+150;3;840;-11260;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1550;4;8440;-11261170;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1550;4;8440;-11271170;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1550;4;8440;-11271180;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1550;4;8440;-11261180;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1461990;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+740;3;440;2002010;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+15790;5;84440;-1111202128.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7740;4;4440;1751972030.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+14770;5;84440;-1183181204.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-41111;5;-416165;-1311111;7;2;770;3;440;1832050;2;1;777700;6;444400;1581991840.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
+5777777;7;4444444;1.1116611111811216e+20;14;1;9;1;-4;207;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5777770;7;4444440;129163190111119.0;14;1;770;3;440;2081170;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1122090;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5777770;7;4444440;129163190111119.0;14;1;770;3;440;2101170;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5777;4;4444;111166118112.0;14;1;9;1;-4;130;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2112122130.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1632140;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777777700.0;10;444444400;2151161170.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1562160;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777770;6;444440;217218219116.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;220;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;221;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+740;3;440;1522220;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5555570;7;4444440;122118109132133.02;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;2232172240.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2172250;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2172260;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+177770;6;844440;-1227228229103.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7777740;7;4444440;217163112230.0;33;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77;2;44;231232;6;1;70;2;40;2330;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77;2;44;234235;15;1;470;3;440;2362370;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;216;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;235;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-721110;6;428617380;-23911110;35;1;-7311111111.0;11;48824092365.0;-1111111110.0;2;1;470;3;440;2402412300.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
+777770;6;444440;242150143243244.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77777770;8;44444440;166245246190163.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7740;4;4440;2472481140.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-437369287;11;430369810;-24937369287.0;7;2;55777777;8;44444444;1.2812211250251252e+19;6;2;-51777777;8;40444444;-1.0912542502552563e+21;7;2;77777770;8;44444440;2.5016122820025824e+200;15;1;575111;6;-4441315;-109162109111.0;14;1
+77777040;8;44444040;2392632450.0264;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4111111111.0;10;-4238374491.0;-265111111111.0;7;2;577777777.0;10;4444444440.0;1.0916126620013427e+230;14;2;-2959640470.0;12;4444444440.0;100;15;1;5751;4;-44413;-1091621091.0;14;1;7777;4;4444;200161124;7;1
+-4373692871.0;12;-4136809560.0;-277373692871.0;7;0;55155511;8;-44044480;-1221371109113109.0;6;0;7777777;7;4444444;2.502721242551252e+17;7;0;-7777770411.0;11;4444440488.0;-250255124270276.03;15;0;5777;4;4444;109268278235.0;14;0
+7;1;7777700;7;4444400;115112279107.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2802470;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1122810;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-741110;6;4413280;-1122821110.0;17;2;-5770;4;4440;1391071150.0;36;1;77770;5;44440;107115283284.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
+155110;6;844880;-1140141110.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+147777070;9;844444040.0;-1285286124287.0288;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+55;2;-44;112118;14;2;511777700;9;488444400;-14011289146182.0;15;1;7517770;7;4484440;-2901421146280284.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2912920;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2912930;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2912940;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2912950;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77777;5;44444;115129112124298.0;7;1;7770;4;4440;1272991060.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;3002290;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77720;5;44400;-30123410;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17770;5;84440;-13023030;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+6;2;7777550;7;4444440;304301124143144.0;7;1;6;1;777777770.0;9;444444440;3.0530623914929124e+170;7;1;777770;6;444440;307308309290310.0;7;0;0;0;0;0;0;0;0;0
+777740;6;444400;3111491240.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7411111;7;-4416140;-31213111111.0;7;2;-295964047;9;444444444;3.133141253153163e+23;6;2;5577770;7;4444440;1.4614731831932012e+170;6;1;75111;5;-441920;-321148111;15;1;5177777700.0;10;4844444400.0;-100;6;0
+7777;4;4444;312124125;7;1;777777770.0;10;4444444400.0;100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+177777770;10;1544444440.0;-1123181126327235.0;7;1;777777770.0;9;444444440;3.282733291241253e+170;6;1;77777700;9;44444400;126327330331.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+777777770.0;10;444444440;3.1124323929523925e+170;6;1;777;3;444;332165291;6;0;70;2;40;1130;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;3331240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;3331240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7;1;4;334;7;1;9;1;-4;335;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7777770;7;4444440;333304336301234.0;6;1;2007;3;217004;-100151;6;1;777;3;444;149150337;6;1;77770;5;44440;187147154146.0;6;0;0;0;0;0;0;0
+-210770;6;2292220440.0;-1103100;6;1;-3111077;7;221520044;-11110338339.0;6;1;77770;5;44440;340341342195.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;3433443450.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110777;8;815200444.0;-11110340124.0;7;1;777700;6;444400;14912400;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77777;5;44444;346124347348.0;7;1;7;1;-8111;4;-23808;-1111;7;2;-777741;6;-4444410;-349350348124.01;14;2;7777700;7;4444400;3513523530.0;14;1;777777770.0;11;444444440;351352354348.0
+7;1;7;2;-1117741;7;-136444410;-111356357124.01;7;2;777700;6;444400;3583591360.0;14;1;-811;3;-25150;-111;7;1;557777770.0;9;444444440;1.3914436036112412e+200;7;1;77770;5
+110;3;2310;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+10;2;210;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5740;4;4440;15713660;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;3002353380.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17777700;8;4444400;-1301235304.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-540;3;400;15900;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5570;4;4440;15714110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-155;3;-1544;-1118118;7;1;-2959640470.0;11;4444444440.0;100;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+117740;6;2314440;-11111300;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5511777;7;44101444;-118122111371143.0;6;1;111;3;-2265;-111;7;1;77777770;8;44444440;143371372148240.0;4;1;770;3;440;2403730;4;0;0;0;0;0;0;0
+19;2;-154;-1334;7;1;540;3;440;1603740;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7777;4;4444;312129113;15;1;15;2;517770;6;484440;-1611107375105.0;14;1;7770;4;4440;3763771720.0;15;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;378;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;379380;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;3810;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777777770.0;10;444444440;239382124383.0;7;1;7;1;4;381;15;1;555110;6;444880;-10911310911.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
+1177;4;16244;-11382;7;1;15;1;7777770;7;4444440;124235384124.0;15;1;577770;7;444440;1641243850.0;15;1;5170;4;4840;-113110;6;0;0;0;0;0
+777700;7;444400;38610600;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1551;4;-264414;-11291611;7;1;777700;6;444400;1071053870.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77;2;44;388388;24;1;55177700;8;44844400;-1291611107389.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+151777700;9;848444400.0;-11651390390393.0;40;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;3900;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;390;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5177070;7;4844040;-16513900116.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5177070;7;4844040;-16513900177.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5177070;7;4844040;-16513900402.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+517700;6;484400;-165139000;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5177070;7;4844040;-16513900126.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+740;3;440;1124030;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+57770;5;44440;1091520;14;1;7770;4;4440;1051124040.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;4051160;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17770;5;84440;-1146405406.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4119;4;-4884;-13111407;17;1;77777;5;44444;146112124;7;1;8777770;7;24444440;105408409106.0;25;1;777770;6;444440;146112105180.0;15;0;0;0;0;0;0;0
+57517;5;-44404;-1091621091.01;14;1;770;3;440;3901380;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+577770;6;444440;1091521180.0;43;1;770;3;440;1124040;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;410;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;199406204411.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;158;15;1;70;2;40;1830;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7774170;7;4444840;-291412413124.01404;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4140;3;4840;-13114140;17;1;44;2;777777080.0;10;444444080;390390161250.0;7;1;-415515;6;-42744244;-1494151109165.011;15;1;77777770;8;44444440;2.504164171614184e+200;15;0;0;0;0;0
+51770;5;424440;-16513900;6;1;777700;6;444400;1052991800.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5770;4;4440;1674204210.0;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77777;5;44444;231112215;6;1;70;2;40;1130;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777770;6;444440;161146162422405.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+755;3;-444;211139115;14;1;70;2;40;1830;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7777770;7;4444440;119109119112.0;6;1;770;3;440;1074230;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;4241242290.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;2;-204;-1118;7;1;777777770.0;9;444444440;3.6042534736842626e+170;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-74111111;8;-442964294;-162427111111.0;17;2;577770;6;444440;109250161428.0;14;2;7777700;7;4444400;429430431275.0;15;1;77770;5;44440;429161432116.0;7;0;0;0;0;0;0;0
+-5155519;7;-428444274;-1681122122109.0142;7;1;5110;4;4880;-109110;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;8440;-11524330;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-51147770;8;48844440;-168111434407419.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-515177700;9;484844400;-16911651390435.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+577777700.0;9;444444400;100;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1777700;7;8444400;-1434437419.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5177700;7;4844400;-1651390438.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;4394404410.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;4394424410.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;4394404430.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;4394424430.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7777770;7;4444440;425444124287.0;14;1;70;2;40;3900;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7;1;4;425;14;1;75170;5;44840;-4451701390.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;4464470;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;4484494500.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17777700;9;84444400;-1451406452.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+177770;6;1544440;-1453198454.0;7;1;14;1;777;3;444;455456425;14;1;7777707777.0;12;4444404444.0;444124457458.03906;14;1;470;3;440;4594584560.0;15;0;0;0;0;0
+5511;4;-4480;-12212211;6;2;77777700;8;44444400;460461411124.0;7;1;7;1;4;462;15;2;77770;5;44440;200463407419.0;15;1;777777770.0;10;4444444400.0;100;15;0
+77777700;8;44444400;146112105465.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;466;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;4670;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;466;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-577777777.0;9;444444444;1.0923114611221512e+17;7;1;77700;5;44400;46810600;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-50740;5;40440;175014660;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-577777777.0;9;444444444;1.0923114611221512e+17;7;1;7777700;8;4444400;1774691060.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;470471;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;472471;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7;1;4;473;15;1;7770;4;4440;2602694660.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5155179;7;-41344844;-1761167122.011474;14;1;87770;5;84440;4754074190.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5775;4;-4444;109371149118.0;14;2;777770;6;444440;476424477478479.0;15;1;517777740;9;484444440;-1091429480124.0481;2;0;0;0;0;0;0;0;0;0;0;0;0;0
+77700;5;44400;47248200;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+4770;4;4440;4701974820.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;4834840;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7440;4;4440;4854734820.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7;1;4;0;15;1;-31111077;8;6431344044.0;-111110390151.0;15;1;2077700;6;217044400;-1039048600.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
+777;3;444;369487;7;1;-3111110;7;53889370;-1111110;7;2;77770;5;44440;2921611240.0;7;1;7777;4;4444;294235124;7;1;-7770410;7;44404290;-4884840489.01;14;1
+440;3;440;4904910;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+4550;4;4440;4901461790.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;492;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;110;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;493;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+40;2;40;4750;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+190;3;840;-11800;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+47700;5;44400;11013600;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5177;4;4844;-1851508136.0;17;1;-4111800;6;414501300;-511111100;17;2;17770;5;84440;-1508512390.0;5;1;5170;4;4840;-18513900;14;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/vector_names b/contrib/ML4PG/libs/ssreflect/advance/vector_names
new file mode 100644
index 00000000..1ba1f9ae
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/vector_names
@@ -0,0 +1,236 @@
+1 r2vK
+2 r2v_inj
+3 v2rK
+4 v2r_inj
+5 b2mxK
+6 gen_vs2mx
+7 vs2mxK
+8 mx2vsK
+9 memvE
+10 vlineP
+11 mem0v
+12 memvN
+13 memvD
+14 memvB
+15 memvZ
+16 memv_suml
+17 memv_line
+18 subvP
+19 subv_refl
+20 subv_trans
+21 subv_anti
+22 eqEsubv
+23 subvPn
+24 sub0v
+25 subv0
+26 memv0
+27 subvf
+28 memvf
+29 memv_pick
+30 vpick0
+31 subv_add
+32 addvS
+33 addvSl
+34 addvSr
+35 addvC
+36 addvA
+37 addv_idPl
+38 addv_idPr
+39 addvv
+40 add0v
+41 addv0
+42 sumfv
+43 addvf
+44 memv_add
+45 memv_addP
+46 sumv_sup
+47 subv_sumP
+48 memv_sumr
+49 memv_sumP
+50 subv_cap
+51 capvS
+52 capvSl
+53 capvSr
+54 capvC
+55 capvA
+56 capv_idPl
+57 capv_idPr
+58 capvv
+59 cap0v
+60 capv0
+61 capfv
+62 capvf
+63 memv_cap
+64 memv_capP
+65 vspace_modl
+66 vspace_modr
+67 bigcapv_inf
+68 subv_bigcapP
+69 addv_complf
+70 capv_compl
+71 diffvSl
+72 capv_diff
+73 addv_diff_cap
+74 addv_diff
+75 dimv0
+76 dimv_eq0
+77 dimvf
+78 dim_vline
+79 dimvS
+80 dimv_leqif_sup
+81 dimv_leqif_eq
+82 eqEdim
+83 dimv_compl
+84 dimv_cap_compl
+85 dimv_sum_cap
+86 dimv_disjoint_sum
+87 dimv_add_leqif
+88 diffv_eq0
+89 dimv_leq_sum
+90 directvE
+91 directvP
+92 directv_trivial
+93 dimv_sum_leqif
+94 directvEgeq
+95 directv_addE
+96 directv_addP
+97 directv_add_unique
+98 directv_sumE
+99 directv_sum_independent
+100 directv_sum_unique
+101 memv_span
+102 memv_span1
+103 dim_span
+104 span_subvP
+105 sub_span
+106 eq_span
+107 span_def
+108 span_nil
+109 span_seq1
+110 span_cons
+111 span_cat
+112 coord_span
+113 nil_free
+114 seq1_free
+115 perm_free
+116 free_directv
+117 free_not0
+118 freeP
+119 coord_free
+120 coord_sum_free
+121 cat_free
+122 catl_free
+123 catr_free
+124 filter_free
+125 free_cons
+126 freeE
+127 freeNE
+128 free_uniq
+129 free_span
+130 linear_of_free
+131 span_basis
+132 basis_free
+133 coord_basis
+134 nil_basis
+135 seq1_basis
+136 basis_not0
+137 basis_mem
+138 cat_basis
+139 size_basis
+140 basisEdim
+141 perm_basis
+142 vbasisP
+143 vbasis_mem
+144 coord_vbasis
+145 span_bigcat
+146 bigcat_free
+147 bigcat_basis
+148 lfunE
+149 fun_of_lfunK
+150 lfunP
+151 lfun_addN
+152 zero_lfunE
+153 add_lfunE
+154 opp_lfunE
+155 sum_lfunE
+156 scale_lfunE
+157 id_lfunE
+158 comp_lfunE
+159 comp_lfunA
+160 comp_lfun1l
+161 comp_lfun1r
+162 comp_lfun0l
+163 comp_lfun0r
+164 comp_lfunDl
+165 comp_lfunDr
+166 comp_lfunNl
+167 comp_lfunNr
+168 comp_lfunZl
+169 comp_lfunZr
+170 limgS
+171 limg_line
+172 limg0
+173 memv_img
+174 memv_imgP
+175 lim0g
+176 limg_add
+177 limg_sum
+178 limg_cap
+179 limg_bigcap
+180 limg_span
+181 lfunPn
+182 inv_lfun_def
+183 limg_lfunVK
+184 lkerE
+185 memv_ker
+186 limg_ker_compl
+187 limg_ker_dim
+188 limg_dim_eq
+189 limg_basis_of
+190 lker0P
+191 limg_ker0
+192 eq_limg_ker0
+193 lker0_lfunK
+194 lker0_compVf
+195 lker0_limgf
+196 lker0_lfunVK
+197 lker0_compfV
+198 lker0_compVKf
+199 lker0_compKf
+200 lker0_compfK
+201 lker0_compfVK
+202 lim1g
+203 limg_comp
+204 lpreim_cap_limg
+205 lpreim0
+206 lpreimS
+207 lpreimK
+208 memv_preim
+209 memv_pi
+210 memv_proj
+211 memv_pi1
+212 memv_pi2
+213 daddv_pi_id
+214 daddv_pi_proj
+215 daddv_pi_add
+216 projv_id
+217 projv_proj
+218 memv_projC
+219 limg_proj
+220 lker_proj
+221 addv_pi1_proj
+222 addv_pi2_id
+223 addv_pi2_proj
+224 addv_pi1_pi2
+225 memv_sum_pi
+226 sumv_pi_uniq_sum
+227 sumv_pi_sum
+228 sumv_pi_nat_sum
+229 subvsP
+230 subvs_inj
+231 congr_subvs
+232 vsval_is_linear
+233 vsprojK
+234 vsvalK
+235 vsproj_is_linear
+236 vsolve_eqP
diff --git a/contrib/ML4PG/libs/ssreflect/advance/vector_tactics.csv b/contrib/ML4PG/libs/ssreflect/advance/vector_tactics.csv
new file mode 100644
index 00000000..ac47e370
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/vector_tactics.csv
@@ -0,0 +1,273 @@
+0;0;0;0;0;-4;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;80;11;117;2;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;107106108;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-8;0;-1;14;1;0;0;0;0;0;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;111;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;16;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;113111;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;115105;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;116117;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;118111;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;119111;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;120;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108107;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;121;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;122123125126106.0;147;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;127128;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;129112130;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;18;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;4444;115112126132.01262;177;2;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;100;1915;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;20;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;20;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;21;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;15;1;0;0;0;0;0;0;0;0;0;0;-4;0;144;15;1;8;0;1;15;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;1.461121241461121e+17;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
+-8;-8888;-11111;22;1;0;0;0;0;0;0;0;0;0;0;-4;-4;109110;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-8;-11;23;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;108122;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;147;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;112118109;244;2;0;0;0;0;0;0;0;0;0;0;-4;0;148;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;44;115105150;25;1;8;0;1;25;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;152153154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;122109113;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;155;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;156157;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;159160;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.6115916216316416e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;166167;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;166;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;166169;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;166170;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-8;-11;26;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;26;1;0;0;0;0;0;0;0;0;0;0;-4;44;166171172;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-88;-111;27;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;27;1;0;0;0;0;0;0;0;0;0;0;-4;44;166173172;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;113166;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;175;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;28;1;0;0;0;0;0;0;0;0;0;0;-4;0;115;28;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;29;1;0;0;0;0;0;0;0;0;0;0;-4;-4;116117;29;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;30;1;0;0;0;0;0;0;0;0;0;0;-4;-4;115117;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;-4;-4;115118;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;32;1;0;0;0;0;0;0;0;0;0;0;-4;-4;116118;32;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;115112177;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;1.1511212417715918e+17;72525;3;8;80;11;2525;2;0;0;0;0;0;-4;0;100;17;1
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;181182;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;153187184;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;121122123;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;1.1518912412315918e+17;7715;3;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;190191;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;190;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;190193;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;190194;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-8;-11;26;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;26;1;0;0;0;0;0;0;0;0;0;0;-4;44;190195172;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-88;-111;27;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;27;1;0;0;0;0;0;0;0;0;0;0;-4;44;190196172;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;190;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;197;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;28;1;0;0;0;0;0;0;0;0;0;0;-4;0;126;28;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;-4;-4;126117;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;32;1;0;0;0;0;0;0;0;0;0;0;-4;-4;127117;32;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;29;1;0;0;0;0;0;0;0;0;0;0;-4;-4;127118;29;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;30;1;0;0;0;0;0;0;0;0;0;0;-4;-4;126118;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;146199;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;200;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;202;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;175197;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;181204;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;183205158199184.0;215;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;111;14;1;0;0;0;0;0;0;0;0;0;0;-4;44444;1.6611111811215722e+17;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;14;1;0;0;0;0;0;0;0;0;0;0;-4;4444;163190111119.0208;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;112209;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;14;1;0;0;0;0;0;0;0;0;0;0;-4;4444;163190111119.02103;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;111;14;1;0;0;0;0;0;0;0;0;0;0;-4;44;166118112;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;211212213;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;163214;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;215116117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;156216;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;217218219116.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;152;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4444;122118109132133.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;223217224;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;217225;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;217226;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;227228229103.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;217163112;33;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;231232233;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;234235237;1515;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-2;0;-1;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;166;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;189;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;9;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;-2;0;-1;35;1;-8;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2390230;35215;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;242150143243244.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;166245246190163.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;247248;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;128122109109.0;61414;3;-4;-4;109;7;1;0;0;0;0;0;-4;444;250251252253.02;67151415;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;2.3918924518919025e+20;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;239263245;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109109109;141414;3;-4;0;136;7;1;0;0;0;0;0;-4;4444444;1.6126620013425825e+201;14151471414715.0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-8;11;15;1;0;0;0;0;0;0;0;0;0;0;-4;-4;1.221371091131091e+17;6614;3;-4;-4;114;7;1;0;0;0;0;0;-4;444444;100;71514;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;115112279107.0;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;280247;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;112281;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;36;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.1210711510711529e+20;173615;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;140141;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;286124287288.0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;112118140142.0;141515;3;0;0;0;0;0;0;0;0;0;0;-4;444;2.891461822901463e+20;151515;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;291292;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;291293;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;291294;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;291295;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;136296297128.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;115129112124298.02;714;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;300229;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;301234;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;302303;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;143144;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;100;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;311149124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;146147148149.0;6156;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;766156;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;3.121241253233243e+29;776;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;123181126327235.03;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;100;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;333124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;333124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;334;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-21;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;333304336301234.0;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-22;0;-1;6;1;-22;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;3.1033833934034135e+20;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;343344345;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;340124149124.0;715;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;346124347348.0349;7141466;5;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+-11;-264;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;139144;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;3.5635735835913635e+29;7147714141414.0;8;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;157;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;300235338;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;301235304;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;159;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;157141;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444444;3.6733336836923536e+20;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;118122;6;1;0;0;0;0;0;-4;0;0;7;1;-4;4;3.7114314337137217e+20;644;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;160;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;161;14;1;0;0;0;0;0;0;0;0;0;0;-4;444;3.121291131073751e+26;151415;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;381;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;109113109;15;1;0;0;0;0;0;0;0;0;0;0;-4;4444444;239382124383.0381;715;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;-12;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;164113;156;2;0;0;0;0;0;0;0;0;0;0;-4;4;382124235384124.0;71515;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;386106;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-26;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;129161;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;107105387;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;129161;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;388388107389.0;246;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-88;-111;37;1;0;0;0;0;0;0;0;0;0;0;-4;0;165;37;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390391;37;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-8;-11;38;1;0;0;0;0;0;0;0;0;0;0;-4;0;165;38;1;0;0;0;0;0;0;0;0;0;0;-4;44;390260;38;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;-4;0;165;39;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390392;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;40;1;0;0;0;0;0;0;0;0;0;0;-4;0;165;40;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390393;40;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;390;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390358;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;390144;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390394;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390359;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;14;1;0;0;0;0;0;0;0;0;0;0;-4;444;1.363953901363964e+20;1414146;4;8;0;1;41;1;0;0;0;0;0;-4;0;100;42;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390116;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390177;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390402;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;14;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;14;1;0;0;0;0;0;0;0;0;0;0;-4;4;390126;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;112;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;-4;44;152105112404.0;1415;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;405116;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;146405406;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;1.4611212410540841e+20;72515;3;8;0;1;25;1;0;0;0;0;0;-4;0;100;17;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109109;1414;2;0;0;0;0;0;0;0;0;0;0;-4;0;162390138;1415;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;43;1;0;0;0;0;0;0;0;0;0;0;-4;444;152118112404.0;4315;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;199406204411.0;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;183;15;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;291412413405.0;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;109165109;1515;2;0;0;0;0;0;0;0;0;0;0;-4;44444;390390161250.02;715;2;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390105299180.0;614;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;420421;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;231112215113.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;161146162422405.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;139115;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;211183;1415;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;119109119112.01074;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;424124229;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-20;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;3.6042534736842624e+17;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.6225016142842943e+23;1714157;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;122122109109.0;72;2;-4;-4;168;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;152433;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;168;7;1;0;0;0;0;0;-4;44;434407419;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;7;1;-4;-4;169;7;1;0;0;0;0;0;-4;44;390435;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;-4;44444;371158426114436.0;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;434437419;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;390438;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;439440441;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;439442441;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;439440443;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;439442443;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;425444124287.039;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;170;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;425445390;141414;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;446447;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;448449450;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;451406452;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;4.531984544554564e+29;714141415.0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;460461411124.0462;7151515;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;109114;15;1;0;0;0;0;0;0;0;0;0;0;-4;444;390124116128464.0;157;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;146112105465.0;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;467;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;-4;4444444;231146112215124.03;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;175;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;-4;4444444;231146112215124.03;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;473260269466.0;1515;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;176167122;1414;2;0;0;0;0;0;0;0;0;0;0;-4;44;475407419;7;1;8;0;1;7;1;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109118109;14142;3;0;0;0;0;0;0;0;0;0;0;-4;4;3.711494764244775e+20;14152;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;472482;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197482;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;483484;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;485;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-21;0;-1;15;1;-4;0;-1;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;390151390486.0;151515;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-21;0;-1;7;1;-4;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;3.694872921611243e+32;777147;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;146179;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;136;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-88;-111;71245;3;0;0;0;0;0;0;0;0;0;0;-4;0;149149;745;2;0;0;0;0;0;0;0;0;0;0;-4;4;1.2813649412812849e+32;7141445615.0;6;8;80;11;4142;2;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;80;11;4146;2;0;0;0;0;0;-4;0;100;41;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;501502128503.0;4146;2;8;80;11;4146;2;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.0550450550610614e+17;414141;3;8;0;1;41;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;184185186184.0;14714;3;0;0;0;0;0;0;0;0;0;0;-4;4;136128508136128.05;146714;4;8;80;11;77;2;0;0;0;0;0;0;0;0;0;0
+-8;0;-1;5;1;0;0;0;0;0;0;0;0;0;0;-4;0;185185;1714;2;0;0;0;0;0;0;0;0;0;0;-4;4;5.081365085123904e+17;17514;3;8;0;1;17;1;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/vector_tree.csv b/contrib/ML4PG/libs/ssreflect/advance/vector_tree.csv
new file mode 100644
index 00000000..d6fe103a
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/advance/vector_tree.csv
@@ -0,0 +1,273 @@
+0;-4;0;100;0;0;0;0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;444444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-88888;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-88;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100;0;0;0;44;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-88;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-888;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;444444;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;44444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-88;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-888;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-4;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;-8;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;-44;-4;0;44444444444444.05;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;-4;-4;0;444444444444444.06;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-88;0;0;100100100;-44;-4;0;44444444444.044;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;4444444444.04444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;-44;0;0;44444444444.04444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;0;0;0;0;0;4444444444444.045;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-21;0;0;0;0;0;4444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-22;-22;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-8;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;44444444444.04444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1364;0;0;100;-44;0;0;444444444444.04443;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;0;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;0;100;-4;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-444;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-162;0;0;0;-4;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-26;0;0;0;-44;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-888;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-88;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;-4;0;0;4444444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;444444444444.0;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100100;-44;0;0;44444444444.0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-20;0;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;-4;0;0;4444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-444;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;-4;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;-4;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-15;0;0;100;0;0;0;444444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;444444444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;44444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;-4;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-21;-4;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-21;-4;100;0;0;0;4444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-888;0;0;100100;-4;0;0;44444;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;444444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4444444444444.0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;0;0;100;-4;0;0;444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/seq.csv b/contrib/ML4PG/libs/ssreflect/basic/seq.csv
new file mode 100644
index 00000000..c7a47a31
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/seq.csv
@@ -0,0 +1,394 @@
+20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21100;5;676600;-11100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1021030;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1051061070.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1051080;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1091051100.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1051110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1051110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211777;6;6766444;-111112113109.0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1117;4;9004;-111114;7;1;-3111117;7;66210084;-111111115;11;1;70;2;40;1160;11;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111190;7;66666640;-11111102103.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111100;7;66666600;-1111100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211070;6;676666040.0;-11101190;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21110;5;6676660;-11110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111190;7;66666640;-11111102103.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311110770;9;666666044.0;-111110120104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111090;7;66666040;-111101040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111090;7;66666040;-111101040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311111110;9;1102092000.0;-111111110;7;1;77777709;9;-44444404;122123124125.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311110;6;6266620;-111110;6;3;7770;4;4440;1021261270.0;6;2;770;3;440;1281290;6;1;7770;4;4440;1041301310.0;6;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311111077777.0;13;6266622044444.0;-1.1111101201041322e+180;12;1;-2107;4;97004;-110134;6;1;77700;5;44400;13513600;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+6;2;-41777;5;42444;-1051138139140.0;6;2;77020;5;440110;-141010;6;1;-4177;4;4244;-1051138142.0;6;1;770200;5;44011700;-1410100;6;1;7770;4;4440;1431441450.0
+-311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3110290;7;6660440;-111011060;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3110200;6;102004700;-1110100;6;1;777770;6;444440;147148149150151.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311102000;8;666609700.0;-111101000;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+409;2;-404;1070108;9;1;-31111070;8;66666040;-1111101040.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+590;3;440;1021080;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110270;8;66660440;-1111011540.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111020;7;6666040;-1111010;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111020077.0;10;666604700.044;-11110100104155.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;109;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20090;4;670040;-1001090;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111020;7;6666040;-1111010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111021090.0;11;666660476.04;-11110110111.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777027700.0;9;444044400;-10515901115.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1601591060.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110770;8;66660440;-11110104161.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;105162163164.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110770;8;66660440;-11110104165.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;105166167149.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;6440;-11681040;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;6440;-11681040;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11770;5;66440;-111601690;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11770;5;66440;-111701710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11770;5;66440;-111721710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311102000;8;666609700.0;-111101000;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+790;3;440;1731121130.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3110427700.0;10;666044440.0;-11101141177.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777777090.0;9;444444040;172148151124.0115;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077;7;10212044;-11110149104.0;6;1;20020;4;470040;-10010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1601790;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1601800;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110777777.0;12;102120444444.0;-1.1110181182104182e+190;6;1;7220;4;4440;-182110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077777.0;11;6666044444.0;-1.1110181182104182e+190;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1701840;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1701850;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311070;6;666040;-11101610;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1721841430.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1721850;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+4777;4;4444;116187188189.0;6;1;-417700;6;464400;-117118700;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311110770;9;266660440;-111110191192.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21110;5;776660;-11110;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111190;7;66666640;-11111102118.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77700;5;44400;19415400;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111190;7;62666640;-11111102103.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111190;7;62666640;-11111102103.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+730070;5;460040;-11001950;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+30020;4;60000;-10000;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111140;8;666666640.0;-11111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77700;5;44400;19615400;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111190;7;62666640;-11111102103.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111190;7;62666640;-11111102119.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5777770;7;4444440;104198106199124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7;1;4;196;6;1;77700;5;44400;20020100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311110;6;10220920;-111110;6;1;7770;4;4440;2022031550.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-731117770.0;10;4666644400.0;-11111204104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+117777;6;1404444;-11205206207110.0;7;1;20077770;7;470044440;-100134204115208.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+6;2;7777770;7;4444440;198209210211212.0;6;2;770;3;440;1502130;6;1;7709;4;-4404;1350120121.0;6;1;770;3;440;1992160;2;0;0;0;0;0
+112;3;-104;-111;7;2;77777700;8;44444400;198209210211217.0;6;1;7777700;7;4444400;115205211115.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110770.0;10;6666666044.0;-1111110195218.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110770.0;11;6666666044.0;-1111110204104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;1952041150.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;1981061070.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17770;5;4440;-11961940;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;122;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;162164162198.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2202210;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17777;5;104444;-1222199;13;1;770;3;440;2231980;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;123;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7777700;7;4444400;2041951050.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+3000;3;66000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2250;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1052260;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311107770;9;666604440.0;-11110227228104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2252290;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1052300;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2272311040.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7;1;77777770;8;44444440;2.312282022031052e+170;7;1;-211777;6;27020444;-111232233134.0;7;1;7777700;7;4444400;234235213104.0;6;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;16;1;202;2;4700;-100;17;1;400;2;400;12400;17;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111110;8;1101510512.0;-11111110;7;1;7770;4;4440;2371651040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110295964047.0;19;-1.0e+INF;-1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7720;4;4440;-17016010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5579;4;-4444;1081091125.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2411090;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2420;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2420;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2420;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077770.0;11;666604444.0;-11110242161104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+177777700;9;644444400.0;-1105243244164241.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;126;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1092462470.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2111090;7;676666660.04;-111101270;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+117770;6;664440;-11109246249.0;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111107777.0;13;666660004444.0;-1111110247249104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1777700;7;6444400;-1198243250.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17777700;8;64444400;-1198243128129.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13111077777.0;13;66666044444.0;-1.0e+INF;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311102;6;10151100;-111100;17;1;287;3;4144;-10247;17;1;-41118009;7;-4154314004.0;-130111100249.0;17;1;2070;3;467040;-101310;19;0;0;0;0;0;0;0
+-41111;5;-4840;-1071111;7;2;-41580;5;40460;-1321331110.0;2;1;511590;6;460440;-11011111133.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111;4;-101511;-1111;7;1;-770210;6;44097990;-1490110;7;2;-41149;5;-414404;-107110247;7;2;170;3;1140;-110;7;1;-211490;6;676666440.0;-1111342490.0;7;0
+-3111;4;-101511;-1111;17;1;-7770210;7;4440158515.0;-1491870110.0;17;2;-2111890;7;1676666666.04;-111102490;17;1;-4187;4;414144;-10710247;17;1;6117280;7;404660;-112111100;7;0
+-731110;6;41015120;-14911110;6;1;7;1;4;155;6;1;2027700;6;117044400;-10123800;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311110;6;10151700;-111110;7;1;777777704.09;10;-4444444044.0;1.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111077777777.0;16;1015170044444444.0;-1.1111013824710412e+230;7;1;77700;5;44400;13824900;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-51770;5;40440;-1131160138.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;440;-11721400;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-51770;5;40440;-1131141138.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+115511187777.0;14;664466666.04444;-11110110111.014214;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+115511147777.0;13;664466644444.0;-11114114111.011421;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+55180;5;44660;-110110100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110;5;1015110;-11110;17;1;-2102;4;117000;-1101;17;1;4000;3;4000;130000;17;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21100;5;67666600;-11100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-210740;5;27220440;-1101431460.0;6;1;-31070;5;66040;-1101470;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2107770;7;676604440.0;-110148147129.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-419;3;-464;-1071149;17;1;-21108;5;-107150014;-11100;7;1;-51870;5;40640;-115101500;7;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111770;7;101512440;-11111510;6;1;777777700.0;9;444444400;1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777770;6;444440;154152155165149.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7777770;7;4444440;1.1115615415616216e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1051560;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111102;7;-101514304;-1111101;7;1;7777700;8;4444400;1571582380.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1561980;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110;5;1015120;-11110;6;1;-2959640470.0;11;4444444440.0;1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110;7;101507380;-1111110;7;1;7720070;6;441170040;-241143100160.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+117;3;4;-11161;7;1;7770;4;4440;1601621630.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111020090.0;9;666604700.04;-11110100201.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-131110;6;141015120;-111110;18;1;277702000;8;4444011700.0;-1241104010.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111027770.0;11;666604444.0;-111101164163.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311100;6;666600;-111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111027770.0;11;666604444.0;-111101202165.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077777.0;12;101512044444.0;-11110155155157.0;6;1;720090;5;4970040;-1551001660.0;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1670;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1681730;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1681240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1691680;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311110777777.0;14;102150920444444.0;-1.1111014720212419e+170;7;1;61117;5;-4584;-1181111;7;1;20070;4;11070040;-1001710;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+7700;4;4400;14700;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77777;5;44444;109172105173174.0;7;1;200770;5;9700440;-1001471030.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111557;6;-13444;-1111081091.0;7;1;7770;4;4440;1751761750.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1777700;7;6444400;-1198243164.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+490;3;440;1771780;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+18;2;-30;-10;7;1;-7731110;7;4410015130.0;-17911110;6;1;7720070;6;441170040;-143241100195.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4114;4;-4664;-10711171;17;1;840;3;640;1800;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311102;6;1021100;-111100;17;1;28;2;-42;-10;17;1;-4177777770.0;10;4644444440.0;-1.301181112113182e+240;17;0;0;0;0;0;0;0;0;0;0;0;0;0
+7;1;4;185;7;1;-211;3;70;-111;7;2;-21170;5;7333340;-1111860;22;1;51280;5;40060;-1201100;2;0;0;0;0;0;0;0
+-3111100;7;66666600;-1111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110777.02;12;-622666220.0444762;-1111110133103.01;6;1;-3111077020.0;10;666660440.06;-1111013301.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111107770.0;10;10230920444.0;-111110102126.0;6;1;79;2;-44;187155;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-411119;6;-419064;-1881111109.0;17;1;-311110;6;19430900;-111110;6;1;2;1;-4;-1;6;2;-5772000;6;444117000;-1091891901.0;7;1;777;3;444;170124;7;1
+50;2;40;1210;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1155110;7;6644770;-1112112111.0;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1115151;7;-1110420420.0;-1111211121.01;24;1;5170;4;4640;-12111960;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4110;4;41400;-107110;9;1;559;3;-444;122122197;6;1;-7540;4;4400;19812300;7;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4110;4;42100;-107110;17;1;770;3;440;1981960;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+551770;6;446440;-1241211189107.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5511501177.0;9;446640644;-12112111109.011189;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;200;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7790;4;4440;1982012020.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+57770;5;44440;124111202201.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+57770;5;44440;124111203201.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+10770;5;60440;-101052010;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+10770;5;60440;-102011980;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;204;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-531110;6;41015130;-12411110;12;1;27777070;8;44444040;-1113205206.0207;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5117770;7;4664440;-12111168170196.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-51770;5;46440;-1211185196.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-115111;6;-64600;-11125111;7;1;-211077770;10;667776604444.0;-1110242147124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111110;8;1101510139.0;-11111110;7;1;77;2;44;222208;19;1;-4110;4;41530;-104110;19;1;77770;5;44440;209208242210.0;7;0;0;0;0;0;0;0
+-3111110;7;1101510130.0;-1111110;7;1;61111111;8;-411101190;-1181111111.0;7;1;77777770;8;44444440;2.1122220814321215e+170;2;1;19;2;77770;5;44440;209208242210.0;19;1;-7770417;7;44404134;-10411002131.01214
+1155111;7;-151441410;-11122122111.0;7;2;77777070;8;44444040;148216124136.0217;19;1;-4170;4;4640;-21812190;2;0;0;0;0;0;0;0;0;0;0;0;0;0
+111;3;-1520;-111;7;1;57;2;44;109220;25;1;-1555141;7;144441340;-1128122129.012211;18;1;77;2;44;150222;19;1;577050;6;444040;1142230114.0;20;0
+1155177770.0;10;664464444.0;-1.1122122111322022e+200;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+149;3;-44;-1225226112227228.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111515;6;-14514144;-1111141109.0;7;1;770;3;440;1621960;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1;1;0;-1;7;1;111117;6;-2310474;-111111;2;1;515770;6;464440;-1141109162164.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0
+111177;6;1010044;-1111115115.0;7;1;-311111111;9;-7066708007.0;-111111111;7;2;20;2;1000;-10;7;1;7;1;7777;4;4444;198111124;7;1;777777704.0;9;444444400;111229230205124.0
+-11115;5;-101004;-1111133;7;1;-41070;5;47040;-231102320;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2220;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+170;3;640;-12090;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;1062332230.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2342350;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2360;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1;1;-10;-1;13;2;790;3;440;2372350;6;1;77770;5;44440;1222162380.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;239;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77777;5;44444;240198230;6;1;7770;4;4440;1992402230.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+4777777;7;4444444;241242240243230.0;6;1;7;1;4;244;6;1;77770;5;44440;240223230198.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+177;3;44;-1198;7;1;77;2;44;245198;6;1;77770;5;44440;199200246233.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;247;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11210;5;14397130;-11110;7;1;77777770;8;44444440;2.3524822224923423e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21;2;-48313;-11;6;2;7770;4;4440;2502222510.0;6;1;-21;2;-48313;-11;6;2;7770;4;4440;2502222510.0;6;1;770;3;440;2522530;6;0
+7770;4;4440;2222540;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2222540;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111100;7;66666600;-1111100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311111040;9;666666604.0;-1111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111110277.0;13;666666660.0644;-111111101104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1113111111.0;11;14501112409212.0;-1111111111.0;7;1;720;3;460;-10410;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110777.0;11;110409200444.0;-1111110255149.0;7;1;2000;3;47000;-1000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1;1;-12;-1;7;1;6;1;7777770;7;4444440;256257199258.0;6;1;77770;5;44440;1981982570.0;6;1;70;2;40;2230;6;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1681240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111110;8;1015143400.0;-11111110;7;1;-2107770;7;667130444.0;-1101041100.0;19;1;490;3;440;1322592600.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0
+1177700;7;6644400;-1126120900.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311111;6;-6666666;-111111;17;4;80;2;0;0;17;3;20;2;0;0;17;2;877700;6;1044400;26226300;17;1;-4111;4;-41000;-264111;17;2
+-155;3;-1044;-1136136;24;1;-311111117;9;1015098107.04;-11111111280.0;19;1;-217;3;1096104;-11280;19;2;-2107770;7;1096100444.0;-1101471040.0;19;2;111115;6;-2350004;-11111136;19;2
+-3111070;7;6666040;-111101470;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1117011175.0;9;-1000401000.044;-111101111136.0;7;1;877770;6;644440;106257281282.0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1152832840.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1142832840.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11179;5;-96644;-1111260;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31107270;8;66604440;-11102421284.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11177770;8;96044440;-1111256265151.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+19;2;-134;-1285;7;1;557011117.0;8;-4440237004.0;-128109101111.01;6;1;777770;6;444440;256265172185.0;7;1;-57770;5;44440;1371265286.0;7;0;0;0;0;0;0;0
+90;2;40;2870;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1151052830.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111790;6;966440;-11112880;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110770;8;66660440;-11110143158.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077770.0;10;10151304444.0;-11110242143198.0;7;1;200;2;11700;-100;7;1;7770;4;4440;2062071980.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
+-570;3;440;13810;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311107;6;10151304;-11110143;2;1;2090;3;97040;-10289112113290.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+490;3;440;2912920;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;293294;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110;5;1015130;-11110;7;1;20055770;7;1170044440.0;-100139102295168.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-51770;5;46440;-140111570;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3100;4;2700;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111070;7;6666040;-111101040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111190;7;66666640;-11111102103.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1052960;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+3000;3;66000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077700.0;10;666604440.0;-11110155104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;266666040;-1111101920.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;266666040;-1111101920.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;2962972980.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+4770;4;4440;241299300242.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077770.0;10;666604444.0;-11110227105296104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+10;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+58770;5;46440;1360301302.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110777.0;11;1101510500.0444;-1111110238284.0;6;1;2777020070.0;10;4444011700.04;-11040100303.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1419;4;-4134;-11071304;7;1;577770;6;444440;109305306307.0;6;1;555;3;-444;109139141;19;1;7777770;7;4444440;308309291124310.0;19;1;7490;4;4440;1571463110.0;6;0
+87;2;2904;312;7;1;-211;3;-11718;-111;7;2;870;3;1040;2070;27;1;8777770;7;6444440;179313105111203.0;27;0;0;0;0;0;0;0
+-31110;5;1015130;-11110;7;1;1740;4;11440;-11126112314127.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31112;5;1015110;-11110;17;1;77702;5;-44404;-24114301;17;2;877770;6;1444440;247112113315.0;17;1;-41111;5;-415436;-1301111;17;2;890;3;1440;1270;26;1
+-311107;6;10151304;-11110110;7;1;-41580;5;46460;-1323171142.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311110;7;10153190;-111110;7;2;551118;6;-44155914;-1421221110.0;6;2;7777700;7;4444400;2472491240.0;7;1;-411114009;8;-466664004;-1041111100.0127;6;0;0;0;0;0;0;0
+11175;5;-120044;-1111136;7;1;8770;4;6440;3013180;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110777.0;11;101529000444.0;-1111110319247.0;7;1;-1772004;6;-44117004;-1242143100.0104;6;1;-4190;4;4640;-3203211127.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5151770;7;4646440;-12111211322323.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+5511780;7;4466460;-1431221110.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-731110770.0;9;466660440;-11110177104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+49;2;-44;324325;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8111;4;-3320;-1111;7;1;557777770.0;9;444444440;1.3914430132612412e+200;6;1;77700;5;44400;32817500;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+170;3;640;-13290;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+170;3;40;-13300;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311110;6;10151870;-111110;7;1;777777770.0;10;444444440;3.312423321241363e+170;6;1;777700;6;444400;3312421270.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5790;4;4440;14513340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+170;3;640;-13350;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311020;6;6660320;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31102100;8;666047600.0;-11101100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3110720;7;66604320;-111033610;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+170;3;640;-13290;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311107720;9;666604440.0;-11110241104.01;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11170;5;66640;-1113370;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5790;4;4440;1463383390.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;3401710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+49;2;-44;341342;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;343;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111070;7;66666040;-111101920;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077770.0;11;6666604444.0;-11110103235344.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110770;8;666660440.0;-11110345192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-577777770.0;9;444444440;1.0412353462093471e+210;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31110777;8;222920444;-11110103150348.0;6;1;7777;4;4444;235349241143.0;6;1;2090;3;117040;-103500;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111077700.0;10;666660444.0;-11110351233.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;3013470;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1190;4;6640;-1135210;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17770;5;64440;-1328353347.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+477777070;9;444444040;354355124125356.06;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5740;4;4440;14713580;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4111;4;-4713;-107111;17;2;770;3;440;3593600;19;1;-311111111;9;-666681137.0;-111111111;26;2;77080;5;44000;361000;26;1;26;1;777;3;444;207362204
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-73100;5;46600;-3671100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311070;6;666040;-11101820;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+407;2;404;1070368;9;1;-311107770;9;666604440.0;-11110190124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+6;1;77770;5;44440;231105369104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;3700;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101230.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111111040.0;10;666666660.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111070;8;666666040.0;-1111101230.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111111077.0;11;666666660.044;-11111110204104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11131111077.0;12;666666666.044;-111111110371104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11131111077.0;12;666666666.044;-111111110372104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311100;6;666600;-111100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111111070.0;10;666666600.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111111070.0;10;666666600.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111111070.0;10;666666660.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111111070.0;10;666666660.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110777.0;11;66666660444.0;-1111110104130373.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-531111100;9;4666666600.0;-1091111110.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5311111100.0;10;4666666666.0;-1091111111.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777;3;444;374150266;6;1;-3111111077.0;11;666666666.044;-11111110129104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1777700;7;444400;-1105375326.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111110;8;1103409200.0;-11111110;7;1;77770;5;44440;227376104240.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311070;6;666040;-11101060;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311070;6;666040;-11101110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311107770;9;666604440.0;-11110220221377.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110777.0;11;110310000444.0;-1111110378198.0;7;1;770;3;440;1993790;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111110;7;110310000;-1111110;7;1;79;2;-44;200120121380.0;6;1;777777770.0;10;4444444400.0;1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311107770;9;666604440.0;-11110106301104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311070;6;666040;-11101110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311100;6;10151100;-111100;17;1;7;1;4;243;17;2;870;3;640;2470;17;1;-41111108;8;-4154000034.0;-1301111100.0;17;2;770;3;440;2421270;28;1
+111;3;-14;-111;7;1;5511877777.0;11;4466644444.0;-1.4914911038738813e+230;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17;2;144;-1243;18;1;5511;4;-44353;-14915011;6;2;701580;5;4011460;-2430114900.0;7;1;-21187770;8;6664440;-1110243390129.0;7;0;0;0;0;0;0;0
+111;3;-1430;-111;7;1;-3111110;7;1061514430.0;-1111110;7;1;777777770.0;10;444444440;1.5410411032439115e+170;19;2;511175111;9;-4743441542.0;-1511111142.0111;19;1;261585009;10;149477148;3.923933943953961e+29;22;1
diff --git a/contrib/ML4PG/libs/ssreflect/basic/seq_names b/contrib/ML4PG/libs/ssreflect/basic/seq_names
new file mode 100644
index 00000000..9ad9bc21
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/seq_names
@@ -0,0 +1,394 @@
+1 size0nil
+2 nilP
+3 size_behead
+4 size_ncons
+5 size_nseq
+6 cat0s
+7 cat1s
+8 cat_cons
+9 cat_nseq
+10 cats0
+11 catA
+12 size_cat
+13 rcons_cons
+14 cats1
+15 lastI
+16 last_cons
+17 size_rcons
+18 size_belast
+19 last_cat
+20 last_rcons
+21 belast_cat
+22 belast_rcons
+23 cat_rcons
+24 rcons_cat
+25 lastP
+26 last_ind
+27 nth0
+28 nth_default
+29 nth_nil
+30 last_nth
+31 nth_last
+32 nth_behead
+33 nth_cat
+34 nth_rcons
+35 nth_ncons
+36 nth_nseq
+37 eq_from_nth
+38 size_set_nth
+39 set_nth_nil
+40 nth_set_nth
+41 set_set_nth
+42 count_filter
+43 has_count
+44 count_size
+45 all_count
+46 filter_all
+47 all_filterP
+48 filter_id
+49 has_find
+50 find_size
+51 find_cat
+52 has_nil
+53 has_seq1
+54 has_seqb
+55 all_nil
+56 all_seq1
+57 nth_find
+58 before_find
+59 filter_cat
+60 filter_rcons
+61 count_cat
+62 has_cat
+63 has_rcons
+64 all_cat
+65 all_rcons
+66 eq_find
+67 eq_filter
+68 eq_count
+69 eq_has
+70 eq_all
+71 sub_find
+72 sub_has
+73 sub_count
+74 sub_all
+75 filter_pred0
+76 filter_predT
+77 filter_predI
+78 count_pred0
+79 count_predT
+80 count_predUI
+81 count_predC
+82 has_pred0
+83 has_predT
+84 has_predC
+85 has_predU
+86 all_pred0
+87 all_predT
+88 all_predC
+89 all_predI
+90 drop_behead
+91 drop0
+92 drop1
+93 drop_oversize
+94 drop_size
+95 drop_cons
+96 size_drop
+97 drop_cat
+98 drop_size_cat
+99 nconsK
+100 take0
+101 take_oversize
+102 take_size
+103 take_cons
+104 drop_rcons
+105 cat_take_drop
+106 size_takel
+107 size_take
+108 take_cat
+109 take_size_cat
+110 takel_cat
+111 nth_drop
+112 nth_take
+113 drop_nth
+114 take_nth
+115 rot0
+116 size_rot
+117 rot_oversize
+118 rot_size
+119 has_rot
+120 rot_size_cat
+121 rotK
+122 rot_inj
+123 rot1_cons
+124 catrev_catl
+125 catrev_catr
+126 catrevE
+127 rev_cons
+128 size_rev
+129 rev_cat
+130 rev_rcons
+131 revK
+132 nth_rev
+133 eqseqP
+134 eqseqE
+135 eqseq_cons
+136 eqseq_cat
+137 eqseq_rcons
+138 has_filter
+139 size_eq0
+140 in_cons
+141 in_nil
+142 mem_seq1
+143 mem_seq2
+144 mem_seq3
+145 mem_seq4
+146 mem_cat
+147 mem_rcons
+148 mem_head
+149 mem_last
+150 mem_behead
+151 mem_belast
+152 mem_nth
+153 mem_take
+154 mem_drop
+155 mem_rev
+156 hasP
+157 hasPn
+158 allP
+159 allPn
+160 mem_filter
+161 eq_in_filter
+162 eq_in_find
+163 eq_in_count
+164 eq_in_all
+165 eq_in_has
+166 eq_has_r
+167 eq_all_r
+168 has_sym
+169 has_pred1
+170 all_pred1P
+171 all_pred1_constant
+172 all_pred1_nseq
+173 constant_nseq
+174 constantP
+175 cons_uniq
+176 cat_uniq
+177 uniq_catC
+178 uniq_catCA
+179 rcons_uniq
+180 filter_uniq
+181 rot_uniq
+182 rev_uniq
+183 count_uniq_mem
+184 filter_pred1_uniq
+185 size_undup
+186 mem_undup
+187 undup_uniq
+188 undup_id
+189 ltn_size_undup
+190 filter_undup
+191 index_size
+192 index_mem
+193 nth_index
+194 index_cat
+195 index_uniq
+196 index_head
+197 index_last
+198 nth_uniq
+199 mem_rot
+200 eqseq_rot
+201 rot_to
+202 nthP
+203 has_nthP
+204 all_nthP
+205 set_nth_default
+206 headI
+207 nth_incr_nth
+208 size_incr_nth
+209 perm_eqP
+210 perm_eq_refl
+211 perm_eq_sym
+212 perm_eq_trans
+213 perm_eqlE
+214 perm_eqlP
+215 perm_eqrP
+216 perm_catC
+217 perm_cat2l
+218 perm_cons
+219 perm_cat2r
+220 perm_catAC
+221 perm_catCA
+222 perm_rcons
+223 perm_rot
+224 perm_rotr
+225 perm_filterC
+226 perm_eq_mem
+227 perm_eq_size
+228 perm_eq_small
+229 uniq_leq_size
+230 leq_size_uniq
+231 uniq_size_uniq
+232 leq_size_perm
+233 perm_uniq
+234 perm_eq_uniq
+235 uniq_perm_eq
+236 count_mem_uniq
+237 catCA_perm_ind
+238 catCA_perm_subst
+239 size_rotr
+240 mem_rotr
+241 rotr_size_cat
+242 rotr1_rcons
+243 has_rotr
+244 rotr_uniq
+245 rotrK
+246 rotr_inj
+247 rev_rot
+248 rev_rotr
+249 rot_addn
+250 rotS
+251 rot_add_mod
+252 rot_rot
+253 rot_rotr
+254 rotr_rotr
+255 mask_false
+256 mask_true
+257 mask0
+258 mask1
+259 mask_cons
+260 size_mask
+261 mask_cat
+262 has_mask_cons
+263 has_mask
+264 mask_rot
+265 mem_mask_cons
+266 mem_mask
+267 mask_uniq
+268 mem_mask_rot
+269 sub0seq
+270 subseq0
+271 subseqP
+272 subseq_trans
+273 subseq_refl
+274 cat_subseq
+275 prefix_subseq
+276 suffix_subseq
+277 mem_subseq
+278 sub1seq
+279 size_subseq
+280 size_subseq_leqif
+281 subseq_cons
+282 subseq_rcons
+283 subseq_uniq
+284 rem_id
+285 perm_to_rem
+286 size_rem
+287 rem_subseq
+288 rem_uniq
+289 mem_rem
+290 rem_filter
+291 mem_rem_uniq
+292 map_cons
+293 map_nseq
+294 map_cat
+295 size_map
+296 behead_map
+297 nth_map
+298 map_rcons
+299 last_map
+300 belast_map
+301 filter_map
+302 find_map
+303 has_map
+304 all_map
+305 count_map
+306 map_take
+307 map_drop
+308 map_rot
+309 map_rotr
+310 map_rev
+311 map_mask
+312 inj_map
+313 filter_mask
+314 filter_subseq
+315 subseq_filter
+316 subseq_uniqP
+317 perm_to_subseq
+318 map_f
+319 mapP
+320 map_uniq
+321 map_inj_in_uniq
+322 map_subseq
+323 nth_index_map
+324 perm_map
+325 mem_map
+326 index_map
+327 map_inj_uniq
+328 map_of_seq
+329 map_id
+330 eq_map
+331 map_comp
+332 mapK
+333 eq_in_map
+334 map_id_in
+335 map_pK
+336 size_pmap
+337 pmapS_filter
+338 pmap_filter
+339 eq_pmap
+340 mem_pmap
+341 can2_mem_pmap
+342 pmap_uniq
+343 size_pmap_sub
+344 mem_pmap_sub
+345 pmap_sub_uniq
+346 size_iota
+347 iota_add
+348 iota_addl
+349 nth_iota
+350 mem_iota
+351 iota_uniq
+352 size_mkseq
+353 eq_mkseq
+354 nth_mkseq
+355 mkseq_nth
+356 mkseq_uniq
+357 perm_eq_iotaP
+358 foldr_cat
+359 foldr_map
+360 sumn_nseq
+361 sumn_cat
+362 natnseq0P
+363 foldl_rev
+364 foldl_cat
+365 size_pairmap
+366 pairmap_cat
+367 nth_pairmap
+368 size_scanl
+369 scanl_cat
+370 nth_scanl
+371 scanlK
+372 pairmapK
+373 zip_unzip
+374 unzip1_zip
+375 unzip2_zip
+376 size1_zip
+377 size2_zip
+378 size_zip
+379 zip_cat
+380 nth_zip
+381 nth_zip_cond
+382 zip_rcons
+383 rev_zip
+384 size_flatten
+385 flatten_cat
+386 flattenK
+387 reshapeKr
+388 reshapeKl
+389 size_allpairs
+390 allpairs_cat
+391 allpairsP
+392 mem_allpairs
+393 allpairs_catr
+394 allpairs_uniq
diff --git a/contrib/ML4PG/libs/ssreflect/basic/seq_tactics.csv b/contrib/ML4PG/libs/ssreflect/basic/seq_tactics.csv
new file mode 100644
index 00000000..27486f7c
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/seq_tactics.csv
@@ -0,0 +1,393 @@
+0;0;0;0;0;-6;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;102103;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;105106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;109105110;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;112113109;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-8;-100;-111;7;1;0;0;0;0;0;-6;0;-1;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;114115116;71111;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;120104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;122123124125.0;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.021261271281291e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;6;1;-6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;120104132133.01341;1266;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-11;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.3813914014113813e+29;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
+0;0;0;0;0;-4;0;-1;6;1;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;147148149150151.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;9;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;104155;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;-4;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;105159115;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;160159106;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;104161;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;105162163164.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;104165;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;105166167149.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;168104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;168104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160169;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;170171;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;172171;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;173;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-4;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;177;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;172148151124.0;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;66;2;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;149104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160179;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160180;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;66;2;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;181182104182107.03;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;181182104182183.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;170184;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;170185;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;161;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;172184143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;172185;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;187188189187.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;191192;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-7;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;194154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1195;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;196154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;-4;4444;198106199124.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;196200201;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;202203155;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1204104;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;-10;-11;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;205206207110.01343;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;198209210211212.0;6662;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;-10;-11;7;1;-4;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;198209210211217.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;195218;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;204104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;195204115;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;198106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;196194;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;162164162198.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;220221;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;222199223198.0;136;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;204195105;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;225;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105226;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;227228104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;225229;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105230;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;227231104;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-2;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.0e+INF;776;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;16;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;237165104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-7;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444444;1.1323711023810424e+20;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;170160;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;241109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;242161104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;105243244164241.0;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;19;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;109246247;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;20;1
+-6;-6;-11;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;109246249;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;247249104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;198243250;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;198243128129.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;18;1;0;0;0;0;0;-6;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;227246241104.0;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;1719;2;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;247131;1719;2;8;80;11;1717;2;0;0;0;0;0;-4;0;100;17;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;110110111;222;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;2;1;0;0;0;0;0;-4;0;100;2;1
+0;0;0;0;0;-9;0;-1;77;2;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;4;149;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100100;77;2
+0;0;0;0;0;-15;0;-1;17177;3;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;-4;0;112;7;1;-4;44;149187247;1717;2;8;8080;111;17177;3;0;0;0;0;0;-4;0;100;17;1
+0;0;0;0;0;-11;0;-1;66;2;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;149155238;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.3524710412413614e+17;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;1.0e+INF;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;113;7;1;0;0;0;0;0;-4;4;160138;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;172140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;113;7;1;0;0;0;0;0;-4;4;141138;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;110110;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;142142;7;1;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;114114;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;142143144145.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;110110;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-11;0;-1;1717;2;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;17;1;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-2;0;-1;6;1;-6;0;-1;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;143147;619;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;148147129;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;115;7;1;0;0;0;0;0;-4;0;150;7;1;8;80;11;77;2;0;0;0;0;0;-4;0;100;17;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.511522431531521e+20;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;154152155165149.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;1.1115615415616216e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105156;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;7;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;157158238;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;156198;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444444;2.2710515411014915e+23;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-11;0;-1;6;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;241143160;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;161160162163.0;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;19;1;-6;0;-1;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;19;1
+-14;0;-1;18;1;-4;0;-1;66;2;-10;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;241104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;164163;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;202165;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;21;1;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;155155157155.0;621;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;21;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;167;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;168173;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;168124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;169168;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-11;0;-1;6;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;118;7;1;-4;44444;147202124170.0171;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;147;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;109172105173174.02;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-13;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;108109;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;175176175;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;198243164;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;-1;7;1;-11;0;-1;7;1;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;179143241195.0;677;3;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;17;1;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.811121131821122e+20;17;1;8;0;1;17;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;7222;3;0;0;0;0;0;-4;0;120;2;1;0;0;0;0;0;0;0;0;0;0;-4;0;185186;722;2;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-7;0;-1;66;2;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;133103133;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;102126187;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;-4;0;-1;676;3;0;0;-1;6;1;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;-4;4;1.891901701241602e+47;7766619;6;0;0;0;0;0;0;0;0;0;0;-4;0;100;17;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;121;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;23;1;0;0;0;0;0;0;0;0;0;0;-4;-4;121121;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10;-110;-111;24;1;0;0;0;0;0;0;0;0;0;0;-4;0;121;2;1;-4;-4;121121;2424;2;0;0;0;0;0;-4;0;196;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;6;1;-4;0;123;7;1;0;0;0;0;0;-4;0;198;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;198196;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;124121;1212;2;0;0;0;0;0;0;0;0;0;0;-4;4;189107;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;121121109;66;2;-4;-44;0;6;1;0;0;0;0;0;-4;4;189199;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;198201;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;124;12;1;0;0;0;0;0;0;0;0;0;0;-4;44;111202201;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;124;12;1;0;0;0;0;0;0;0;0;0;0;-4;44;111203201;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105201;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;201198;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
+0;0;0;0;0;-4;0;-1;19;1;-10;0;-1;12;1;-4;0;124;12;1;0;0;0;0;0;0;0;0;0;0;-4;444;113205206207.0;1919;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;121;7;1;0;0;0;0;0;-4;44;168170196;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;121;7;1;0;0;0;0;0;-4;4;185196;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;-11;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-444;125;7;1;0;0;0;0;0;-4;444;242147124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;2.222082092082422e+17;197;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;-4;-4;127114114;1919;2;0;0;0;0;0;-4;0;118;7;1;-4;444444;1.0e+INF;219191919;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;-21;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;7;1;0;0;0;0;0;0;0;0;0;0;-4;4444;148216124136.02173;19192;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;-220;-111;718;2;0;0;0;0;0;0;0;0;0;0;-4;0;1.0912812212911411e+17;25182020;4;0;0;0;0;0;0;0;0;0;0;-4;0;220150222223.0;251920;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;113220224147.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-13;-151;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;114109;77;2;0;0;0;0;0;0;0;0;0;0;-4;4;162196;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;114109;22;2;-4;-44444;0;2;1;0;0;0;0;0;-4;4;162164;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-9;-1100;-1111;7;1;-10;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.151151981111241e+29;7772;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-9;-1100;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;232;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;222;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;209;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;106233223;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;234235;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;236;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;211;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;237122216238.0;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;2.4019823019924022e+17;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;2.4024323024424022e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.9824519819920025e+20;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-13;-13;-11;7;1;-9;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;2.3524822224923424e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;2.5022225125022225e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;222254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;222254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;-250;-111;7;1;-6;0;-1;6;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;7;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;255149;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;256257199258.0198;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;168124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;19;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;104110;19;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;19;1
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;261209;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;-11;0;-1;262626;3;-6;0;-1;17;1;-4;0;115135111;662;3;0;0;0;0;0;-4;0;0;7;1;-4;44;2.6226326523021017e+26;1.7267192222226666e+21;17;8;80808080;11111;1717262626.0;5;0;0;0;0;0;0;0;0;0;0
+-10;0;-1;24;1;-10;0;-1;1919;2;-10;0;-1;19;1;-4;0;136136;1919;2;0;0;0;0;0;-4;0;0;1919;2;-4;0;2.8028014710426528e+17;1919192626.0;5;8;80;11;2626;2;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;147;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;136;7;1;0;0;0;0;0;-4;0;0;77;2;-4;444;106257281282.0;26;1;8;0;1;26;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;115283284;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;114283284;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242284;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;44;256265151;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;128109;6;1;-4;0;137;7;1;-4;0;0;6;1;-4;4444;256265172185.02652;77;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;115105283;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143158;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-11;0;-1;7;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;2.421431982062072e+17;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;138;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;19;1;-10;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;143;2;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;19;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;20;1
+0;0;0;0;0;-11;0;-1;6;1;-10;0;-1;7;1;-4;-4;139102;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;295168;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;140;7;1;0;0;0;0;0;-4;0;157;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105296;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;155104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;296297298;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;300242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;227105296104.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;136;2;1;0;0;0;0;0;0;0;0;0;0;-4;4;301302;2;1;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;66;2;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;238284104303.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;109109139141.0;619;2;0;0;0;0;0;0;0;0;0;0;-4;444;3.0530630730830926e+23;6196;3;0;0;0;0;0;0;0;0;0;0;-4;0;100100;76;2
+0;0;0;0;0;-11;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;3.1220717931310514e+20;72727;3;8;8080;111;72727;3;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-67;111;26;1;-4;0;-1;17;1;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;26;1;-4;44;2.411432471121133e+17;171726;3;8;80;11;1726;2;0;0;0;0;0;-4;0;100;26;1
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;-4;0;142;19;1;0;0;0;0;0;0;0;0;0;0;-4;0;110;7;1;8;0;1;19;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;-4;-4;142122;6;1;0;0;0;0;0;0;0;0;0;0;-4;4444;247249124;7;1;8;0;1;6;1;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;136;7;1;0;0;0;0;0;-4;0;0;7;1;-4;4;301318;26;1;8;0;1;26;1;0;0;0;0;0;0;0;0;0;0
+0;0;1;6;1;-11;0;-1;6;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;319247242143.0;76;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;121;7;1;-4;-4;121;7;1;0;0;0;0;0;-4;4;322323;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;143122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;177104;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;139144;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;301326124125327.06;66;2;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;329;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;330;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;1.0e+INF;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;145;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;335;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-32;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-32;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;336;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;329;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;241104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;337;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;146;7;1;0;0;0;0;0;-4;0;338;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;340171;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;103235344;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;345192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;-4;44444;2.3534620934723312e+17;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-11;0;-1;6;1;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.0315034823534925e+20;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;351233;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;301347;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;328353347;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;355124125356.0357;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;147;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;3.593603612073622e+29;192626196;5;8;80;11;2626;2;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;367;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;182;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;368190124;97;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;231105369104.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;370;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;204104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;371104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;372104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;104130373;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;374150266129104.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;105375326;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;227376104240.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;220221377;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;378198199379.0;72;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2.0037838119912837e+23;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;106301104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2.4324724212738338e+26;17172828;4;8;80;11;1717;2;0;0;0;17;1;0;0;0;0;0
+0;-14;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;149149;6;1;0;0;0;0;0;0;0;0;0;0;-4;4444;387388143389145.0;6;1;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
+-14;0;-1;18;1;1;0;-1;7;1;0;0;0;0;0;-4;-4;149150149;67;2;0;0;0;0;0;-4;0;0;7;1;-4;0;243243243390129.0;1877;3;8;80;11;77;2;0;0;0;0;0;0;0;0;0;0
+-13;-130;-111;7;1;-4;0;-1;6;1;-10;0;-1;7;1;-4;0;151142149149.0;191966;4;0;0;0;0;0;0;0;0;0;0;-4;4444444;1.5410411032439113e+173;1922;2;8;8080;111;6296;3;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/seq_tree.csv b/contrib/ML4PG/libs/ssreflect/basic/seq_tree.csv
new file mode 100644
index 00000000..d3f51ac1
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/seq_tree.csv
@@ -0,0 +1,393 @@
+0;-6;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-900;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;-6;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;0;100100;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-10;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-10;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-10;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;744;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-140;-4;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44444444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10;-4;0;0;0;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;0;0;0;0;0;444444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;100;0;0;0;0;0;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-7;-6;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-6;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-10;100;0;0;0;0;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100;-4;0;0;0;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;-10;100100;0;0;0;4;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-15;-10;100;0;0;-4;44;111;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-10;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;100;0;0;0;444444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;-44;0;0;444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;100;-44;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-10;100;0;0;0;0;0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-10;0;100;0;-4;0;0;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-10;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-10;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-14;-4;-10;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;-10;0;0;0;0;4444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-10;0;0;0;-4;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;0;0;0;-44;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-10;0;0;0;0;44;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100100;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-10;100;0;0;0;444444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-7;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;44;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;100100100;0;-4;0;44444444444.0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1110;0;0;0;-4;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;-44;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-10;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;0;0;0;-4;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;100;-44;0;-4;44444444444.04;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-151;0;0;100;-44;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1520;0;0;100;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;-44;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1451;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10100;-10;-6;0;0;0;0;4444444444.044;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10100;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10;0;0;0;0;0;0;444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-143;-9;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1450;-6;-10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-10;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;0;0;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;-10;100;0;0;0;44;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-6;100;-4;0;0;44444444444444.055;11111;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-10;-10;-10;0;-4;0;0;4444;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;0;0;0;-44;-4;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-10;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;-10;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-10;0;-44;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-10;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100100;-4;0;0;44444444;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;0;0;0;0;0;4444;111;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-667;-4;-10;100;0;0;0;44444444;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;100;-4;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;100100;-44;0;0;4444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-10;100100;0;0;0;444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-44;0;0;4444444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;4444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-32;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-32;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;-2;0;0;0;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;100;0;0;0;444444444444.0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;0;0;0;0;4444444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-10;100;0;0;0;44444;11;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-14;0;0;0;-44;0;0;4444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-14;1;0;0;-44;0;0;44;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1430;-4;-10;100100;-4;0;0;4444444444444444.0;111;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrbool.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrbool.csv
new file mode 100644
index 00000000..edd1bd1e
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/ssrbool.csv
@@ -0,0 +1,236 @@
+1170;4;6640;-1110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;102103;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;104103;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;105103;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20020;4;670060;-10010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20020;4;670060;-10010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20020;4;670060;-10010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20020;4;670060;-10010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2000;3;67000;-1000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2000;3;67000;-1000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5510;4;4400;-10210310;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5510;4;4400;-10410310;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5510;4;4400;-10510610;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5510;4;4400;-10410710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5510;4;4400;-10810910;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;300;-100;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2070;4;3040;-101060;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;30;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;30;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;30;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;30;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;380;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;380;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+720;3;480;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+720;3;480;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;80;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21111120;8;877677660.0;-11111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5720;4;4430;-110110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7420;4;4430;-110710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+79;2;-44;144108;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+79;2;-44;144109;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;110111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;110112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;113111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;113112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;114111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;114112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;115111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;115112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;116111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;116112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;117111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;117112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;300;-100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;800;-100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+290;3;40;1180;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;600;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1520;4;6460;-111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+29;2;-4;119112120121.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;80;-10;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;390;-10;15;0;90;2;40;119112120122.0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1420;4;64100;-1123112124125.01;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2070;4;38040;-101060;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+90;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1025;4;-4064;-101112;5;1;1110;4;11800;-1110;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1111114590.0;10;666060440.0;-1111111113.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+110440;6;660440;-1101126127.0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-111104512;9;-1334404415.016;-1111011131.01;7;1;-41290;5;461640;-11110;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111042;6;-12270416;-111011;7;1;480;3;460;100;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;40;-10;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;40;-10;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;40;-10;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;40;-10;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;128;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22020;5;33000;-11000;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+222020;6;3330760;-111010;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2222020;7;33330760;-1111010;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22222020;8;333330760;-11111010;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22020;5;33000;-11000;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;300;-100;9;1;200;3;300;-100;9;1;200;3;300;-100;9;1;20;3;0;0;9;0;0;0;0;0;0;0
+200;3;300;-100;9;1;200;3;300;-100;9;1;200;3;300;-100;9;1;200;3;300;-100;9;1;20;3;0;0;21;0
+22020;5;33000;-11000;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22020;5;33000;-11000;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2200;4;3300;-1100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;24;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;25;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;24;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;33;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;33;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;24;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;34;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;33;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;35;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;36;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;37;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;38;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2200;4;6600;-1100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+150;3;740;-11500;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+150;3;740;-11500;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;40;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7211100;7;4186766666.0;-111100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1290;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2000;3;67000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2000;3;677000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2000;3;67000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2000;3;67000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;41;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1290;42;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;-10;43;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111559;6;-666444;-1111221221.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111554770.0;11;666644444.0;-1111122122.013131;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11115770;8;66664440;-1111115131132.0;45;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+8;1;77770;5;44440;133112113133.0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11111190;8;66666640;-1111111110.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1159;4;-6644;-111161;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1111559;7;-6666444;-1111116117.01;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1111115559.0;11;666666444.04;-111111116117118.02;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11590;5;66440;-1111710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11590;5;66440;-1111710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11115590;8;66664440;-1111117117.01;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-111557770;9;666444440.0;-111119119111.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11770;5;66440;-1111340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11770;5;66440;-1111340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-111557770;9;666444440.0;-111119119111.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11770;5;66440;-1111340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11770;5;66440;-1111340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211181110;9;6666666777.0;-111111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211181110;9;6666666777.0;-111111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211181110;9;6666666777.0;-111111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211181110;9;6666666777.0;-111111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-181590;6;666440;-1.1112013411212013e+170;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-181590;6;666440;-1.1112013411212013e+170;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1090;4;40;-101360;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1090;4;40;-101370;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11090;5;66040;-1101370;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11090;5;66040;-1101370;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;138;7;1;77770;5;44440;133112113133.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11170;5;66640;-1111390;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111170;6;666640;-11111390;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-111570;6;666440;-1111211400.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-111570;6;666440;-1111211400.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111200;6;21120000;-1111100;7;1;4070;3;4040;14101400;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111401420.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111401420.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1110770;7;6660440;-1110142140.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11111170;8;66666640;-1111111390.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111170;6;666640;-11111390;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1111157704.0;11;666664440.0;-11111121143.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1111157704.0;11;666664440.0;-11111121143.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111112009.0;9;-2332242000.04;-111111100144.0;7;1;4077040;6;4044000;1410143000.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111177700.0;10;666664440.0;-11111143142.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111177700.0;10;666664440.0;-11111143142.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111107770.0;11;666660444.0;-111110142143.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrbool_names b/contrib/ML4PG/libs/ssreflect/basic/ssrbool_names
new file mode 100644
index 00000000..6b406acf
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/ssrbool_names
@@ -0,0 +1,236 @@
+1 prop_congr
+2 is_true_true
+3 not_false_is_true
+4 is_true_locked_true
+5 negbT
+6 negbTE
+7 negbF
+8 negbFE
+9 negbK
+10 negbNE
+11 negb_inj
+12 negbLR
+13 negbRL
+14 contra
+15 contraL
+16 contraR
+17 contraLR
+18 contraT
+19 wlog_neg
+20 contraFT
+21 contraFN
+22 contraTF
+23 contraNF
+24 contraFF
+25 ifP
+26 ifPn
+27 if_same
+28 if_neg
+29 fun_if
+30 if_arg
+31 ifE
+32 introNTF
+33 introTF
+34 elimNTF
+35 elimTF
+36 equivPif
+37 xorPif
+38 introTFn
+39 elimTFn
+40 equivPifn
+41 xorPifn
+42 introT
+43 introF
+44 introN
+45 introNf
+46 introTn
+47 introFn
+48 elimT
+49 elimF
+50 elimN
+51 elimNf
+52 elimTn
+53 elimFn
+54 introP
+55 iffP
+56 equivP
+57 sumboolP
+58 appP
+59 sameP
+60 decPcases
+61 rwP
+62 rwP2
+63 altP
+64 bind_unless
+65 unless_contra
+66 classicP
+67 classic_bind
+68 classic_EM
+69 classic_imply
+70 classic_pick
+71 all_and2
+72 all_and3
+73 all_and4
+74 all_and5
+75 idP
+76 boolP
+77 idPn
+78 negP
+79 negPn
+80 negPf
+81 andP
+82 and3P
+83 and4P
+84 and5P
+85 orP
+86 or3P
+87 or4P
+88 nandP
+89 norP
+90 implyP
+91 andTb
+92 andFb
+93 andbT
+94 andbF
+95 andbb
+96 andbC
+97 andbA
+98 andbCA
+99 andbAC
+100 andbACA
+101 orTb
+102 orFb
+103 orbT
+104 orbF
+105 orbb
+106 orbC
+107 orbA
+108 orbCA
+109 orbAC
+110 orbACA
+111 andbN
+112 andNb
+113 orbN
+114 orNb
+115 andb_orl
+116 andb_orr
+117 orb_andl
+118 orb_andr
+119 andb_idl
+120 andb_idr
+121 andb_id2l
+122 andb_id2r
+123 orb_idl
+124 orb_idr
+125 orb_id2l
+126 orb_id2r
+127 negb_and
+128 negb_or
+129 andbK
+130 andKb
+131 orbK
+132 orKb
+133 implybT
+134 implybF
+135 implyFb
+136 implyTb
+137 implybb
+138 negb_imply
+139 implybE
+140 implyNb
+141 implybN
+142 implybNN
+143 implyb_idl
+144 implyb_idr
+145 implyb_id2l
+146 addFb
+147 addbF
+148 addbb
+149 addbC
+150 addbA
+151 addbCA
+152 addbAC
+153 addbACA
+154 andb_addl
+155 andb_addr
+156 addKb
+157 addbK
+158 addIb
+159 addbI
+160 addTb
+161 addbT
+162 addbN
+163 addNb
+164 addbP
+165 subrelUl
+166 subrelUr
+167 sub_refl
+168 mem_topred
+169 topredE
+170 app_predE
+171 in_applicative
+172 in_collective
+173 in_simpl
+174 unfold_in
+175 simpl_predE
+176 mem_simpl
+177 mem_mem
+178 qualifE
+179 keyed_predE
+180 symmetric_from_pre
+181 sym_left_transitive
+182 sym_right_transitive
+183 equivalence_relP
+184 rev_trans
+185 forE
+186 in1W
+187 in2W
+188 in3W
+189 in1T
+190 in2T
+191 in3T
+192 sub_in1
+193 sub_in11
+194 sub_in111
+195 on1W
+196 on1lW
+197 on2W
+198 on1T
+199 on1lT
+200 on2T
+201 subon1
+202 subon1l
+203 subon2
+204 can_in_inj
+205 canLR_in
+206 canRL_in
+207 on_can_inj
+208 canLR_on
+209 canRL_on
+210 inW_bij
+211 onW_bij
+212 inT_bij
+213 onT_bij
+214 sub_in_bij
+215 subon_bij
+216 sub_in2
+217 sub_in3
+218 sub_in12
+219 sub_in21
+220 equivalence_relP_in
+221 monoW
+222 mono2W
+223 homoRL
+224 homoLR
+225 homo_mono
+226 monoLR
+227 monoRL
+228 can_mono
+229 monoW_in
+230 mono2W_in
+231 homoRL_in
+232 homoLR_in
+233 homo_mono_in
+234 monoLR_in
+235 monoRL_in
+236 can_mono_in
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tactics.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tactics.csv
new file mode 100644
index 00000000..4e875323
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tactics.csv
@@ -0,0 +1,236 @@
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;10;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;102103;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;104103;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;105106;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;104107;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;108109;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;13;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;13;1;0;0;0;0;0;0;0;0;13;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-8;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;110;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;144;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;144;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-3;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-6;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+-6;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-8;0;-1;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;8;1
+-6;0;-1;7;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;16;1;0;0;0;0;0;0;0;0;16;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4;0;-1;5;1;-6;0;-1;5;1;0;0;0;0;0;0;0;0;0;0;-4;0;1120;517;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;5;1;0;0;0;0;0
+-6;-66060;-111111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;5;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;-1344;-1111;7;1;-16;0;-1;72;2;0;0;0;0;0;0;0;0;0;0;-4;-4;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
+-12;-27;-111;7;1;-16;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;16;1
+0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;9999;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;99999;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;212121212121.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;21;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;999;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9999999;7;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;9999;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9999999921.0;9;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+0;0;0;0;0;-3;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;23;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;5;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
+-7;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;-4;0;150;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;-4;0;150;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;40;1;0;0;0;0;0
+0;0;0;0;0;-18;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;41;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;42;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;-1;43;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;43;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-666;-1111;44;1;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;44;1;0;0;0;0;0;0;0;0;0;0;-4;4;131;44;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-666;-1111;45;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;131132;45;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;133112113133.0;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66666;-111111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-66666;-111111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;120;7;1;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;120;7;1;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;133112113133.0;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-19;-2120;-1111;7;1;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;140142;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;140142;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;142140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66666;-111111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21;-232242;-111111;7;1;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;143142;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;143142;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;142143;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tree.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tree.csv
new file mode 100644
index 00000000..2a61f4cb
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tree.csv
@@ -0,0 +1,236 @@
+0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;100;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-10;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4;-6;0;0;0;-4;0;0;0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666060;0;0;100;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13344;-16;0;100100;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1227;-16;0;100100;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9999999;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9999999921.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;40;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;41;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;-44;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;100;-44;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666666;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666666;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;-4;0;0;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;-4;0;0;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21120;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2332242;0;0;100;0;0;0;4;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrnat.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrnat.csv
new file mode 100644
index 00000000..77e27515
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/ssrnat.csv
@@ -0,0 +1,326 @@
+110;3;660;-110;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1140;3;2240;-111020;12;1;-311100;6;6666600;-111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;103;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1530;4;6460;-110910;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1113107770.0;10;666660444.0;-111110104124.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+117770;6;664440;-11103181103.0;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1117770;7;6664440;-111107181107.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111821070.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111770;7;6666440;-1111182181.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1071050;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111147770;9;666644440.0;-1111106105107108.0;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11174;5;-66644;-111107109;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;2;67700;-100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;2;67700;-100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1071100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1777700;7;6444400;-1103110232.0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+177700;6;644400;-110721200;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;111;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311190;6;6666640;-1111112113.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111141070.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1261141290.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1150;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+30;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+30;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2000;3;67000;-1000;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+2000;3;67000;-1000;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;116;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111090;7;66666040;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1190;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1501540;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311109;6;-6666604;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+117770;6;664440;-111481240;24;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;148187164150.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;1481191240.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-570;3;440;1021430;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311109;6;-6666604;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777770;6;444440;150120121119143.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111090;8;666666604.0;-111110192122123.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+19;2;-64;-1124;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;124;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+190;3;40;-12010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1590;4;440;-11031240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77590;5;44440;125150104201.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4310;4;4220;-102110;9;1;-3112;4;-2282;-1111;7;1;77770;5;44440;1202021240.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31111110;8;2242970070.0;-11111110;6;1;6;1;6;1;-2111111;7;-600700600600.0;-1111111;5;4;70;2;40;1260;6;3;-5770;4;4440;1051272330.0;6;2;-5770;4
+9;1;-4;128;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+72077700;8;44044400;-15010150129.0;25;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7200;4;4900;-202100;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;3;600;-100;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7720;4;4490;-20614810;28;1;772090;6;449040;-12016410106.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+790;3;440;1041300;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+790;3;440;1071300;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;131123132118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1170;4;40;-111330;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1031300;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1072130;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-50790;5;40440;107012130;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-50790;5;40440;107011340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1351871360.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111090;7;66666040;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1371140;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1381340;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311100;6;6666600;-111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+790;3;440;1071390;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+17770;5;4440;-1234182140.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;440;-12341410;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5770;4;4440;10812120;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;1301240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-50;2;40;1100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1777700;7;444400;-1138124138.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7;1;4;131;7;1;470;3;440;1241380;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-55140;5;44040;-1111121124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5790;4;4440;113100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5790;4;4440;11311420;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1501380;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2107770;7;97004440;-110234143140.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11720;5;66490;-11010;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77200;4;449700;-107100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111777770;9;666444440.0;-1.1112818211412814e+170;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111441450.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111391440.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111770;7;6666440;-1111139142.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777740;6;444440;137105103128.0106;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+740;3;440;1441460;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+150;3;640;-11150;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+6;2;11177740;8;100044400;-111113144164.0;7;1;7777700;7;4444400;1461471240.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1481540;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1441490;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1501481210.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2021500;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1280;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1117770;7;6664440;-111128141151.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111071520.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11720;5;66490;-11010;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7720090;7;44970040;-1001070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777770;6;444440;110128153140154.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11177777777.0;12;66644444444.0;-1.1115511415612815e+260;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1117770;7;6664440;-111154157154.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111581540.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111770;7;6666440;-1111158159.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77777;5;44444;160105143153161.0;9;1;9;1;-4;106;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+740;3;440;1541620;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+150;3;640;-11170;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+6;2;1117770;7;10074440;-111113154149.0;7;1;777770200.0;9;4444409700.0;-1501631490.01;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1501641870.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2021650;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1661540;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1541670;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11177770;8;66644440;-111155110168169.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111071700.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;1700;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;118;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;119;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;120;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;121;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111;3;-222;-111;30;2;1611;4;-949;-112211;7;2;770;3;440;1541540;7;1;755;3;-444;171139123;6;1;77770;5;44440;172173148174.0;2;0
+111770;6;666440;-1111441750.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1117777770.0;10;666444444.0;-1.1117617515814013e+200;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111541780.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7;1;7;2;-2173111;7;-11722422292.0;-111031111;33;2;79;2;-44;235192;7;1;-128;3;-242;-110;7;1;-41127;5;428124;-179132111180.0;7;1;77702000;7
+720;3;400;-10;34;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2118770;7;1176666644.0;-1110182183.0;35;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-72111;5;-47280280;-1111;36;1;2;1;777770;6;444440;137184124169.0;2;1;7770;4;4440;1071841830.0;2;0;0;0;0;0;0;0;0;0;0;0
+-121112111;9;-1472802807280.028;-111111111;7;1;57777700;8;44444400;109148185186187.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-121112111;9;-1472802807280.028;-111111111;7;1;577777700.0;9;444444400;1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11131070;8;6666040;-1111101900.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11131070;8;6666040;-1111101900.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11420;5;6400;-1119100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;103;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;107;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-310777770;9;660444440.0;-110192143181124.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1071930;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;6440;-11941950;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1131777770.0;11;666644444.0;-1111196192124.0;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1113110770.0;10;666666044.0;-1111110182117.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111971980.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+117;3;224;-11195;30;1;-311107770;10;666660444.0;-11110192110117.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111971990.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1113107777.0;11;6666604444.0;-111110192198124.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1112001970.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1112001970.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1111770;7;6666440;-1111200201.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211070;7;667666040.0;-11101950;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211070;6;667776604.0;-11101950;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-211070;7;667666040.0;-11101950;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5790;4;4440;12612130;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-570;3;440;1271970;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2022030;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1972040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+114;3;-4;-11205;7;2;7770;4;4440;2042062070.0;2;1;7770;4;4440;2082092070.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;148204210148.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;148208210148.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5770;4;4440;12612040;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5770;4;4440;12612080;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5770;4;4440;12612110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5770;4;4440;12612120;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;135150204121.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;135150208121.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5770;4;4440;12612130;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5770;4;4440;12612140;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11770;5;60440;-112152160;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+11770;5;60440;-111972170;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+114;3;-4;-11218;7;2;7770;4;4440;2041642010.0;2;1;77700;5;44400;21612400;2;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21110770;8;666666044.0;-111101550;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111972190.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21110770;8;666666044.0;-111101550;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+111770;6;666440;-1111972200.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+270;3;640;-12210;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1972220;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;2;67700;-100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-310770;6;660440;-1102222150.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311777700;9;666444400.0;-111223192200.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311077770;9;666044440.0;-1110222192200201.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3117;4;2354;-111224;6;1;77770;5;44440;225222226192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2271970;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2131107777.0;12;67666604444.0;-111110222228192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77770;5;44440;229230121135.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13107;5;2204;-1110231;7;1;490;3;440;1242170;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-131110;6;222920;-111110;7;3;7777700;7;4444400;222231192201.0;6;2;770;3;440;2302010;6;1;777777770.0;11;4444444400.0;1.0e+INF;6;0;0;0;0;0;0;0
+1770;4;440;-11502330;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;440;-11482330;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1115777700.0;10;664444400.0;-111109234124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21077770;8;677604444.0;-110224112113235.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21077770;8;677604444.0;-110224112113236.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1551;4;-446;-11221221;7;2;-741;3;-448;-1502371;7;2;-3110770;7;2260440;-1110222238.0;2;1;-3110777770.0;12;6066044444.0;-1110239240241.0;2;0;0;0;0;0;0;0
+1777700;7;444400;-1119242119.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;440;-11482430;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1115777700.0;10;664444400.0;-111109244124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311070;6;666040;-11102450;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311077770;9;666044440.0;-1110246192247246.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+14770;5;4440;-1248249250234.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1170;4;6040;-112510;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311077770;9;666044440.0;-1110250246252117.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3110777720.0;10;666044442.0;-1110222253192164.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-4311070;7;4666040;-1061110104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1922152540.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1972550;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2541821810.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311109;6;-6666604;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7720;4;4440;-25610;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2572580;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2592580;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;1192601190.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7770;4;4440;2542502610.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2552000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2622000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;0;0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-310770;6;660440;-1101821830.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3107720;7;6604440;-1102632641.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+27700;5;64400;-126500;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+77777;5;44444;266181266182264.0;6;1;2777700;7;2444400;-1147267268.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-577770;6;444440;1291269182134.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+200;2;67700;-100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;2222210;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+777777;6;444444;2.702552711981972e+17;6;1;7770;4;4440;1822541070.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-517777;6;404444;-1291272273182151.0;7;1;77777770;8;44444440;2.7425425527119826e+200;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+177777;6;44444;-1275200255254114.0;7;1;7770;4;4440;2731402760.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+7777770;7;4444440;1.9927110719711027e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2420;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2430;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;277;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+70;2;40;2440;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;278;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-74172;5;-44643;-2061021279.01;9;1;2090;3;677040;-101080;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+40070;4;40040;102001080;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1157;4;17644;-11130280;7;1;2;1;-4;-1;37;2;777720;6;444430;-106206281282.01;37;1;77777700;8;44444400;133281206283280.0;37;0;0;0;0;0;0;0
+1111;4;-223;-1111;7;1;57777770;8;44444440;1.3014815028428527e+200;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;6440;-11482880;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21770;5;440;-111482890;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1770;4;440;-11502900;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-5;1;-4;131;7;1;9;1;-4;291292;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-1121;4;176970;-1111;7;2;-751117;6;44664;-293132111203.0;38;2;-1721107790.0;10;13422722044.04;-111110113195.0133;7;1;777;3;444;245124;7;1;38;2;57777777;8;44444444;1.3029414914314811e+23
+38;2;27770;5;44440;-1143107197.0;7;1;-521777;6;4970444;-13011270254255.0;38;1;777777770.0;10;4444444400.0;1.0e+INF;37;0;0;0;0;0;0;0;0;0;0;0
+777775;6;-444444;275200255254273.0;38;1;7777200;6;44449700;-300161206301.01;37;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+770;3;440;1922350;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-210770;6;660440;-1102543020.0;40;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-311111107777.0;13;666766704444.0;-1.111111019230218e+190;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2110770;7;66660440;-1110303107.0;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-3111117777777.0;15;6667674444444.0;-1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+107770;6;604440;-10305222197.0;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+177;3;244;-1266107;40;1;30020;4;60040;-10010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+1140200;5;1874017700.0;-111020100;12;1;22000170;6;667000640.0;-11000110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+10;1;-2107;4;2204;-110306;10;1;-3111077770.0;12;6666604444.0;-11110117307306.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-200210;5;7220;-100110;10;2;77730;5;44420;-3071042541.0;6;1;77777030;8;44444060;-307104104254.01;6;0;0;0;0;0;0;0;0;0;0;0;0;0
+-31070;5;66040;-1103070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+4;1;-4;308309;6;1;-31111077077777.0;14;666666044.044444;-1111103070.0310113;41;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-21109;5;-6676604;-1110314;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2110311107777777.0;17;6676606666.044444;-1.1101111031011322e+260;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2109;4;-671804;-110316;6;1;-310777770;9;660444440.0;-1.1030727022726222e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;3.171471071822153e+26;42;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11570;5;440;-1112610;43;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+9;1;-4;319;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrnat_names b/contrib/ML4PG/libs/ssreflect/basic/ssrnat_names
new file mode 100644
index 00000000..829f9c28
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/ssrnat_names
@@ -0,0 +1,326 @@
+1 succn_inj
+2 eqnP
+3 eqnE
+4 eqSS
+5 nat_irrelevance
+6 addnE
+7 plusE
+8 add0n
+9 addSn
+10 add1n
+11 addn0
+12 addnS
+13 addSnnS
+14 addnCA
+15 addnC
+16 addn1
+17 addnA
+18 addnAC
+19 addnACA
+20 addn_eq0
+21 eqn_add2l
+22 eqn_add2r
+23 addnI
+24 addIn
+25 addn2
+26 add2n
+27 addn3
+28 add3n
+29 addn4
+30 add4n
+31 subnE
+32 minusE
+33 sub0n
+34 subn0
+35 subnn
+36 subSS
+37 subn1
+38 subn2
+39 subnDl
+40 subnDr
+41 addKn
+42 addnK
+43 subSnn
+44 subnDA
+45 subnAC
+46 subnS
+47 subSKn
+48 ltnS
+49 leq0n
+50 ltn0Sn
+51 ltn0
+52 leqnn
+53 ltnSn
+54 eq_leq
+55 leqnSn
+56 leq_pred
+57 leqSpred
+58 ltn_predK
+59 prednK
+60 leqNgt
+61 ltnNge
+62 ltnn
+63 leqn0
+64 lt0n
+65 lt0n_neq0
+66 eqn0Ngt
+67 neq0_lt0n
+68 eqn_leq
+69 anti_leq
+70 neq_ltn
+71 gtn_eqF
+72 ltn_eqF
+73 leq_eqVlt
+74 ltn_neqAle
+75 leq_trans
+76 leq_ltn_trans
+77 ltnW
+78 leqW
+79 ltn_trans
+80 leq_total
+81 leP
+82 le_irrelevance
+83 ltP
+84 lt_irrelevance
+85 leqP
+86 ltnP
+87 posnP
+88 ltngtP
+89 leq_add2l
+90 ltn_add2l
+91 leq_add2r
+92 ltn_add2r
+93 leq_add
+94 leq_addr
+95 leq_addl
+96 ltn_addr
+97 ltn_addl
+98 addn_gt0
+99 subn_gt0
+100 subn_eq0
+101 leq_subLR
+102 leq_subr
+103 subnKC
+104 subnK
+105 addnBA
+106 subnBA
+107 subKn
+108 subSn
+109 subnSK
+110 leq_sub2r
+111 leq_sub2l
+112 leq_sub
+113 ltn_sub2r
+114 ltn_sub2l
+115 ltn_subRL
+116 subn_if_gt
+117 max0n
+118 maxn0
+119 maxnC
+120 maxnE
+121 maxnAC
+122 maxnA
+123 maxnCA
+124 maxnACA
+125 maxn_idPl
+126 maxn_idPr
+127 maxnn
+128 leq_max
+129 leq_maxl
+130 leq_maxr
+131 gtn_max
+132 geq_max
+133 maxnSS
+134 addn_maxl
+135 addn_maxr
+136 min0n
+137 minn0
+138 minnC
+139 addn_min_max
+140 minnE
+141 minnAC
+142 minnA
+143 minnCA
+144 minnACA
+145 minn_idPl
+146 minn_idPr
+147 minnn
+148 leq_min
+149 gtn_min
+150 geq_min
+151 geq_minl
+152 geq_minr
+153 addn_minr
+154 addn_minl
+155 minnSS
+156 maxnK
+157 maxKn
+158 minnK
+159 minKn
+160 maxn_minl
+161 maxn_minr
+162 minn_maxl
+163 minn_maxr
+164 find_ex_minn
+165 ex_minnP
+166 ex_maxn_subproof
+167 ex_maxnP
+168 eq_ex_minn
+169 eq_ex_maxn
+170 iterSr
+171 iterS
+172 iter_add
+173 iteriS
+174 iteropS
+175 eq_iter
+176 eq_iteri
+177 eq_iterop
+178 multE
+179 mulnE
+180 mul0n
+181 muln0
+182 mul1n
+183 mulSn
+184 mulSnr
+185 mulnS
+186 mulnSr
+187 muln1
+188 mulnC
+189 mulnDl
+190 mulnDr
+191 mulnBl
+192 mulnBr
+193 mulnA
+194 mulnCA
+195 mulnAC
+196 mulnACA
+197 muln_eq0
+198 muln_eq1
+199 muln_gt0
+200 leq_pmull
+201 leq_pmulr
+202 leq_mul2l
+203 leq_mul2r
+204 leq_mul
+205 eqn_mul2l
+206 eqn_mul2r
+207 leq_pmul2l
+208 leq_pmul2r
+209 eqn_pmul2l
+210 eqn_pmul2r
+211 ltn_mul2l
+212 ltn_mul2r
+213 ltn_pmul2l
+214 ltn_pmul2r
+215 ltn_Pmull
+216 ltn_Pmulr
+217 ltn_mul
+218 maxn_mulr
+219 maxn_mull
+220 minn_mulr
+221 minn_mull
+222 expnE
+223 expn0
+224 expn1
+225 expnS
+226 expnSr
+227 exp0n
+228 exp1n
+229 expnD
+230 expnMn
+231 expnM
+232 expnAC
+233 expn_gt0
+234 expn_eq0
+235 ltn_expl
+236 leq_exp2l
+237 ltn_exp2l
+238 eqn_exp2l
+239 expnI
+240 leq_pexp2l
+241 ltn_pexp2l
+242 ltn_exp2r
+243 leq_exp2r
+244 eqn_exp2r
+245 expIn
+246 factE
+247 fact0
+248 factS
+249 fact_gt0
+250 leq_b1
+251 addn_negb
+252 eqb0
+253 lt0b
+254 sub1b
+255 mulnb
+256 oddb
+257 odd_add
+258 odd_sub
+259 odd_opp
+260 odd_mul
+261 odd_exp
+262 doubleE
+263 double0
+264 doubleS
+265 addnn
+266 mul2n
+267 muln2
+268 doubleD
+269 doubleB
+270 leq_double
+271 ltn_double
+272 ltn_Sdouble
+273 leq_Sdouble
+274 odd_double
+275 double_gt0
+276 double_eq0
+277 doubleMl
+278 doubleMr
+279 doubleK
+280 uphalf_double
+281 uphalf_half
+282 odd_double_half
+283 half_bit_double
+284 halfD
+285 half_leq
+286 half_gt0
+287 mulnn
+288 sqrnD
+289 sqrn_sub
+290 sqrnD_sub
+291 subn_sqr
+292 ltn_sqr
+293 leq_sqr
+294 sqrn_gt0
+295 eqn_sqr
+296 sqrn_inj
+297 leqifP
+298 leqif_refl
+299 leqif_trans
+300 monotone_leqif
+301 leqif_geq
+302 leqif_eq
+303 geq_leqif
+304 ltn_leqif
+305 leqif_add
+306 leqif_mul
+307 nat_Cauchy
+308 nat_AGM2
+309 addE
+310 doubleE
+311 add_mulE
+312 mulE
+313 mul_expE
+314 expE
+315 oddE
+316 eq_binP
+317 bin_of_natK
+318 nat_of_binK
+319 nat_of_succ_gt0
+320 nat_of_addn_gt0
+321 nat_of_add_bin
+322 nat_of_mul_bin
+323 nat_of_exp_bin
+324 nat_semi_ring
+325 nat_semi_morph
+326 nat_power_theory
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tactics.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tactics.csv
new file mode 100644
index 00000000..26c705fa
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tactics.csv
@@ -0,0 +1,326 @@
+-6;-6;-11;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;-2;-11;12;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;13;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+-6;0;-1;14;1;0;0;0;0;0;-6;0;-1;14;1;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;15;1;0;0;0;0;0;-6;0;-1;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;104124;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;103181103;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;107181107;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182107;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-666;-1111;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182181;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107105;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-666;-1111;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;105107108;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107110;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;103110232;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;107212;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+-6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114107;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;126114129;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;115;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+-6;-6;-11;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;148124;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;148187164150.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;148119124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;0;0;0;0;0;-4;0;143;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;150120121119143.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;2;1;0;0;0;0;0;0;0;0;0;0;-4;4;125150;2;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
+0;0;0;0;0;-2;0;-1;7;1;-2;0;-1;97;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;120202124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;56;2;-2;0;-1;6;1;0;0;0;0;0;-4;0;105105;66;2;0;0;0;0;0;-4;0;1.2612723312723312e+17;6666;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;9;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;-4;0;-1;25;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;150150129;2525;2;0;0;0;0;0;0;0;0;25;1;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;202;26;1;0;0;0;0;0;0;0;0;26;1;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;27;1;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;287;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;206148120164.0;287;2;0;0;0;0;0;0;0;0;287;2;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;133;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;103130;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107213;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;135187136;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;137114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;138134;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;234182140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;234141;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;-4;0;212;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;130124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;110;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;138124138;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;131138;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;111112;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150138;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;234143140;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;14;1;0;0;0;0;0
+-6;-6;-11;16;1;-9;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;128182114128144.0;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;144145;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;139144;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-666;-1111;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;139142;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;137105103128.0;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;144;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;29;1;0;0;0;0;0;0;0;0;0;0;-4;0;115;29;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;44;1.1314416414614712e+17;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148154;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;144149;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;150148121;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202150;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;128;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;128141151;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107152;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;32;1;0;0;0;0;0
+-6;-6;-11;16;1;-9;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;0;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;110128153140154.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;1.5511415612814413e+23;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;154157154;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;158154;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-666;-1111;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;158159;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;160105143153161.0;9;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;9;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;154;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;29;1;0;0;0;0;0;0;0;0;0;0;-4;0;117;29;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;44;1.1315414915016315e+17;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;150164187;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202165;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;166154;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;154167;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;155110168169.0;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107170;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;170;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+-2;-22;-111;307;2;0;0;0;0;0;0;0;0;0;0;-4;-4;139123;6;1;0;0;0;0;0;-4;0;122;7;1;-4;4;1.5415417117217315e+20;762;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;144175;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;1.761751581401442e+17;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;154178;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;0;1;7;1;-11;0;-1;33772;4;-2;0;-1;33;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;103235180206181.0;33772;4;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;-1;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-11;0;-1;35;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182183;35;1;8;0;1;35;1;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;-1;36;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;137184124169.01071;3622;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-14;0;-1;7;1;0;0;-1;77;2;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;0;0;0;0;0;-4;4444;148185186187.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-14;0;-1;7;1;0;0;-1;77;2;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;148188187189187.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-66;-111;7;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;190;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-66;-111;7;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;190;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;192143181124.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107193;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;194195;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-6;-11;16;1;0;0;0;0;0;-6;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;196192124;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;30;1;0;0;0;0;0;-6;0;-1;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182117;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197198;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;-2;-11;30;1;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;195192110117.0;306;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197199;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;17;1;0;0;0;0;0;-6;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;192198124;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;200197;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;200197;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-666;-1111;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;200201;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;195;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;195;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;195;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;127;7;1;0;0;0;0;0;-4;0;197;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;202203;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197204;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;2.042062072082092e+17;22;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;148204210148.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;148208210148.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;204;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;208;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;211;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;212;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;135150204121.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;135150208121.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;213;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;214;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;215216;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197217;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;204164201216124.0;22;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;155;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197219;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;155;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197220;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;221;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197222;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;222215;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;223192200;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;222192200201.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;224225222226192.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;227197;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;222228192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;229230121135.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;-2;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;231;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;-1;7;1;0;0;0;0;0;-2;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;222231192201.023;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150233;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148233;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;234124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;224112113235.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;224112113236.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;-2;0;-1;22;2;-4;-4;122122;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.5022223823924026e+17;722;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;119242119;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148243;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;244124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;245;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;246192247246.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;250234;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;251;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;250246252117.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-2;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;222253192164.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;192215254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197255;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;254182181;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;256;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;257258;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;259258;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;119260119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;254250261;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;255200;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;262200;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182183;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;263264;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;265;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;266181266182264.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;7;1;0;0;0;0;0;-4;44;269182134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;222221;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;1.0e+INF;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;129;7;1;0;0;0;0;0;-4;444;272273182151.02;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;275200255254114.03;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;1.9927110719711027e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;243;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;244;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;11;1
+0;0;0;0;0;-3;0;-1;97;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;206279;99;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-16;-16;-11;7;1;-4;0;-1;3737;2;0;0;0;0;0;-4;0;130;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;280106206281282.0;73737;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-223;-1111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;130;8;1;0;0;0;0;0;0;0;0;0;0;-4;44444;1.4815028428528627e+17;8;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148288;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
+0;0;0;0;0;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148289;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150290;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+-16;-16;-11;7;1;-9;0;-1;77;2;0;0;0;0;0;-4;0;130;38;1;-4;-444;1.3213413113513614e+20;38383877;5;-4;0;0;7;1;-4;0;1.0e+INF;3838773837.0;6;0;0;0;0;0;0;0;0;0;0;-4;0;100100;77;2
+0;0;0;0;0;-4;0;-1;738;2;0;0;0;0;0;-4;0;130;38;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.4310719727025426e+38;73837;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-9;0;-1;37;1;0;0;0;0;0;-4;0;130;38;1;0;0;0;0;0;0;0;0;0;0;-4;4444;275200255254273.03;3837;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;192235;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;40;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;254302;40;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;192302181182.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;303107;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;2.152221923042012e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;305222197;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;0;-1;40;1;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;266107;40;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-17;-17;-11;12;1;-17;0;-1;1277;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-2;0;-1;10;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;306117307306.0;106;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;1;0;-1;1010;2;-2;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;3.071042543071041e+20;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;307;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;-6;0;-1;41;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;3.073101133113123e+17;4141;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;-6;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;3.101132233073113e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-6;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;307270227262222.0;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;42;1
+0;0;11;43;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;43;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;44;1
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tree.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tree.csv
new file mode 100644
index 00000000..73b0d461
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tree.csv
@@ -0,0 +1,326 @@
+-66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-22;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-6;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;-4;0;0;4;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;-2;100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;-2;0;0;-4;0;444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;0;0;0;44;0;25;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;0;0;0;0;0;0;0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;0;0;0;0;0;44;0;287;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;-9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;-9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;0;0;0;0;0;4;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-222;0;0;0;-44;0;-4;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;-11;-2;100;0;0;0;44;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-11;0;0;0;0;0;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-14;0;0;0;-4;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-14;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;-6;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-22;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-60;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-60;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;0;0;0;0;444444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-2;100;-44;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-66;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-60;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-3;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-176;-4;0;0;-4;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-223;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-176;-9;0;0;-4;-4;0;44444444444.0;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-4;0;0;-4;0;0;44444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-9;0;0;-4;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;-4;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-187;-17;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-2;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;1;-2;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;-6;100;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;-6;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;-6;-6;0;0;0;0;4444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix.csv b/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix.csv
new file mode 100644
index 00000000..21129939
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix.csv
@@ -0,0 +1,46 @@
+77490,5,44440,102103104105.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-141410,6,646460,-1106110610.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+117770,6,664440,-111070,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1081090,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,0,10,1,777,3,444,110109111,10,1,777,3,444,110109111,10,1,70,2,40,1120,10,0,0,0,0,0,0,0
+-4170,4,4640,-10611130,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1140,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1140,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+111,3,-778,-111,11,1,5114,4,-4994,-10511115,6,1,770,3,440,1161170,10,0,0,0,0,0,0,0,0,0,0,0,0,0
+5570,4,4440,10610910,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-2111117,7,10767314,-111111118,7,1,7777,4,4444,110108109,6,1,70,2,40,1090,13,0,0,0,0,0,0,0,0,0,0,0,0,0
+1777700,7,6444400,-110711900,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7,2,-4117,4,4314,-12011121,6,2,-777417,6,444464,-122123124125.01126,6,3,70,2,40,1270,6,2,1770,4,6440,-11281290,7,1,7,1,4,121
+777,3,444,130,6,1,-414170,6,464640,-10611061131.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-12,-1,7,1,577,3,444,108108121,6,2,77777700,8,44444400,110121108127.0,6,1,77777770,8,44444440,131110121110.0,10,2,770,3,440,1321160,6,1
+15,2,-134,-1108,7,3,7770,4,4440,1331211340.0,6,2,7777,4,4444,135121134,6,2,777700,6,444400,1331271340.0,6,1,777770,6,444440,128135121134.0,10,1
+7777,4,4444,136137138,14,1,51170,5,46640,-105111310,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+777,3,444,136139,15,1,51170,5,46640,-105111310,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7777,4,4444,136137138,14,1,51170,5,46640,-105111310,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7,1,4,0,6,1,6,1,6,2,1,1,-14,-1,7,2,6,3,-11110,5,66400,-11110,16,2,7777700,7,4444400,133104117134.0,6,1
+7,2,11,2,-34,-11,7,2,77,2,44,135,6,3,-777017701.0,10,44401144015.0,-10401133142.01,6,2,70,2,40,1330,13,1,17,2,114,-1117
+5,1,-4,108,6,3,70,2,40,1440,6,2,70,2,40,1450,6,1,77,2,44,0,10,1,10,3,7,1,4,232
+57,2,44,108140,6,2,77770,5,44440,1431241400.0,6,1,77777770,8,44444440,143111143111131.0,10,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1471480,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7720,4,44160,-20210,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+15,2,-74,-1108,5,3,-772177,6,4410244,-21012111103233.0,6,3,770,3,440,1552130,6,2,77777090,9,44444040,1561270157.0,6,1,77777700,8,44444400,1561311160.0,10,0
+15,2,-74,-1108,5,3,7770,4,4440,1991212120.0,6,2,77777700,9,44444400,1581271590.0,6,1,77777700,8,44444400,1581311160.0,10,0,0,0,0,0,0,0
+15,2,-74,-1108,5,3,770,3,440,1081210,6,2,77777770,9,44444440,110121210127.0,6,2,-2177,4,10244,-11103233,6,2,770,3,440,1552130,6,1
+15,2,-74,-1108,5,3,770,3,440,1081210,6,2,777770,6,444440,1101211990.0,6,2,77700,5,44400,12721200,6,1,777770,6,444440,1101210,10,1
+770,3,440,1601610,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1621610,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1601630,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1621630,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1777,4,11444,-1135,7,2,770,3,440,1061270,6,1,770,3,440,1211340,13,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-4,108,6,3,7770,4,4440,1331211340.0,6,2,70,2,40,1640,6,1,77777,5,44444,131135121,10,2,7770,4,4440,2091270,10,2
+17777,5,114444,-1209121,7,1,27,2,44,-1127,6,1,777707,6,444404,1271652340.0107,6,1,770,3,440,1661170,2,0,0,0,0,0,0,0
+5,1,-4,108,6,3,770,3,440,1061210,6,2,70,2,40,1670,6,1,777,3,444,131,10,1,77,2,44,209121,10,1
+577,3,444,108108121,10,2,77777700,8,44444400,110121210127.0,6,1,777770,6,444440,1101210,10,1,7770,4,4440,1311161680.0,10,0,0,0,0,0,0,0
+7770,4,4440,1691700,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+57,2,44,108121,6,2,777700,6,444400,1271711720.0,6,1,7077777,6,4044444,1.1601721731741752e+18,10,1,70,2,40,1760,6,0,0,0,0,0,0,0
+577,3,444,108108177,6,2,9,1,-4,178,7,1,777777020.07,13,4444440400.04,-1791310100.0148,10,0,0,0,0,0,0,0,0,0,0,0,0,0
+577,3,444,108108177,6,2,9,1,-4,178,7,1,77702770,8,444016440,-17913101180148.0,10,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1811800,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+77,2,44,139,6,1,51170,5,46640,-105111310,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-170,3,40,-100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_names b/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_names
new file mode 100644
index 00000000..694a3a2d
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_names
@@ -0,0 +1,49 @@
+1 ord_enum_eqE
+2 eq_mkseqmx_ord
+3 fun_of_seqmxE
+4 mkseqmxE
+5 size_seqmx
+6 seqmxE
+7 seqmx_is_trans
+8 seqmx0n
+9 seqmxm0
+10 inj_seqmx_of_mx
+11 seqmx_eqP
+12 size_row_seqmx
+13 size_row_mkseqmx
+14 seqmxP
+15 seqmx_of_funE
+16 map_seqmxE
+17 zipwithseqmxE
+18 addseqmxE:
+
+19 oppseqmxE:
+
+20 subseqmxE:
+
+21 size_trseqmx
+22 size_row_trseqmx
+23 trseqmxE
+24 const_seqmxE
+25 seqmx0E
+26 minSS
+27 usubseqmxE
+28 dsubseqmxE
+29 lsubseqmxE
+30 rsubseqmxE
+31 ulsubseqmxE
+32 ursubseqmxE
+33 dlsubseqmxE
+34 drsubseqmxE
+35 size_row_row_seqmx
+36 row_seqmxE
+37 size_row_col_seqmx
+38 col_seqmxE
+39 colseqmxE
+40 block_seqmxE
+41 cast_seqmx
+42 scalar_seqmxE
+43 delta_seqmxE
+44 seqmx1E
+45 scaleseqmxE
+46 seqmx_of_mx_eq0
diff --git a/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_tactics.csv b/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_tactics.csv
new file mode 100644
index 00000000..3057f33d
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_tactics.csv
@@ -0,0 +1,45 @@
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;10;1;0;0;0;0;0
+-6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;107;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.1010911111010912e+20;101010101010.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7;-78;-111;11;1;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;116117;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;106109;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;118110108109109.0;76613;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;107119;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.2112212312412612e+32;666677610.0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;130131;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0812111012110813e+17;6610613;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-13;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.3312113413512114e+56;66661010101010.0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;136137138131.0;14146;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;136139131;15156;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;136137138131.0;14146;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-14;0;-1;716161616.0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;133104117134.01172;6661616;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;-14;-111;767;3;-16;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;-4;4;1.3510413314213311e+32;66613761313.0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-10;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;-4;0;0;13;1;-4;0;1.4414502321331243e+45;661077710131013.0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.4014312414014311e+26;6610;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;147148;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-16;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7;0;-1;5;1;-10;0;-1;6;1;0;0;0;0;0;-4;0;108;5;1;0;0;0;0;0;0;0;0;0;0;-4;4;2.101211032331552e+32;666610;5;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
+-7;0;-1;5;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;5;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.9912121215812717e+26;6610;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7;0;-1;5;1;-10;0;-1;6;1;0;0;0;0;0;-4;0;108;5;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0812111012121013e+17;66661010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7;0;-1;5;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;5;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0812111012119913e+35;6661010;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160161;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;162161;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160163;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;162163;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;135106127121134.0;7613;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.3312113416413113e+35;661010102.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-11;0;-1;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;2.0912112712716523e+26;76662;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0612116713120912e+23;66101010;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;10;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0812111012121013e+17;1061010;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;169170;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;10;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.2112717117211617e+29;6610106;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;-4;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108177179131148.0;61010;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;-16;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0817717913118014e+17;61010;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;181180;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;139131;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/available.txt b/contrib/ML4PG/libs/ssreflect/jvm/available.txt
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/available.txt
@@ -0,0 +1 @@
+1
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/expt.csv b/contrib/ML4PG/libs/ssreflect/jvm/expt.csv
new file mode 100644
index 00000000..68738b5a
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/expt.csv
@@ -0,0 +1,6 @@
+-1131111110.0,10,622222662.0,-1111111110.0,6,2,7770,4,4440,1021030,6,1,777770,6,444440,104105106107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1081090,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-11311110,8,22227220,-11111110,6,1,7,1,4,104,6,1,6,1,770,3,440,1291100,6,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1111120,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1131140,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1770,4,6440,-11151160,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/expt_names b/contrib/ML4PG/libs/ssreflect/jvm/expt_names
new file mode 100644
index 00000000..3678e929
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/expt_names
@@ -0,0 +1,6 @@
+1 helper_expt_is_theta
+2 fn_expt_is_theta
+3 loop_is_helper_expt
+4 program_is_fn_expt
+5 program_correct_expt
+6 total_correctness_expt
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/expt_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/expt_tactics.csv
new file mode 100644
index 00000000..d4257d07
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/expt_tactics.csv
@@ -0,0 +1,5 @@
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;-2;11;6;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104129110;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;111112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;113114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;115116;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/factorial.csv b/contrib/ML4PG/libs/ssreflect/jvm/factorial.csv
new file mode 100644
index 00000000..452cfa2a
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/factorial.csv
@@ -0,0 +1,6 @@
+-1311110,7,2626620,-1111110,6,2,7770,4,4440,1021030,6,1,777770,6,444440,104105106107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1081090,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-131110,6,222720,-111110,6,1,7,1,4,104,6,1,6,1,7770,4,4440,1291101070.0,6,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1111120,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1131140,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1770,4,6440,-11151160,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/factorial_names b/contrib/ML4PG/libs/ssreflect/jvm/factorial_names
new file mode 100644
index 00000000..4f30297f
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/factorial_names
@@ -0,0 +1,6 @@
+1 helper_fact_is_theta
+2 fn_fact_is_theta
+3 loop_is_helper_fact
+4 program_is_fn_fact
+5 program_correct_fact
+6 total_correctness_fact
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/factorial_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/factorial_tactics.csv
new file mode 100644
index 00000000..6009bc20
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/factorial_tactics.csv
@@ -0,0 +1,5 @@
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;0;1;6;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104129110107.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;111112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;113114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;115116;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/fib.csv b/contrib/ML4PG/libs/ssreflect/jvm/fib.csv
new file mode 100644
index 00000000..0ddee49a
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/fib.csv
@@ -0,0 +1,6 @@
+-1131111110.0,10,2222226220.0,-1111111110.0,7,1,2,1,-4,-1,7,2,-11,2,-77,-11,7,2,20,1,780,-10,7,2,7770,4,4440,1021031470.0,6,1
+2,1,-4,-1,6,2,777770,6,444440,109110111147.0,6,1,-120,3,770,-110,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+-11311110,8,22226220,-11111110,6,1,2,1,-4,-1,6,2,-1570,4,9440,-110910,6,1,777,3,444,112113104,6,1,6,1,7777,4,4444,114115
+770,3,440,1181190,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1201210,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+17770,5,94440,-11121220,7,1,20,2,40,-10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/fib_names b/contrib/ML4PG/libs/ssreflect/jvm/fib_names
new file mode 100644
index 00000000..9d5d2041
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/fib_names
@@ -0,0 +1,6 @@
+1 helper_fib_is_theta
+2 fn_fib_is_theta
+3 loop_is_helper_fib
+4 program_is_fn_fib
+5 program_correct_fib
+6 total_correctness_fib
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/fib_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/fib_tactics.csv
new file mode 100644
index 00000000..6a12973c
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/fib_tactics.csv
@@ -0,0 +1,5 @@
+-7;0;1;6;1;-4;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;109110111147.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;-2;111;66;2;-4;0;-1;6;1;-2;0;-1;6;1;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;-4;44;1.1211310411411512e+35;666666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;118119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;120121;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-9;0;-1;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;112122;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/lessp.csv b/contrib/ML4PG/libs/ssreflect/jvm/lessp.csv
new file mode 100644
index 00000000..e63f16f1
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/lessp.csv
@@ -0,0 +1,6 @@
+-1311120,7,6666660,-1111110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1020,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-13111210,8,2267228220.0,-11111110,6,1,7,1,4,103,6,1,6,1,770,3,440,1291040,6,0,0,0,0,0,0,0,0,0,0,0
+70,2,40,1050,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1061070,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+17770,5,94440,-11081090,7,1,20,2,40,-10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/lessp_names b/contrib/ML4PG/libs/ssreflect/jvm/lessp_names
new file mode 100644
index 00000000..2597bfc9
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/lessp_names
@@ -0,0 +1,6 @@
+1 helper_less_is_theta
+2 fn_less_is_theta
+3 loop_is_helper_less
+4 program_is_fn_less
+5 program_correct_less
+6 total_correctness_less
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/lessp_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/lessp_tactics.csv
new file mode 100644
index 00000000..fbed8ac4
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/lessp_tactics.csv
@@ -0,0 +1,5 @@
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;102;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;0;1;6;1;-2;0;-1;6;1;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;103129104;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-9;0;-1;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;108109;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/m1.csv b/contrib/ML4PG/libs/ssreflect/jvm/m1.csv
new file mode 100644
index 00000000..292833aa
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/m1.csv
@@ -0,0 +1,3 @@
+0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-113111110,10,678269670.0,-111111110,6,1,70,2,40,1020,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,2,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/m1_names b/contrib/ML4PG/libs/ssreflect/jvm/m1_names
new file mode 100644
index 00000000..b4b885f6
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/m1_names
@@ -0,0 +1,3 @@
+1 step_opener
+2 run_app
+3 run_opener
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/m1_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/m1_tactics.csv
new file mode 100644
index 00000000..6b5a32b2
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/m1_tactics.csv
@@ -0,0 +1,2 @@
+-6;-7;11;6;1;0;0;0;0;0;-8;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/multiplication.csv b/contrib/ML4PG/libs/ssreflect/jvm/multiplication.csv
new file mode 100644
index 00000000..22b76d2d
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/multiplication.csv
@@ -0,0 +1,6 @@
+-11311110,9,22226220,-11111110,6,1,777770,6,444440,102103182107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1041470,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-11311110,8,22226220,-11111110,6,1,7,1,4,102,6,1,6,1,770,3,440,1291050,6,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1061070,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1081090,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1770,4,7440,-11101110,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/multiplication_names b/contrib/ML4PG/libs/ssreflect/jvm/multiplication_names
new file mode 100644
index 00000000..f3303d78
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/multiplication_names
@@ -0,0 +1,6 @@
+1 helper_mul_is_theta
+2 fn_mul_is_theta
+3 loop_is_helper_mul
+4 program_is_fn_mul
+5 program_correct_mul
+6 total_correctness_mul
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/multiplication_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/multiplication_tactics.csv
new file mode 100644
index 00000000..5048c718
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/multiplication_tactics.csv
@@ -0,0 +1,5 @@
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;104147;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;-2;11;6;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102129105;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-7;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;110111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/power.csv b/contrib/ML4PG/libs/ssreflect/jvm/power.csv
new file mode 100644
index 00000000..cda62b6f
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/power.csv
@@ -0,0 +1,6 @@
+-1311110,7,2626620,-1111110,6,2,7770,4,4440,1021030,6,1,777777770.0,9,444444440,1.0410510610710711e+200,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+7770,4,4440,1091100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-131110,6,222720,-111110,6,1,7,1,4,104,6,1,6,1,770,3,440,1291110,6,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1121130,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+770,3,440,1141150,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1770,4,6440,-11161170,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/power_names b/contrib/ML4PG/libs/ssreflect/jvm/power_names
new file mode 100644
index 00000000..026bd36d
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/power_names
@@ -0,0 +1,6 @@
+1 helper_power_is_theta
+2 fn_power_is_theta
+3 loop_is_helper_power
+4 program_is_fn_power
+5 program_correct_power
+6 total_correctness_power
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/power_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/power_tactics.csv
new file mode 100644
index 00000000..1c056429
--- /dev/null
+++ b/contrib/ML4PG/libs/ssreflect/jvm/power_tactics.csv
@@ -0,0 +1,5 @@
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;109110;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-2;0;1;6;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104129111;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;112113;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114115;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;116117;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/ml4pg.el b/contrib/ML4PG/ml4pg.el
new file mode 100644
index 00000000..e2d06e00
--- /dev/null
+++ b/contrib/ML4PG/ml4pg.el
@@ -0,0 +1,56 @@
+(defvar ml4pg-home-dir (concatenate 'string proof-home-directory "contrib/ML4PG/"))
+(defconst *matlab-program* nil)
+(defconst *weka-dir* (concatenate 'string proof-home-directory "contrib/ML4PG/weka.jar"))
+
+
+(defvar ml4pg-mode nil)
+
+(defun ml4pg-select-mode ()
+ (interactive)
+ (let ((smode (read-string "What mode do you want to use (Coq -> c (default), SSReflect -> s): ")))
+ (setq ml4pg-mode smode)
+ (cond ((string= ml4pg-mode "s")
+ (progn (load-file (concat ml4pg-home-dir "ssreflect/auxiliary_files.el"))
+ (load-file (concat ml4pg-home-dir "ssreflect/feature_extraction_2.el"))
+ (load-file (concat ml4pg-home-dir "ssreflect/matlab_interaction.el"))
+ (load-file (concat ml4pg-home-dir "ssreflect/shortcuts.el"))
+ (load-file (concat ml4pg-home-dir "ssreflect/menus.el"))
+ (load-file (concat ml4pg-home-dir "ssreflect/storage.el"))
+ (load-file (concat ml4pg-home-dir "ssreflect/save_lemmas.el"))
+ (load-file (concat ml4pg-home-dir "ssreflect/weka.el"))
+ (ml4pg-init-clusters)
+ (ml4pg-activate-icons)
+ (ml4pg-exported-libraries)
+ ))
+ (t (progn (load-file (concat ml4pg-home-dir "coq/auxiliary_files.el"))
+ (load-file (concat ml4pg-home-dir "coq/feature_extraction.el"))
+ (load-file (concat ml4pg-home-dir "coq/matlab_interaction.el"))
+ (load-file (concat ml4pg-home-dir "coq/shortcuts.el"))
+ (load-file (concat ml4pg-home-dir "coq/menus.el"))
+ (load-file (concat ml4pg-home-dir "coq/storage.el"))
+ (load-file (concat ml4pg-home-dir "coq/save_lemmas.el"))
+ (load-file (concat ml4pg-home-dir "coq/weka.el"))
+ (ml4pg-init-clusters)
+ (ml4pg-activate-icons)
+ (ml4pg-exported-libraries)
+ ))
+ ))
+ (let ((ex? (read-string "Do you want to extract the features of the lemmas of this library (Yes -> y, No -> n): ")))
+ (if (string= ex? "y")
+ (progn (let ((b (buffer-name)))
+ (ml4pg-extract-theorems-library)
+ (delete-other-windows)
+ (switch-to-buffer-other-window "*display*")
+ (delete-other-windows)
+ (switch-to-buffer-other-window b)
+ (delete-other-windows)
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
+ ))
+ nil
+ )))
+
+
+
+
+
+
diff --git a/contrib/ML4PG/out.arff b/contrib/ML4PG/out.arff
new file mode 100644
index 00000000..1b038403
--- /dev/null
+++ b/contrib/ML4PG/out.arff
@@ -0,0 +1,108 @@
+@relation 'empty-weka.filters.unsupervised.attribute.AddCluster-Wweka.clusterers.EM -I 100 -N 8 -M 1.0E-6 -S 42-Ilast'
+
+@attribute 1 numeric
+@attribute 2 numeric
+@attribute 3 numeric
+@attribute 4 numeric
+@attribute 5 numeric
+@attribute 6 numeric
+@attribute 7 numeric
+@attribute 8 numeric
+@attribute 9 numeric
+@attribute 10 numeric
+@attribute 11 numeric
+@attribute 12 numeric
+@attribute 13 numeric
+@attribute 14 numeric
+@attribute 15 numeric
+@attribute 16 numeric
+@attribute 17 numeric
+@attribute 18 numeric
+@attribute 19 numeric
+@attribute 20 numeric
+@attribute 21 numeric
+@attribute 22 numeric
+@attribute 23 numeric
+@attribute 24 numeric
+@attribute 25 numeric
+@attribute 26 numeric
+@attribute 27 numeric
+@attribute 28 numeric
+@attribute 29 numeric
+@attribute 30 numeric
+@attribute cluster {cluster1,cluster2,cluster3,cluster4,cluster5,cluster6,cluster7,cluster8}
+
+@data
+
+1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0,cluster2
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
+1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
+1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
+1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,cluster2
+5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0,cluster2
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
+11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster5
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
+5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0,cluster2
+34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
+5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1,cluster2
+5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0,cluster2
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1,cluster2
+111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.15,6,1,6,1,-4,100.15,6,1,cluster2
+1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,cluster2
+11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0,cluster3
+1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster3
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster3
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,cluster2
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0,cluster3
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.196875,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+5,1,-2,-1,5,2,6,1,-4,100.196875,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0,cluster2
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-52,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.199219,6,1,4,1,0,0,6,0,cluster2
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199902,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-25,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-5,-1,5,1,6,1,-4,100.199219,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199609,6,1,6,1,-4,100.199219,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951,6,1,6,1,-4,100.199951,6,1,cluster2
+1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-25,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-52,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199902,6,1,6,1,-4,100.199976,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.199902,6,1,6,1,-4,100.199976,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199219,6,1,6,1,-4,100.199988,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.199219,6,1,cluster6
+1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,cluster7
+111,3,-354,-1,557,1,6,1,-4,100.199994,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
diff --git a/contrib/ML4PG/out_bis.arff b/contrib/ML4PG/out_bis.arff
new file mode 100644
index 00000000..0583ec87
--- /dev/null
+++ b/contrib/ML4PG/out_bis.arff
@@ -0,0 +1,72 @@
+1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0,cluster2
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
+1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
+1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
+1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,cluster2
+5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0,cluster2
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
+11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster5
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
+5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0,cluster2
+34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
+5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1,cluster2
+5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0,cluster2
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1,cluster2
+111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.15,6,1,6,1,-4,100.15,6,1,cluster2
+1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,cluster2
+11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0,cluster3
+1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster3
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster3
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,cluster2
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0,cluster3
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.196875,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+5,1,-2,-1,5,2,6,1,-4,100.196875,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0,cluster2
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-52,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.199219,6,1,4,1,0,0,6,0,cluster2
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199902,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-25,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-5,-1,5,1,6,1,-4,100.199219,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199609,6,1,6,1,-4,100.199219,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951,6,1,6,1,-4,100.199951,6,1,cluster2
+1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-25,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-52,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199902,6,1,6,1,-4,100.199976,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+11,2,-22,-1,55,1,6,1,-4,100.199902,6,1,6,1,-4,100.199976,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
+1,1,-2,-1,5,1,6,1,-4,100.199219,6,1,6,1,-4,100.199988,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.199219,6,1,cluster6
+1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,cluster7
+111,3,-354,-1,557,1,6,1,-4,100.199994,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
diff --git a/contrib/ML4PG/ssreflect/auxiliary_files.el b/contrib/ML4PG/ssreflect/auxiliary_files.el
new file mode 100644
index 00000000..95a4ce0a
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/auxiliary_files.el
@@ -0,0 +1,23 @@
+(defun ml4pg-quicksort-pair (list)
+ (if (<= (length list) 1)
+ list
+ (let ((pivot (cadar list)))
+ (append (ml4pg-quicksort-pair (remove-if-not #'(lambda (x) (> (cadr x) pivot)) list))
+ (remove-if-not #'(lambda (x) (= (cadr x) pivot)) list)
+ (ml4pg-quicksort-pair (remove-if-not #'(lambda (x) (< (cadr x) pivot)) list))))))
+
+
+(defun ml4pg-zip (l1 l2)
+ (do ((temp1 l1 (cdr temp1))
+ (temp2 l2 (cdr temp2))
+ (res nil))
+ ((endp temp1) res)
+ (setf res (append res (list (append (list (car temp1)) (list (car temp2))))))))
+
+(defun ml4pg-unzip (l)
+ (do ((temp l (cdr temp))
+ (res1 nil)
+ (res2 nil))
+ ((endp temp) (list (reverse res1) (reverse res2)))
+ (progn (setf res1 (cons (caar temp) res1))
+ (setf res2 (cons (cadr (car temp)) res2)))))
diff --git a/contrib/ML4PG/ssreflect/feature_extraction_2.el b/contrib/ML4PG/ssreflect/feature_extraction_2.el
new file mode 100644
index 00000000..36cc53b2
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/feature_extraction_2.el
@@ -0,0 +1,1282 @@
+;;; This is the feature vector extraction file for SSReflect
+
+;; Different variables which are used to store information about
+;; the numbers associated with tactics, rewrite rules, types, ...
+
+(defvar ml4pg-hypothesis nil)
+
+(defvar ml4pg-saved-theorems nil)
+(defvar ml4pg-goal-level-temp nil)
+(defvar ml4pg-tactic-level nil)
+(defvar ml4pg-proof-tree-level nil)
+
+;; Variables to store the different values associated with the tactics, the
+;; types or the rewrite rules
+
+(defvar ml4pg-tactic_id '(("move" . 1)
+ ("case" . 2)
+ ("elim" . 3)
+ ("apply" . 4)
+ ("apply/" . 5)
+ ("move/" . -5)
+ ("case/" . 6)
+ ("rewrite" . 7)
+ ("exists" . 8)
+ ("[]" . 0)
+ ("exact" . 9)))
+
+
+(defvar ml4pg-move nil)
+(defvar ml4pg-case nil)
+(defvar ml4pg-elim nil)
+(defvar ml4pg-apply nil)
+(defvar ml4pg-apply/ nil)
+(defvar ml4pg-move/ nil)
+(defvar ml4pg-case/ nil)
+(defvar ml4pg-rewrite nil)
+(defvar ml4pg-exists nil)
+(defvar ml4pg-done nil)
+(defvar ml4pg-exact nil)
+
+
+(defvar ml4pg-types_id '(("nat" . -2)
+ ("Prop" . -4)
+ ("bool" . -3)
+ ("T" . -1)
+ ("seq" . -5)))
+
+(defvar ml4pg-types_id_n -6)
+(defvar ml4pg-views_id nil)
+(defvar ml4pg-theorems_id nil)
+
+(defvar ml4pg-top-symbol-id
+ '(("forall" . 5)
+ ("@eq" . 6)
+ ("and" . 4)
+ ("iff" . 8)
+ ("or" . 3)
+ ("is_true" . 2)
+ ("reflect" . 9)
+ ))
+
+(defvar ml4pg-top-symbol-n 10)
+
+
+(defvar ml4pg-add_to 0.1)
+(defvar ml4pg-start 100)
+
+(defvar ml4pg-start_view 101)
+(defvar ml4pg-start_thm 101)
+
+
+(defvar ml4pg-init 0)
+
+(defvar ml4pg-current-level 1)
+(defvar ml4pg-dot-level nil)
+
+;;; Proof tree levels
+
+(defvar ml4pg-tdl1 nil)
+(defvar ml4pg-tdl2 nil)
+(defvar ml4pg-tdl3 nil)
+(defvar ml4pg-tdl4 nil)
+(defvar ml4pg-tdl5 nil)
+
+(defun ml4pg-add-info-to-level-aux (info list)
+ (if (not list)
+ info
+ (do ((temp list (cdr temp))
+ (temp1 info (cdr temp1))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (cond ((= (car temp) 0) (setf temp2 (append temp2 (list (car temp1)))))
+ ((= (car temp1) 0) (setf temp2 (append temp2 (list (car temp)))))
+ (t (setf temp2 (append temp2 (list (string-to-number (format "%s%s" (car temp) (car temp1)))))))))))
+
+(defun ml4pg-add-info-to-level (info level)
+ (cond ((= level 1) (setf ml4pg-tdl1 (ml4pg-add-info-to-level-aux info ml4pg-tdl1)))
+ ((= level 2) (setf ml4pg-tdl2 (ml4pg-add-info-to-level-aux info ml4pg-tdl2)))
+ ((= level 3) (setf ml4pg-tdl3 (ml4pg-add-info-to-level-aux info ml4pg-tdl3)))
+ ((= level 4) (setf ml4pg-tdl4 (ml4pg-add-info-to-level-aux info ml4pg-tdl4)))
+ ((= level 5) (setf ml4pg-tdl5 (ml4pg-add-info-to-level-aux info ml4pg-tdl5)))
+ (t nil)
+ ))
+
+;;; Main function of this file, it is in charge of extracting the
+;;; information associated with a theorem
+
+
+(defun ml4pg-export-theorem ()
+ (interactive)
+ (progn (setf ml4pg-tdl1 nil
+ ml4pg-tdl2 nil
+ ml4pg-tdl3 nil
+ ml4pg-tdl4 nil
+ ml4pg-tdl5 nil
+ ml4pg-move nil
+ ml4pg-case nil
+ ml4pg-elim nil
+ ml4pg-apply nil
+ ml4pg-apply/ nil
+ ml4pg-move/ nil
+ ml4pg-case/ nil
+ ml4pg-rewrite nil
+ ml4pg-exists nil
+ ml4pg-done nil
+ ml4pg-exact nil
+ ml4pg-current-level 1
+ ml4pg-dot-level nil
+ ml4pg-hypothesis nil
+ ml4pg-goal-level nil)
+ (if (equal ml4pg-init 0)
+ (progn (ml4pg-read-lemmas)
+ (ml4pg-read-views)
+ (setq ml4pg-init 1)))
+ (ml4pg-export-theorem-aux nil nil)
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
+ ))
+
+
+
+;; A function to obtain the type associated with an object
+
+(defun ml4pg-remove-jumps-aux (string res)
+ (let ((jump (search "
+" string)))
+ (if jump
+ (ml4pg-remove-jumps-aux (subseq string (1+ jump)) (concatenate 'string res (subseq string 0 jump)))
+ (concatenate 'string res string))))
+
+(defun ml4pg-remove-jumps (string)
+ (ml4pg-remove-jumps-aux string ""))
+
+
+(defun ml4pg-get-type-id (object)
+ (if (string= "(" (subseq object 0 1))
+ -4
+ (let* ((a (ml4pg-remove-jumps (proof-shell-invisible-cmd-get-result (concat "Check " object))))
+ (pos_jump (search "
+" a :start2 (+ 2 (search " " a))))
+ (pos_space (search " " a :start2 (+ 2 (search ": " a))))
+ (type (if pos_space
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_space) ml4pg-types_id))
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_jump) ml4pg-types_id)))))
+ (if type type
+ (progn (setf ml4pg-types_id
+ (append ml4pg-types_id (list (cons (if pos_space
+ (subseq a (+ 2 (search ": " a)) pos_space)
+ (subseq a (+ 2 (search ": " a)) pos_jump))
+ ml4pg-types_id_n))))
+
+ (setf ml4pg-types_id_n (1- ml4pg-types_id_n))
+ (1+ ml4pg-types_id_n))
+ ))))
+
+(defun ml4pg-get-type-id2 (object)
+ (let* ((a (proof-shell-invisible-cmd-get-result (concat "Check " object)))
+ (pos_jump (search "
+" a :start2 (+ 2 (search " " a))))
+ (pos_space (search " " a :start2 (+ 2 (search ": " a))))
+ (type (if pos_space
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_space) ml4pg-types_id))
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_jump) ml4pg-types_id)))))
+ (if type type
+ (progn (setf ml4pg-types_id
+ (append ml4pg-types_id (list (cons (if pos_space
+ (subseq a (+ 2 (search ": " a)) pos_space)
+ (subseq a (+ 2 (search ": " a)) pos_jump))
+ ml4pg-types_id_n))))
+
+ (setf ml4pg-types_id_n (1- ml4pg-types_id_n))
+ (1+ ml4pg-types_id_n))
+ )))
+
+
+;; A function to obtain the value of a top symbol
+
+(defun ml4pg-get-top-symbol ()
+ (proof-shell-invisible-cmd-get-result (format "Set Printing All"))
+ (let* ((res (proof-shell-invisible-cmd-get-result (format "Focus")))
+ (res2 (subseq res (+ 32 (search "============================" res))))
+ (fst-symbol (subseq res2 0 (search " " res2))))
+ (cond ((search "->" res2) 7)
+ (t (let ((is (assoc fst-symbol ml4pg-top-symbol-id)))
+ (if is
+ (cdr is)
+ (progn (setf ml4pg-top-symbol-id
+ (append ml4pg-top-symbol-id (list (cons fst-symbol ml4pg-top-symbol-n))))
+
+ (setf ml4pg-top-symbol-n (1+ ml4pg-top-symbol-n))
+ (1- ml4pg-top-symbol-n))))))))
+
+
+
+
+;; In some cases the intro tactic does not have parameters, the following function
+;; obtain the type of the object introduced with the intro tactic in those cases
+;; Sobra
+(defun ml4pg-get-obj-intro ()
+ (let* ((undo (proof-undo-last-successful-command))
+ (obj (proof-shell-invisible-cmd-get-result (format "Show Intro")))
+ (object (subseq obj 0 (search "
+" obj)))
+ (dod (proof-assert-next-command-interactive))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis (list object)))))
+
+ (ml4pg-get-type-id object)
+ ))
+
+(defun ml4pg-extract-params (seq res)
+ (let ((pos_space (search " " seq))
+ (pos_jump (search "
+" seq)))
+ (if pos_space
+ (ml4pg-extract-params (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
+ (reverse (cons (subseq seq 0 pos_jump) res)))))
+
+(defun ml4pg-extract-params2 (seq res)
+ (let ((pos_space (search " " seq))
+ (pos_jump (search "." seq)))
+ (if pos_space
+ (ml4pg-extract-params2 (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
+ (reverse (cons (subseq seq 0 pos_jump) res)))))
+
+;; Given a list of objects, it obtains the value associated with their types
+
+(defun ml4pg-get-types-list (list res)
+ (if (endp list)
+ (* -1 res)
+ (if (search "_" (car list))
+ (ml4pg-get-types-list (cdr list) res)
+ (ml4pg-get-types-list (cdr list) (+ (* -1 (ml4pg-get-type-id (car list)) (expt 10 (- (length list) 1))) res)))))
+
+
+(defun ml4pg-get-types-list-exists (list res)
+ (if (endp list)
+ (* -1 res)
+ (ml4pg-get-types-list-exists (cdr list) (+ (* -1 (ml4pg-get-type-id2 (car list)) (expt 10 (- (length list) 1))) res))))
+
+;; To obtain the number of tactics applied
+
+(defun ml4pg-get-number-list (list)
+ (if (endp list)
+ 0
+ (+ (expt 10 (- (length list) 1)) (ml4pg-get-number-list (cdr list)))))
+
+(defun ml4pg-get-number-list2 (list n)
+ (if (endp list)
+ 0
+ (+ (* n (expt 10 (- (length list) 1))) (ml4pg-get-number-list2 (cdr list) n))))
+
+;; To obtain the value associated with top symbol in the case of move
+
+(defun ml4pg-get-top-symbols-list (len res)
+ (if (= len 0)
+ res
+ (let ((gs (ml4pg-get-top-symbol))
+ (ps (proof-shell-invisible-cmd-get-result (format "intro"))))
+ (+ (ml4pg-get-top-symbols-list (- len 1) (+ (* gs (expt 10 (- len 1))) res))))))
+
+(defun ml4pg-get-top-symbols-seq (seq res)
+ (if (endp seq)
+ res
+ (let ((gs (ml4pg-get-top-symbol))
+ (ps (proof-shell-invisible-cmd-get-result (format (concat "intro " (car seq))))))
+ (+ (ml4pg-get-top-symbols-seq (cdr seq) (+ (* gs (expt 10 (- (length seq) 1))) res))))))
+
+;; To obtain the value associated with a theorem
+
+(defun ml4pg-search-in-hyp (obj hyp)
+ (if (endp hyp)
+ nil
+ (if (string= obj (car hyp))
+ t
+ (ml4pg-search-in-hyp obj (cdr hyp)))))
+
+;;; Auxiliary functions
+
+(defun ml4pg-remove=> (string)
+ (let ((d (search "=>" string)))
+ (if d
+ (ml4pg-remove=> (concatenate 'string (subseq string 0 d) (subseq string (+ 2 d))))
+ string)))
+
+
+(defun ml4pg-extract-views (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (and (string= (subseq (car temp) 0 1) "/") (not (string= (car temp) "//")) (not (string= (car temp) "/=")) (not (string= (car temp) "//=")))
+ (if (not (string= (subseq (car temp) 0 2) "/("))
+ (setf temp2 (append temp2 (list (subseq (car temp) 1))))
+ (setf temp2 (append temp2 (list (subseq (car temp) 2 (search " " (car temp))))))))))
+
+
+(defun ml4pg-extract-real-params (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (not (or (string= (subseq (car temp) 0 1) "/") (string= (car temp) "//") (string= (car temp) "_")
+ (search "->" (car temp)) (search "<-" (car temp)) (string= (car temp) "/=") (string= (car temp) "//=")))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+(defun ml4pg-extract-rewrites (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (or (search "->" (car temp)) (search "<-" (car temp)))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+(defun ml4pg-extract-simplifications (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (or (string= (car temp) "//") (string= (car temp) "/=") (string= (car temp) "//="))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+(defun ml4pg-compute-value-simpl (list)
+ (list 0 (length list) 0 0))
+
+
+(defun ml4pg-extract-views-id (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (if (assoc (car temp) ml4pg-views_id)
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc (car temp) ml4pg-views_id))) ))
+ (progn (setf ml4pg-start_view (+ ml4pg-start_view 1))
+ (ml4pg-save-view (car temp) ml4pg-start_view)
+ (setf ml4pg-views_id
+ (append ml4pg-views_id (list (cons (car temp) ml4pg-start_view))))
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc (car temp) ml4pg-views_id)))))))))
+
+
+
+(defun ml4pg-compute-values-rewrite-tactic (list)
+ (do ((temp (ml4pg-extract-real-params list) (cdr temp))
+ (temp2 ""))
+ ((endp temp) (string-to-number temp2))
+ (let* ((obj1 (if (string= "-" (subseq (car temp) 0 1)) (subseq (car temp) 1) (car temp)))
+ (obj (if (string= "(" (subseq obj1 0 1)) (subseq obj1 1 (search " " obj1)) obj1)))
+ (if (assoc obj ml4pg-theorems_id)
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id)))) )
+ (progn (setf ml4pg-start_thm (+ ml4pg-start_thm 1))
+ (ml4pg-save-lemma obj ml4pg-start_thm)
+ (setf ml4pg-theorems_id
+ (append ml4pg-theorems_id (list (cons obj ml4pg-start_thm))))
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id))))))))))
+
+
+(defun ml4pg-compute-values-apply-tactic (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) (string-to-number temp2))
+ (let ((obj (if (string= "(" (subseq (car temp) 0 1)) (subseq (car temp) 1) (car temp))))
+ (if (member obj ml4pg-hypothesis)
+ (setf temp2 (concatenate 'string temp2 "1"))
+ (if (assoc obj ml4pg-theorems_id)
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id)))) )
+ (progn (setf ml4pg-start_thm (+ ml4pg-start_thm 1))
+ (setf ml4pg-theorems_id
+ (append ml4pg-theorems_id (list (cons obj ml4pg-start_thm))))
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id)))))))))))
+
+
+(defun ml4pg-compute-value-views-move (list)
+ (list (* -1 (ml4pg-get-number-list2 list 5)) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
+
+(defun ml4pg-compute-value-views-apply (list)
+ (list (ml4pg-get-number-list2 list 5) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
+
+(defun ml4pg-compute-value-views-case (list)
+ (list (ml4pg-get-number-list2 list 6) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
+
+(defun ml4pg-compute-value-views-exact (list)
+ (list (ml4pg-get-number-list2 list 9) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
+
+(defun ml4pg-compute-value-rewrites (list)
+ (list (ml4pg-get-number-list2 list 7) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (ml4pg-get-number-list list)))
+
+
+
+(defun ml4pg-remove-empties (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (not (string= (car temp) ""))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+
+
+(defun ml4pg-occurrences (c string)
+ (do ((temp string)
+ (n 0))
+ ((not (search c temp)) n)
+ (progn (setf n (1+ n))
+ (setf temp (subseq temp (1+ (search c temp)))))))
+
+
+(defun ml4pg-put-together-parenthesis (list)
+ (do ((temp list (cdr temp))
+ (n 0)
+ (temp2 nil)
+ (aux ""))
+ ((endp temp) temp2)
+ (cond ((search "(" (car temp))
+ (progn (setf n (1+ n))
+ (setf aux (concatenate 'string aux (car temp) " "))))
+ ((and (search ")" (car temp)) (not (= (- n (ml4pg-occurrences ")" (car temp))) 0)))
+ (progn (setf n (- n (ml4pg-occurrences ")" (car temp))))
+ (setf aux (concatenate 'string aux (car temp) " "))))
+ ((search ")" (car temp))
+ (progn (setf n (1- n))
+ (setf aux (concatenate 'string aux (car temp)))
+ (setf temp2 (append temp2 (list aux)))
+ (setf aux "")))
+ ((not (= n 0))
+ (progn (setf aux (concatenate 'string aux (car temp) " "))))
+ (t (setf temp2 (append temp2 (list (car temp))))
+ ))))
+
+
+(defun ml4pg-remove-squared-parenthesis (string res)
+ (let ((pos1 (search "[" string))
+ (pos2 (search "{" string)))
+ (cond ((and pos1 pos2)
+ (if (< pos1 pos2)
+ (ml4pg-remove-squared-parenthesis
+ (subseq string (1+ (search "]" string :start2 pos1)))
+ (concatenate 'string res (subseq string 0 pos1)))
+ (ml4pg-remove-squared-parenthesis
+ (subseq string (1+ (search "}" string :start2 pos2)))
+ (concatenate 'string res (subseq string 0 pos2)))))
+ (pos1 (ml4pg-remove-squared-parenthesis
+ (subseq string (1+ (search "]" string :start2 pos1)))
+ (concatenate 'string res (subseq string 0 pos1))))
+ (pos2 (ml4pg-remove-squared-parenthesis
+ (subseq string (1+ (search "}" string :start2 pos2)))
+ (concatenate 'string res (subseq string 0 pos2))))
+ (t (concatenate 'string res string)))))
+
+
+(defun ml4pg-remove-iterations (string)
+ (do ((temp string)
+ (temp2 ""))
+ ((= (length temp) 0) temp2)
+ (if (or (string= (subseq temp 0 1) "!") (string= (subseq temp 0 1) "?"))
+ (setf temp (subseq temp 1))
+ (progn (setf temp2 (concatenate 'string temp2 (subseq temp 0 1)))
+ (setf temp (subseq temp 1))
+ ))))
+
+
+
+(defun ml4pg-remove-squared-parenthesis2 (string)
+ (do ((temp string)
+ (temp2 ""))
+ ((= (length temp) 0) temp2)
+ (if (or (string= (subseq temp 0 1) "[") (string= (subseq temp 0 1) "]") (string= (subseq temp 0 1) "|"))
+ (setf temp (subseq temp 1))
+ (progn (setf temp2 (concatenate 'string temp2 (subseq temp 0 1)))
+ (setf temp (subseq temp 1))
+ ))))
+
+
+(defun ml4pg-extract-params3 (cmd)
+ (let* ((res (ml4pg-extract-params2 (ml4pg-remove-iterations (ml4pg-remove-squared-parenthesis cmd "") ) nil))
+ (res1 (ml4pg-remove-empties res)))
+ (ml4pg-put-together-parenthesis res1)))
+
+
+(defun ml4pg-extract-params4 (cmd)
+ (let* ((res (ml4pg-extract-params2 (ml4pg-remove-squared-parenthesis2 cmd) nil))
+ (res1 (ml4pg-remove-empties res)))
+ (ml4pg-put-together-parenthesis res1)))
+
+
+
+;;; The following functions provide the numbers associated with a concrete tactic
+
+
+(defun ml4pg-numbers-move=> (cmd top level)
+ (let* ((params (ml4pg-extract-params3 (ml4pg-remove=> (subseq cmd (+ 2 (search "=>" cmd)))) ))
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-move views))
+ (real-params (ml4pg-extract-real-params params))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
+ (types-params (ml4pg-get-types-list real-params 0))
+ (foo3 (ml4pg-add-info-to-level (list (ml4pg-get-types-list real-params 0) 0 0 0 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-move (append ml4pg-move (list (list (ml4pg-get-types-list (if real-params (list (car real-params)) nil) 0) (ml4pg-get-types-list (cdr real-params) 0)
+ (* -1 (ml4pg-get-number-list real-params)) top))))))
+ (append (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params))))
+ (if simpl (list simpl-nums) nil)
+ (if views (list views-nums) nil)
+ (if rewrites (list rewrites-nums) nil))))
+
+(defun ml4pg-numbers-move/ (cmd top level)
+ (let* ((params (ml4pg-extract-params3 (ml4pg-remove=> (subseq cmd 4)) ))
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-move views))
+ (real-params (ml4pg-extract-real-params params))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 (nth 2 views-nums) 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-move/ (append ml4pg-move/ (list (list -4 (* -4 (ml4pg-get-number-list real-params)) (nth 3 views-nums) top)))))
+ (types-params (ml4pg-get-types-list real-params 0)))
+ (append (list views-nums)
+ (if real-params (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params)))))
+ (if simpl (list simpl-nums) nil)
+ (if rewrites (list rewrites-nums) nil)))
+)
+
+(defun ml4pg-numbers-move: (cmd top level)
+ (let* ((params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)))) )
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-move views))
+ (real-params (ml4pg-extract-real-params params))
+ (types-params (ml4pg-get-types-list real-params 0))
+ (foo3 (ml4pg-add-info-to-level (list (ml4pg-get-types-list real-params 0) 0 0 0 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-move (append ml4pg-move (list (list (ml4pg-get-types-list (if real-params (list (car real-params)) nil) 0) (ml4pg-get-types-list (cdr real-params) 0)
+ (* 1 (ml4pg-get-number-list real-params)) top))))))
+ (append (list (list (* -1 (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id)))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params))))
+ (if views (list views-nums) nil)
+ (if simpl (list simpl-nums) nil)
+ (if rewrites (list rewrites-nums) nil)))
+
+)
+
+(defun ml4pg-numbers-move< (cmd top level)
+ (let* ((foo (list (ml4pg-compute-value-rewrites (list 1))))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 top 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-rewrite (append ml4pg-rewrite (list (list 4 0 1 top))))))
+ foo
+ )
+)
+
+(defun ml4pg-numbers-apply: (cmd top level)
+ (if (string= cmd "apply")
+ (list (list (cdr (assoc "apply" ml4pg-tactic_id)) 1 0 0))
+ (let ((moves (search "=>" cmd))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 100 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-apply (append ml4pg-apply (list (list -4 0 100 top))))))
+ (if (not moves)
+ (list (list (cdr (assoc "apply" ml4pg-tactic_id))
+ 1
+ -4
+ (ml4pg-compute-values-apply-tactic (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (if (search ":" cmd) (search ":" cmd) (search " " cmd)))))))))
+ (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
+ (simpl (ml4pg-extract-simplifications args0))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (args (ml4pg-extract-real-params args0))
+ )
+ (append (list (list (cdr (assoc "apply" ml4pg-tactic_id))
+ 1 -4
+ (ml4pg-compute-values-apply-tactic (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (if (search ":" cmd) (search ":" cmd) (search " " cmd))) moves))))
+ ))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil)))))
+))
+
+(defun ml4pg-numbers-elim (cmd top level)
+ (let* ((moves (search "=>" cmd))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)) moves))))) 0) 0 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-elim (append ml4pg-elim (list (list (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)) moves))))) 0) 0 -1 top))))))
+ (if (not moves)
+ (list (list (cdr (assoc "elim" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd))))) 0) -1))
+ (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
+ (simpl (ml4pg-extract-simplifications args0))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (args (ml4pg-extract-real-params args0)))
+ (append (list (list (cdr (assoc "elim" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)) moves))) 0) -1))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil))))))
+
+(defun ml4pg-numbers-case (cmd top level)
+ (if (string= cmd "case")
+ (list (list (cdr (assoc "case" ml4pg-tactic_id)) 1 0 0))
+ (let ((moves (search "=>" cmd))
+ (foo3 (ml4pg-add-info-to-level (list 0 (if (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd))))))
+ (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))))) 0) 1) 0 0 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-case (append ml4pg-case (list (list (if (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd))))))
+ (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))))) 0) 1)
+ 0 -1 top))))))
+ (if (not moves)
+ (list (list (cdr (assoc "case" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))) 0) -1))
+ (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
+ (simpl (ml4pg-extract-simplifications args0))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (args (ml4pg-extract-real-params args0)))
+ (if (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))
+ (append (list (list (cdr (assoc "case" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))) 0) -1))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil))
+ (append (list (list (cdr (assoc "case" ml4pg-tactic_id))
+ 1 0 0))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil))))))))
+
+(defun ml4pg-numbers-case/ (cmd top level)
+ (let* ((params (ml4pg-extract-params4 (ml4pg-separate-/ (ml4pg-remove=> (subseq cmd 5)) "")))
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-case views))
+ (real-params (ml4pg-extract-real-params params))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
+ (types-params (ml4pg-get-types-list real-params 0))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 (nth 2 views-nums) 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-case/ (append ml4pg-case/ (list (list -4 (/ (nth 2 views-nums) 10) (nth 3 views-nums) top))))))
+ (append (list views-nums)
+ (if real-params (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params)))))
+ (if simpl (list simpl-nums) nil)
+ (if rewrites (list rewrites-nums) nil)))
+)
+
+(defun ml4pg-separate-/ (string res)
+ (let ((pos (search "/" string)))
+ (if (not pos)
+ (concatenate 'string res string)
+ (cond ((= pos 0) (ml4pg-separate-/ (subseq string (1+ pos)) (concatenate 'string "/" res (subseq string 0 pos))))
+ ((not (string= " " (subseq string (1- pos) pos)))
+ (ml4pg-separate-/ (subseq string (1+ pos)) (concatenate 'string res (subseq string 0 pos) " /")))
+ (t (ml4pg-separate-/ (subseq string (1+ pos)) (concatenate 'string res (subseq string 0 pos))))))))
+
+
+(defun ml4pg-numbers-apply/ (cmd top level)
+ (let* ((params (ml4pg-extract-params4 (ml4pg-separate-/ (ml4pg-remove=> (subseq cmd 5)) "")))
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-apply views))
+ (real-params (ml4pg-extract-real-params params))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
+ (types-params (ml4pg-get-types-list real-params 0))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 (nth 2 views-nums) 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-apply/ (append ml4pg-apply/ (list (list -4 (/ (nth 2 views-nums) 10) (nth 3 views-nums) top))))))
+ (append (list views-nums)
+ (if real-params (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params)))))
+ (if simpl (list simpl-nums) nil)
+ (if rewrites (list rewrites-nums) nil)))
+)
+
+(defun ml4pg-numbers-exact (cmd top level)
+ (if (string= cmd "exact")
+ (list (list (cdr (assoc "exact" ml4pg-tactic_id)) 1 0 0))
+ (let* ((params (ml4pg-extract-params3 (cond ((search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))))
+ ((search "/" cmd) (subseq cmd (search "/" cmd)))
+ (t (subseq cmd (+ 1 (search " " cmd)))))))
+ (views (ml4pg-extract-views params))
+ (views-nums (ml4pg-compute-value-views-exact views))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 0 100 0 0) level))
+ (foo2 (setf ml4pg-exact (append ml4pg-exact (list (list -4 0 100 top))))))
+ (if views
+ (list views-nums)
+ (list (list (cdr (assoc "exact" ml4pg-tactic_id))
+ 1
+ -4
+ (ml4pg-compute-values-apply-tactic (ml4pg-extract-real-params params))))))))
+
+(defun ml4pg-numbers-rewrite (cmd top level)
+ (let* ((params (ml4pg-extract-params3 (subseq cmd (+ 1 (search " " cmd)))) )
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-move views))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 (ml4pg-get-number-list2 (cdr params) 4) 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-rewrite (append ml4pg-rewrite (list (list -4 (ml4pg-get-number-list2 (cdr params) 4) (ml4pg-compute-values-rewrite-tactic params) top))))))
+ (append (list (list (ml4pg-get-number-list2 params (cdr (assoc "rewrite" ml4pg-tactic_id)))
+ (length params)
+ (ml4pg-get-number-list2 params 4)
+ (ml4pg-compute-values-rewrite-tactic params)))
+ (if simpl (list simpl-nums) nil)
+ ))
+)
+
+(defun ml4pg-numbers-exists (cmd top level)
+ (let ((moves (search "=>" cmd))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 1 0 0 0 0) level))
+ (foo2 (setf ml4pg-exists (append ml4pg-exists (list (list 8 0 1 top))))))
+ (if (not moves)
+ (let* ((params (ml4pg-extract-params3 (subseq cmd 7)) )
+ (types-params (ml4pg-get-types-list-exists params 0))
+ )
+ (list (list (cdr (assoc "exists" ml4pg-tactic_id)) 1 types-params 0)))
+ (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
+ (simpl (ml4pg-extract-simplifications args0))
+ (simpl-nums (cml4pg-ompute-value-simpl simpl))
+ (args (ml4pg-extract-real-params args0)))
+ (append (list (list (cdr (assoc "exists" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list-exists (ml4pg-extract-params3 (subseq cmd 7 moves)) 0) -1))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil)))))
+ )
+
+
+(defun ml4pg-numbers-done (cmd top level)
+ (progn
+ (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 top 0 0 0) level)
+ (setf ml4pg-done (append ml4pg-done (list (list 0 0 0 top))))
+ (list (list (cdr (assoc "[]" ml4pg-tactic_id)) 1 0 0) ) )
+)
+
+
+(defun ml4pg-remove-multiple-spaces (string)
+ (let ((d (search " " string)))
+ (if d
+ (ml4pg-remove-multiple-spaces (concatenate 'string (subseq string 0 d) (subseq string (1+ d))))
+ string)))
+
+
+
+(defun ml4pg-compute-numbers-cmd (cmd top level)
+ (let* ((cmd1 (ml4pg-remove-multiple-spaces cmd)))
+ (cond ((search "symmetry" cmd) nil)
+ ((search "last by" cmd) (ml4pg-compute-numbers-cmd (subseq cmd (+ 3 (search "by" cmd))) top level))
+ ((search "first by" cmd) (ml4pg-compute-numbers-cmd (subseq cmd (+ 3 (search "by" cmd))) top level))
+ ((string= "try" (subseq cmd 0 2)) (ml4pg-compute-numbers-cmd (subseq cmd (+ 4 (search "try" cmd))) top level))
+ ((string= "do" (subseq cmd 0 2)) (ml4pg-compute-numbers-cmd (subseq cmd (cond ((search "!" cmd) (1+ (search "!" cmd)))
+ ((search "?" cmd) (1+ (search "?" cmd)))
+ (t (+ 3 (search "do" cmd))))) top level))
+ ((search "have" cmd) nil)
+ ((or (search "move=>" cmd1) (search "move =>" cmd1)) (ml4pg-numbers-move=> cmd1 top level))
+ ((or (search "move:" cmd1) (search "move :" cmd1)) (ml4pg-numbers-move: cmd1 top level))
+ ((or (search "move/" cmd1) (search "move /" cmd1)) (ml4pg-numbers-move/ cmd1 top level))
+ ((or (search "move<-" cmd1) (search "move->" cmd1) (search "move ->" cmd1) (search "move <-" cmd1)) (ml4pg-numbers-move< cmd1 top level))
+ ((or (search "apply/" cmd1) (search "apply /" cmd1)) (ml4pg-numbers-apply/ cmd1 top level))
+ ((or (search "apply:" cmd1) (search "apply :" cmd1) (search "apply" cmd1)) (ml4pg-numbers-apply: cmd1 top level))
+ ((or (search "elim:" cmd1) (search "elim :" cmd1)) (ml4pg-numbers-elim cmd1 top level))
+ ((or (search "case/" cmd1) (search "case /" cmd1)) (ml4pg-numbers-case/ cmd1 top level))
+ ((or (search "case:" cmd1) (search "case" cmd1)) (ml4pg-numbers-case cmd1 top level))
+ ((or (search "exact" cmd1) (search "exact :" cmd1)) (ml4pg-numbers-exact cmd1 top level))
+ ((search "rewrite" cmd1) (ml4pg-numbers-rewrite cmd1 top level))
+ ((search "exists" cmd1) (ml4pg-numbers-exists cmd1 top level))
+ ((or (search "[]" cmd1) (search "done" cmd1) (search "constructor" cmd1)) (ml4pg-numbers-done cmd1 top level))
+
+ ((string= (subseq cmd1 0 4) "pose") nil)
+ ((string= (subseq cmd1 0 3) "set") nil)
+ ((string= (subseq cmd1 0 4) "left") nil)
+ ((string= (subseq cmd1 0 4) "righ") nil)
+ )
+ )
+ )
+
+
+(defun ml4pg-split-command (cmd result end)
+ (if (or (string= " " (subseq cmd 0 1)) (string= "-" (subseq cmd 0 1)))
+ (ml4pg-split-command (subseq cmd 1) result end)
+ (let ((is_by (string= "by" (subseq cmd 0 2))))
+ (if is_by
+ (ml4pg-split-command (subseq cmd 3) result 1)
+ (let ((comma (search ";" cmd)))
+ (if comma
+ (ml4pg-split-command (subseq cmd (1+ comma)) (append result (list (subseq cmd 0 comma))) end)
+ (list (append result (list (subseq cmd 0 (1- (length cmd))))) end)))))))
+
+
+
+
+(defun ml4pg-add-tactics (tactics end top level)
+ (do ((temp tactics (cdr temp))
+ (temp2 nil))
+ ((endp temp) (if (> end 0) (append temp2 (list (list 0 1 0 0))) temp2))
+ (let ((res (ml4pg-compute-numbers-cmd (car temp) top level)))
+ (if res (setf temp2 (append temp2 res))))))
+
+
+;The first value is the tactic, the second one is the number of tactics,
+;the third one is the argument type, the fourth one is if the
+;argument is a hypothesis of a theorem, the fifth one is the top-symbol
+;and the last one the number of subgoals
+
+
+(defun ml4pg-get-numbers (cmd top level)
+ (let* ((res (ml4pg-split-command cmd nil 0))
+ (tactics (car res))
+ (end (cadr res))
+ (nums (ml4pg-add-tactics tactics end top level)))
+ (if nums (do ((temp (cdr nums) (cdr temp))
+ (temp2 (list (format "%s" (nth 0 (car nums))) (nth 1 (car nums)) (format "%s" (nth 2 (car nums))) (format "%s" (nth 3 (car nums))))))
+ ((endp temp) (list (string-to-number (nth 0 temp2)) (nth 1 temp2) (string-to-number (nth 2 temp2)) (string-to-number (nth 3 temp2))) )
+ (setf temp2 (list (if (or (< (string-to-number(nth 0 temp2)) 0) (< (nth 0 (car temp)) 0))
+ (concatenate 'string (format "-%s" (abs (string-to-number(nth 0 temp2)))) (format "%s" (abs (nth 0 (car temp)))))
+ (concatenate 'string (format "%s" (abs (string-to-number(nth 0 temp2))) ) (format "%s" (abs (nth 0 (car temp))))))
+ (+ (nth 1 temp2) (nth 1 (car temp)))
+ (if (or (< (abs (string-to-number(nth 2 temp2))) 0) (< (nth 2 (car temp)) 0))
+ (concatenate 'string (format "-%s" (abs (abs (string-to-number(nth 2 temp2))))) (format "%s" (abs (nth 2 (car temp)))))
+ (concatenate 'string (format "%s" (abs (abs (string-to-number(nth 2 temp2))))) (format "%s" (abs (nth 2 (car temp))))))
+ (if (or (< (string-to-number (nth 3 temp2)) 0) (< (nth 3 (car temp)) 0))
+ (concatenate 'string (format "-%s" (abs (string-to-number (nth 3 temp2)))) (format "%s" (abs (nth 3 (car temp)))))
+ (concatenate 'string (format "%s" (abs (string-to-number (nth 3 temp2)))) (format "%s" (abs (nth 3 (car temp))))))
+ ))
+ )
+ )))
+
+;; Function to obtain the information just about the goals.
+
+(defun ml4pg-count-seq (item seq)
+ (let ((is? (search item seq)))
+ (if is?
+ (+ 1 (ml4pg-count-seq item (subseq seq (+ 1 is?))))
+ 0)))
+
+(defun ml4pg-get-number-of-goals ()
+ (let ((r (proof-shell-invisible-cmd-get-result (format "Show Proof"))))
+ (ml4pg-count-seq "?" r)))
+
+
+(defun ml4pg-flat (ll)
+ (if (endp ll)
+ nil
+ (append (car ll) (ml4pg-flat (cdr ll)))))
+
+
+
+
+;; The following function computes the result of the tactic
+
+
+(defun ml4pg-digits (n)
+ (if (= (mod n 10) 0)
+ 0
+ (1+ (ml4pg-digits (/ n 10)))))
+
+(defun ml4pg-first-digit (n digits)
+ (/ n (expt 10 (1- digits))))
+
+(defun ml4pg-rest-of-digits (n digits)
+ (- n (* (ml4pg-first-digit n digits) (expt 10 (1- digits)))))
+
+(defun ml4pg-obtain-tactic-result (tactic)
+ (do ((temp (cdr tactic) (cdr temp))
+ (temp2 (if (endp tactic) (list 0 0 0 0 0)
+ (list (ml4pg-first-digit (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic))))
+ (* (ml4pg-rest-of-digits (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic)))) (expt 10 (length (cdr tactic))))
+ (* (nth 1 (car tactic)) (expt 10 (length (cdr tactic))))
+ (nth 2 (car tactic))
+ (nth 3 (car tactic))))))
+ ((endp temp) temp2)
+ (setf temp2 (list (nth 0 temp2)
+ (+ (nth 1 temp2) (* (expt 10 (length (cdr temp))) (nth 0 (car temp))))
+ (+ (nth 2 temp2) (* (expt 10 (length (cdr temp))) (nth 1 (car temp))))
+ (concat (format "%s" (nth 3 temp2)) (format "%s" (nth 2 (car temp))))
+ (+ (nth 4 temp2) (nth 3 (car temp))))
+ )
+ ))
+
+
+
+
+(defvar ml4pg-useless-terms '("Definition" "Defined" "Fixpoint" "Structure" "Section" "Add Ring" "Hypothesis" "Hypotheses" "Include" "Export" "Parameter" "Axiom"
+"End" "Notation" "Hint" "Inductive" "Variable" "Implicit" "Import" "Canonical" "Coercion"
+"Module" "Ltac" "Let" "Opaque" "Bind" "Scope" "Require" "Infix" "Record" "Fact" "Print"))
+
+(defun ml4pg-is-in-search (cmd)
+ (do ((temp ml4pg-useless-terms (cdr temp))
+ (is nil))
+ ((or (endp temp) is) is)
+ (if (search (car temp) cmd) (setf is t))))
+
+
+
+(defun ml4pg-compute-tactic-value (list)
+ (if (not list) (list 0 0 0 0 0)
+ (let ((len (length list))
+ (arg0 (car (car list)))
+ (arg1 (format "%s" (nth 1 (car list))))
+ (hyp (format "%s" (nth 2 (car list))))
+ (top (format "%s" (nth 3 (car list)))))
+ (do ((temp (cdr list) (cdr temp)))
+ ((endp temp) (list arg0 (string-to-number arg1) (string-to-number hyp) (string-to-number top) len))
+ (progn (setf arg1 (format "%s%s%s" arg1 (nth 0 (car temp)) (nth 1 (car temp))))
+ (setf hyp (format "%s%s" hyp (nth 2 (car temp))))
+ (setf top (format "%s%s" top (nth 3 (car temp))))
+ )))))
+
+
+
+(defun ml4pg-compute-tactic-result (name)
+ (append (list name) (list (append
+ (ml4pg-compute-tactic-value ml4pg-move)
+ (ml4pg-compute-tactic-value ml4pg-case)
+ (ml4pg-compute-tactic-value ml4pg-elim)
+ (ml4pg-compute-tactic-value ml4pg-apply/)
+ (ml4pg-compute-tactic-value ml4pg-move/)
+ (ml4pg-compute-tactic-value ml4pg-case/)
+ (ml4pg-compute-tactic-value ml4pg-rewrite)
+ (ml4pg-compute-tactic-value ml4pg-exists)
+ (ml4pg-compute-tactic-value ml4pg-done)
+ (ml4pg-compute-tactic-value ml4pg-exact)))))
+
+(defun ml4pg-compute-proof-tree-result (name)
+ (append (list name) (list (append
+ (if ml4pg-tdl1 ml4pg-tdl1 (ml4pg-generate-zeros 13))
+ (if ml4pg-tdl2 ml4pg-tdl2 (ml4pg-generate-zeros 13))
+ (if ml4pg-tdl3 ml4pg-tdl3 (ml4pg-generate-zeros 13))
+ (if ml4pg-tdl4 ml4pg-tdl4 (ml4pg-generate-zeros 13))
+ (if ml4pg-tdl5 ml4pg-tdl5 (ml4pg-generate-zeros 13))))))
+
+
+
+
+
+(defun ml4pg-export-theorem-aux (result name)
+ (let* ((semis (save-excursion
+ (skip-chars-backward " \t\n"
+ (proof-queue-or-locked-end))
+ (proof-segment-up-to-using-cache (point))))
+ (comment (caar semis))
+ (cmd (cadar semis))
+ (pos_dot (search "." cmd))
+ (pos_space (search " " cmd))
+ (ts nil))
+ (if semis
+ (cond ((or (string= comment "comment")
+ (ml4pg-is-in-search cmd))
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result name)))
+ ((search "Lemma" cmd)
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result
+ (subseq cmd (1+ (search " " cmd))
+ (search " " cmd :start2 (1+ (search " " cmd))))
+ )))
+ ((search "Proof" cmd)
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result name )))
+ ((search "Theorem" cmd)
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result
+ (subseq cmd (1+ (search " " cmd))
+ (search " " cmd :start2 (1+ (search " " cmd))))
+ )))
+ ((search "Qed." cmd)
+ (progn (proof-assert-next-command-interactive)
+ ; (insert (format "\n(* %s *)\n" (reverse result)))
+ ;(setf proof-tree-level (append proof-tree-level (list (compute-proof-result))))
+ ;(setf tactic-level (append tactic-level (list (compute-tactic-result))))
+ (setf ml4pg-tactic-level (append ml4pg-tactic-level (list (ml4pg-compute-tactic-result name))))
+ (setf ml4pg-proof-tree-level (append ml4pg-proof-tree-level (list (ml4pg-compute-proof-tree-result name))))
+ (if name
+ ; (split-feature-vector name (flat (reverse result)))
+ (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
+ (list (list name (ml4pg-flat (reverse result))))))
+ )))
+ (t (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (ml4pg-get-number-of-goals))
+ (ml4pg-export-theorem-aux (cons (append (ml4pg-get-numbers cmd ts ml4pg-current-level) (list ts) (list ng2)) result)
+ name)
+ (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 0 0 ng2 (if (< ng2 ng) 1 0)) ml4pg-current-level)
+ (setf ml4pg-current-level (1+ ml4pg-current-level))
+
+ ))))))
+
+
+
+
+(defun ml4pg-split-feature-vector (name fv)
+ (let ((len (1+ (floor (length fv) 30))))
+ (do ((i 0 (+ i 1)))
+ ((equal i len) nil)
+ (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
+ (list (list name (ml4pg-take-30-from fv i))))))
+ ))
+
+
+(defun ml4pg-take-30-from (list pos)
+ (let ((j (* 30 pos)))
+ (do ((i j (1+ i))
+ (temp2 nil (if (nth i list) (cons (nth i list) temp2) (cons 0 temp2))))
+ ((= i (+ j 30)) (reverse temp2)))))
+
+
+
+
+;;; Functions to save the files
+
+(defun ml4pg-save-file-conventions1 ()
+ (interactive)
+ (let ((file (read-file-name "Save in file (don't include the extension): ")))
+ (progn (with-temp-file (concat file "_goals.csv") (insert (ml4pg-extract-features-1)))
+ (with-temp-file (concat file "_tactics.csv") (insert (ml4pg-extract-features-2 tactic-level)))
+ (with-temp-file (concat file (format "_summary.txt")) (insert (ml4pg-extract-names))))))
+
+
+(defun ml4pg-extract-names ()
+ (do ((temp ml4pg-saved-theorems (cdr temp))
+ (temp2 "")
+ (i 1 (1+ i)))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2 (format "%s %s\n" i (ml4pg-remove_last_colon (caar temp)))) )))
+
+
+
+
+
+(defun ml4pg-print-list (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) (subseq temp2 0 (1- (length temp2))))
+ (setf temp2 (concat temp2 (format "%s," (car temp))) )))
+
+
+(defun ml4pg-last-part-of-lists (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (setf temp2 (append temp2 (list (cadar temp))))))
+
+
+
+
+(defun ml4pg-extract-features-1 ()
+ (let ((fm (ml4pg-find-max-length)))
+ (do ((temp (ml4pg-last-part-of-lists ml4pg-saved-theorems) (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2
+ (format "%s\n"
+ (ml4pg-print-list (ml4pg-take-30 (append (car temp)
+ (ml4pg-generate-zeros 30))) ))))
+ )
+ ))
+
+
+
+
+
+
+(defun ml4pg-extract-features-2 (list)
+ (do ((temp (ml4pg-last-part-of-lists (cdr list)) (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2 (format "%s\n" (ml4pg-print-list (car temp)))))))
+
+
+
+(defun ml4pg-generate-zeros (n)
+ (do ((i 0 (1+ i))
+ (temp nil (cons 0 temp)))
+ ((= i n) temp)))
+
+(defun ml4pg-find-max-length ()
+ (do ((temp ml4pg-saved-theorems (cdr temp))
+ (i 0))
+ ((endp temp) i)
+ (if (< i (length (cadar temp)))
+ (setf i (length (cadar temp)))
+ nil)))
+
+(defun ml4pg-take-30 (list)
+ (do ((i 0 (1+ i))
+ (temp list (cdr temp))
+ (temp2 nil (cons (car temp) temp2)))
+ ((= i 30) (reverse temp2))))
+
+
+;; Function which extract the info of a theorem up to a concrete point
+
+(defvar ml4pg-tactic-temp nil)
+(defvar ml4pg-proof-tree-temp nil)
+
+(defun ml4pg-extract-info-up-to-here ()
+ (interactive)
+ (setf ml4pg-move nil
+ ml4pg-case nil
+ ml4pg-elim nil
+ ml4pg-apply nil
+ ml4pg-apply/ nil
+ ml4pg-move/ nil
+ ml4pg-case/ nil
+ ml4pg-rewrite nil
+ ml4pg-exists nil
+ ml4pg-done nil
+ ml4pg-exact nil
+ ml4pg-tactic-temp nil
+ ml4pg-tdl1 nil
+ ml4pg-tdl2 nil
+ ml4pg-tdl3 nil
+ ml4pg-tdl4 nil
+ ml4pg-tdl5 nil
+ ml4pg-current-level 1
+ ml4pg-dot-level nil)
+ (let ((final (point))
+ (result nil)
+ (end nil))
+ (search-backward "Proof.")
+ (proof-goto-point)
+ (while (< (point) final)
+ (let* ((semis (save-excursion
+ (skip-chars-backward " \t\n"
+ (proof-queue-or-locked-end))
+ (proof-segment-up-to-using-cache (point))))
+ (comment (caar semis))
+ (cmd (cadar semis))
+ (ts nil))
+ (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (ml4pg-get-number-of-goals))
+ (if cmd
+ (setf result (cons (append (ml4pg-get-numbers cmd ts ml4pg-current-level) (list ts) (list ng2)) result)))
+ (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 0 0 ng2 (if (< ng2 ng) 1 0)) ml4pg-current-level)
+ (setf ml4pg-current-level (1+ ml4pg-current-level))
+ )
+
+ )
+ )
+ (setf ml4pg-tactic-temp (cadr (ml4pg-compute-tactic-result "")))
+ (setf ml4pg-proof-tree-temp (cadr (ml4pg-compute-proof-tree-result "")))
+ (ml4pg-take-30 (append (ml4pg-flat (reverse result)) (ml4pg-generate-zeros 30) ))
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
+ ))
+
+
+
+(defun ml4pg-extract-features-1-bis (thm)
+ (let ((fm (ml4pg-find-max-length)))
+ (do ((temp (append (ml4pg-last-part-of-lists ml4pg-saved-theorems) (list thm)) (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2
+ (format "%s\n"
+ (ml4pg-print-list (ml4pg-take-30 (append (car temp)
+ (ml4pg-generate-zeros 30))) ))))
+ )
+ ))
+
+
+(defun ml4pg-extract-features-2-bis (thm list)
+ (let ((fm (find-max-length)))
+ (do ((temp (append (ml4pg-last-part-of-lists (cdr list)) (list thm)) (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2
+ (format "%s\n"
+ (ml4pg-print-list (car temp)))))
+ )
+ ))
+
+
+
+
+
+
+;; Function which extract the information from all the theorems up to a point
+
+(defun ml4pg-extract-feature-theorems ()
+ (interactive)
+ (let ((final (point))
+ (current-level 1)
+ (last-point -1))
+ (ml4pg-export-theorem)
+ (while (and (< (point) final) (not (= (point) last-point)))
+ (progn (setq last-point (point))
+ (ml4pg-export-theorem)))))
+
+
+
+
+
+(defun ml4pg-extract-theorems-library ()
+ (interactive)
+ (search-backward "Qed.")
+ (forward-char)
+ (forward-char)
+ (forward-char)
+ (forward-char)
+ (let ((final (point))
+ (last-point -1))
+ (beginning-of-buffer)
+ (proof-goto-point)
+ (ml4pg-export-theorem)
+ (while (and (< (point) final) (not (= (point) last-point)))
+ (progn (setq last-point (point))
+ (ml4pg-export-theorem)))
+ )
+
+ )
+
+
+
+;;; Function to normalize the results
+
+(defun ml4pg-max-two-lists (list1 list2)
+ (do ((temp1 (ml4pg-take-30 (append list1 (ml4pg-generate-zeros 24))) (cdr temp1))
+ (temp2 (ml4pg-take-30 (append list2 (ml4pg-generate-zeros 24))) (cdr temp2))
+ (temp nil))
+ ((endp temp1) temp)
+ (if (< (car temp1) (car temp2))
+ (setf temp (append temp (list (car temp2))))
+ (setf temp (append temp (list (car temp1))))
+ )))
+
+(defun ml4pg-min-two-lists (list1 list2)
+ (do ((temp1 (ml4pg-take-30 (append list1 (ml4pg-generate-zeros 24))) (cdr temp1))
+ (temp2 (ml4pg-take-30 (append list2 (ml4pg-generate-zeros 24))) (cdr temp2))
+ (temp nil))
+ ((endp temp1) temp)
+ (if (> (car temp1) (car temp2))
+ (setf temp (append temp (list (car temp2))))
+ (setf temp (append temp (list (car temp1))))
+ )))
+
+(defun ml4pg-max-position (list )
+ (do ((temp list (cdr temp))
+ (max (ml4pg-generate-zeros (length (car list)))))
+ ((endp temp) max)
+ (setf max (ml4pg-max-two-lists max (car temp)))))
+
+(defun ml4pg-min-position (list )
+ (do ((temp list (cdr temp))
+ (min (ml4pg-generate-zeros (length (car list)))))
+ ((endp temp) min)
+ (setf min (ml4pg-min-two-lists min (car temp)))))
+
+
+(defun ml4pg-normalize-list (list max min)
+ (do ((temp (ml4pg-take-30 (append list (ml4pg-generate-zeros 24))) (cdr temp))
+ (temp-max max (cdr temp-max))
+ (temp-min min (cdr temp-min))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (cond ((< 0 (car temp)) (setf temp2 (append temp2 (list (/ (+ (car temp) .0) (car temp-max))))))
+ ((= 0 (car temp)) (setf temp2 (append temp2 (list 0))))
+ (t (setf temp2 (append temp2 (list (- (/ (+ (car temp) .0) (car temp-min))))))))))
+
+(defun ml4pg-normalize (list)
+
+ (let ((max (ml4pg-max-position list))
+ (min (ml4pg-min-position list)))
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (setf temp2 (append temp2 (list (ml4pg-normalize-list (car temp) max min)))))))
+
+
+
+
+
+
+
+
diff --git a/contrib/ML4PG/ssreflect/feature_extraction_2.el~ b/contrib/ML4PG/ssreflect/feature_extraction_2.el~
new file mode 100644
index 00000000..36cc53b2
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/feature_extraction_2.el~
@@ -0,0 +1,1282 @@
+;;; This is the feature vector extraction file for SSReflect
+
+;; Different variables which are used to store information about
+;; the numbers associated with tactics, rewrite rules, types, ...
+
+(defvar ml4pg-hypothesis nil)
+
+(defvar ml4pg-saved-theorems nil)
+(defvar ml4pg-goal-level-temp nil)
+(defvar ml4pg-tactic-level nil)
+(defvar ml4pg-proof-tree-level nil)
+
+;; Variables to store the different values associated with the tactics, the
+;; types or the rewrite rules
+
+(defvar ml4pg-tactic_id '(("move" . 1)
+ ("case" . 2)
+ ("elim" . 3)
+ ("apply" . 4)
+ ("apply/" . 5)
+ ("move/" . -5)
+ ("case/" . 6)
+ ("rewrite" . 7)
+ ("exists" . 8)
+ ("[]" . 0)
+ ("exact" . 9)))
+
+
+(defvar ml4pg-move nil)
+(defvar ml4pg-case nil)
+(defvar ml4pg-elim nil)
+(defvar ml4pg-apply nil)
+(defvar ml4pg-apply/ nil)
+(defvar ml4pg-move/ nil)
+(defvar ml4pg-case/ nil)
+(defvar ml4pg-rewrite nil)
+(defvar ml4pg-exists nil)
+(defvar ml4pg-done nil)
+(defvar ml4pg-exact nil)
+
+
+(defvar ml4pg-types_id '(("nat" . -2)
+ ("Prop" . -4)
+ ("bool" . -3)
+ ("T" . -1)
+ ("seq" . -5)))
+
+(defvar ml4pg-types_id_n -6)
+(defvar ml4pg-views_id nil)
+(defvar ml4pg-theorems_id nil)
+
+(defvar ml4pg-top-symbol-id
+ '(("forall" . 5)
+ ("@eq" . 6)
+ ("and" . 4)
+ ("iff" . 8)
+ ("or" . 3)
+ ("is_true" . 2)
+ ("reflect" . 9)
+ ))
+
+(defvar ml4pg-top-symbol-n 10)
+
+
+(defvar ml4pg-add_to 0.1)
+(defvar ml4pg-start 100)
+
+(defvar ml4pg-start_view 101)
+(defvar ml4pg-start_thm 101)
+
+
+(defvar ml4pg-init 0)
+
+(defvar ml4pg-current-level 1)
+(defvar ml4pg-dot-level nil)
+
+;;; Proof tree levels
+
+(defvar ml4pg-tdl1 nil)
+(defvar ml4pg-tdl2 nil)
+(defvar ml4pg-tdl3 nil)
+(defvar ml4pg-tdl4 nil)
+(defvar ml4pg-tdl5 nil)
+
+(defun ml4pg-add-info-to-level-aux (info list)
+ (if (not list)
+ info
+ (do ((temp list (cdr temp))
+ (temp1 info (cdr temp1))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (cond ((= (car temp) 0) (setf temp2 (append temp2 (list (car temp1)))))
+ ((= (car temp1) 0) (setf temp2 (append temp2 (list (car temp)))))
+ (t (setf temp2 (append temp2 (list (string-to-number (format "%s%s" (car temp) (car temp1)))))))))))
+
+(defun ml4pg-add-info-to-level (info level)
+ (cond ((= level 1) (setf ml4pg-tdl1 (ml4pg-add-info-to-level-aux info ml4pg-tdl1)))
+ ((= level 2) (setf ml4pg-tdl2 (ml4pg-add-info-to-level-aux info ml4pg-tdl2)))
+ ((= level 3) (setf ml4pg-tdl3 (ml4pg-add-info-to-level-aux info ml4pg-tdl3)))
+ ((= level 4) (setf ml4pg-tdl4 (ml4pg-add-info-to-level-aux info ml4pg-tdl4)))
+ ((= level 5) (setf ml4pg-tdl5 (ml4pg-add-info-to-level-aux info ml4pg-tdl5)))
+ (t nil)
+ ))
+
+;;; Main function of this file, it is in charge of extracting the
+;;; information associated with a theorem
+
+
+(defun ml4pg-export-theorem ()
+ (interactive)
+ (progn (setf ml4pg-tdl1 nil
+ ml4pg-tdl2 nil
+ ml4pg-tdl3 nil
+ ml4pg-tdl4 nil
+ ml4pg-tdl5 nil
+ ml4pg-move nil
+ ml4pg-case nil
+ ml4pg-elim nil
+ ml4pg-apply nil
+ ml4pg-apply/ nil
+ ml4pg-move/ nil
+ ml4pg-case/ nil
+ ml4pg-rewrite nil
+ ml4pg-exists nil
+ ml4pg-done nil
+ ml4pg-exact nil
+ ml4pg-current-level 1
+ ml4pg-dot-level nil
+ ml4pg-hypothesis nil
+ ml4pg-goal-level nil)
+ (if (equal ml4pg-init 0)
+ (progn (ml4pg-read-lemmas)
+ (ml4pg-read-views)
+ (setq ml4pg-init 1)))
+ (ml4pg-export-theorem-aux nil nil)
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
+ ))
+
+
+
+;; A function to obtain the type associated with an object
+
+(defun ml4pg-remove-jumps-aux (string res)
+ (let ((jump (search "
+" string)))
+ (if jump
+ (ml4pg-remove-jumps-aux (subseq string (1+ jump)) (concatenate 'string res (subseq string 0 jump)))
+ (concatenate 'string res string))))
+
+(defun ml4pg-remove-jumps (string)
+ (ml4pg-remove-jumps-aux string ""))
+
+
+(defun ml4pg-get-type-id (object)
+ (if (string= "(" (subseq object 0 1))
+ -4
+ (let* ((a (ml4pg-remove-jumps (proof-shell-invisible-cmd-get-result (concat "Check " object))))
+ (pos_jump (search "
+" a :start2 (+ 2 (search " " a))))
+ (pos_space (search " " a :start2 (+ 2 (search ": " a))))
+ (type (if pos_space
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_space) ml4pg-types_id))
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_jump) ml4pg-types_id)))))
+ (if type type
+ (progn (setf ml4pg-types_id
+ (append ml4pg-types_id (list (cons (if pos_space
+ (subseq a (+ 2 (search ": " a)) pos_space)
+ (subseq a (+ 2 (search ": " a)) pos_jump))
+ ml4pg-types_id_n))))
+
+ (setf ml4pg-types_id_n (1- ml4pg-types_id_n))
+ (1+ ml4pg-types_id_n))
+ ))))
+
+(defun ml4pg-get-type-id2 (object)
+ (let* ((a (proof-shell-invisible-cmd-get-result (concat "Check " object)))
+ (pos_jump (search "
+" a :start2 (+ 2 (search " " a))))
+ (pos_space (search " " a :start2 (+ 2 (search ": " a))))
+ (type (if pos_space
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_space) ml4pg-types_id))
+ (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_jump) ml4pg-types_id)))))
+ (if type type
+ (progn (setf ml4pg-types_id
+ (append ml4pg-types_id (list (cons (if pos_space
+ (subseq a (+ 2 (search ": " a)) pos_space)
+ (subseq a (+ 2 (search ": " a)) pos_jump))
+ ml4pg-types_id_n))))
+
+ (setf ml4pg-types_id_n (1- ml4pg-types_id_n))
+ (1+ ml4pg-types_id_n))
+ )))
+
+
+;; A function to obtain the value of a top symbol
+
+(defun ml4pg-get-top-symbol ()
+ (proof-shell-invisible-cmd-get-result (format "Set Printing All"))
+ (let* ((res (proof-shell-invisible-cmd-get-result (format "Focus")))
+ (res2 (subseq res (+ 32 (search "============================" res))))
+ (fst-symbol (subseq res2 0 (search " " res2))))
+ (cond ((search "->" res2) 7)
+ (t (let ((is (assoc fst-symbol ml4pg-top-symbol-id)))
+ (if is
+ (cdr is)
+ (progn (setf ml4pg-top-symbol-id
+ (append ml4pg-top-symbol-id (list (cons fst-symbol ml4pg-top-symbol-n))))
+
+ (setf ml4pg-top-symbol-n (1+ ml4pg-top-symbol-n))
+ (1- ml4pg-top-symbol-n))))))))
+
+
+
+
+;; In some cases the intro tactic does not have parameters, the following function
+;; obtain the type of the object introduced with the intro tactic in those cases
+;; Sobra
+(defun ml4pg-get-obj-intro ()
+ (let* ((undo (proof-undo-last-successful-command))
+ (obj (proof-shell-invisible-cmd-get-result (format "Show Intro")))
+ (object (subseq obj 0 (search "
+" obj)))
+ (dod (proof-assert-next-command-interactive))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis (list object)))))
+
+ (ml4pg-get-type-id object)
+ ))
+
+(defun ml4pg-extract-params (seq res)
+ (let ((pos_space (search " " seq))
+ (pos_jump (search "
+" seq)))
+ (if pos_space
+ (ml4pg-extract-params (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
+ (reverse (cons (subseq seq 0 pos_jump) res)))))
+
+(defun ml4pg-extract-params2 (seq res)
+ (let ((pos_space (search " " seq))
+ (pos_jump (search "." seq)))
+ (if pos_space
+ (ml4pg-extract-params2 (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
+ (reverse (cons (subseq seq 0 pos_jump) res)))))
+
+;; Given a list of objects, it obtains the value associated with their types
+
+(defun ml4pg-get-types-list (list res)
+ (if (endp list)
+ (* -1 res)
+ (if (search "_" (car list))
+ (ml4pg-get-types-list (cdr list) res)
+ (ml4pg-get-types-list (cdr list) (+ (* -1 (ml4pg-get-type-id (car list)) (expt 10 (- (length list) 1))) res)))))
+
+
+(defun ml4pg-get-types-list-exists (list res)
+ (if (endp list)
+ (* -1 res)
+ (ml4pg-get-types-list-exists (cdr list) (+ (* -1 (ml4pg-get-type-id2 (car list)) (expt 10 (- (length list) 1))) res))))
+
+;; To obtain the number of tactics applied
+
+(defun ml4pg-get-number-list (list)
+ (if (endp list)
+ 0
+ (+ (expt 10 (- (length list) 1)) (ml4pg-get-number-list (cdr list)))))
+
+(defun ml4pg-get-number-list2 (list n)
+ (if (endp list)
+ 0
+ (+ (* n (expt 10 (- (length list) 1))) (ml4pg-get-number-list2 (cdr list) n))))
+
+;; To obtain the value associated with top symbol in the case of move
+
+(defun ml4pg-get-top-symbols-list (len res)
+ (if (= len 0)
+ res
+ (let ((gs (ml4pg-get-top-symbol))
+ (ps (proof-shell-invisible-cmd-get-result (format "intro"))))
+ (+ (ml4pg-get-top-symbols-list (- len 1) (+ (* gs (expt 10 (- len 1))) res))))))
+
+(defun ml4pg-get-top-symbols-seq (seq res)
+ (if (endp seq)
+ res
+ (let ((gs (ml4pg-get-top-symbol))
+ (ps (proof-shell-invisible-cmd-get-result (format (concat "intro " (car seq))))))
+ (+ (ml4pg-get-top-symbols-seq (cdr seq) (+ (* gs (expt 10 (- (length seq) 1))) res))))))
+
+;; To obtain the value associated with a theorem
+
+(defun ml4pg-search-in-hyp (obj hyp)
+ (if (endp hyp)
+ nil
+ (if (string= obj (car hyp))
+ t
+ (ml4pg-search-in-hyp obj (cdr hyp)))))
+
+;;; Auxiliary functions
+
+(defun ml4pg-remove=> (string)
+ (let ((d (search "=>" string)))
+ (if d
+ (ml4pg-remove=> (concatenate 'string (subseq string 0 d) (subseq string (+ 2 d))))
+ string)))
+
+
+(defun ml4pg-extract-views (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (and (string= (subseq (car temp) 0 1) "/") (not (string= (car temp) "//")) (not (string= (car temp) "/=")) (not (string= (car temp) "//=")))
+ (if (not (string= (subseq (car temp) 0 2) "/("))
+ (setf temp2 (append temp2 (list (subseq (car temp) 1))))
+ (setf temp2 (append temp2 (list (subseq (car temp) 2 (search " " (car temp))))))))))
+
+
+(defun ml4pg-extract-real-params (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (not (or (string= (subseq (car temp) 0 1) "/") (string= (car temp) "//") (string= (car temp) "_")
+ (search "->" (car temp)) (search "<-" (car temp)) (string= (car temp) "/=") (string= (car temp) "//=")))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+(defun ml4pg-extract-rewrites (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (or (search "->" (car temp)) (search "<-" (car temp)))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+(defun ml4pg-extract-simplifications (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (or (string= (car temp) "//") (string= (car temp) "/=") (string= (car temp) "//="))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+(defun ml4pg-compute-value-simpl (list)
+ (list 0 (length list) 0 0))
+
+
+(defun ml4pg-extract-views-id (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (if (assoc (car temp) ml4pg-views_id)
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc (car temp) ml4pg-views_id))) ))
+ (progn (setf ml4pg-start_view (+ ml4pg-start_view 1))
+ (ml4pg-save-view (car temp) ml4pg-start_view)
+ (setf ml4pg-views_id
+ (append ml4pg-views_id (list (cons (car temp) ml4pg-start_view))))
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc (car temp) ml4pg-views_id)))))))))
+
+
+
+(defun ml4pg-compute-values-rewrite-tactic (list)
+ (do ((temp (ml4pg-extract-real-params list) (cdr temp))
+ (temp2 ""))
+ ((endp temp) (string-to-number temp2))
+ (let* ((obj1 (if (string= "-" (subseq (car temp) 0 1)) (subseq (car temp) 1) (car temp)))
+ (obj (if (string= "(" (subseq obj1 0 1)) (subseq obj1 1 (search " " obj1)) obj1)))
+ (if (assoc obj ml4pg-theorems_id)
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id)))) )
+ (progn (setf ml4pg-start_thm (+ ml4pg-start_thm 1))
+ (ml4pg-save-lemma obj ml4pg-start_thm)
+ (setf ml4pg-theorems_id
+ (append ml4pg-theorems_id (list (cons obj ml4pg-start_thm))))
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id))))))))))
+
+
+(defun ml4pg-compute-values-apply-tactic (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) (string-to-number temp2))
+ (let ((obj (if (string= "(" (subseq (car temp) 0 1)) (subseq (car temp) 1) (car temp))))
+ (if (member obj ml4pg-hypothesis)
+ (setf temp2 (concatenate 'string temp2 "1"))
+ (if (assoc obj ml4pg-theorems_id)
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id)))) )
+ (progn (setf ml4pg-start_thm (+ ml4pg-start_thm 1))
+ (setf ml4pg-theorems_id
+ (append ml4pg-theorems_id (list (cons obj ml4pg-start_thm))))
+ (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id)))))))))))
+
+
+(defun ml4pg-compute-value-views-move (list)
+ (list (* -1 (ml4pg-get-number-list2 list 5)) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
+
+(defun ml4pg-compute-value-views-apply (list)
+ (list (ml4pg-get-number-list2 list 5) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
+
+(defun ml4pg-compute-value-views-case (list)
+ (list (ml4pg-get-number-list2 list 6) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
+
+(defun ml4pg-compute-value-views-exact (list)
+ (list (ml4pg-get-number-list2 list 9) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
+
+(defun ml4pg-compute-value-rewrites (list)
+ (list (ml4pg-get-number-list2 list 7) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (ml4pg-get-number-list list)))
+
+
+
+(defun ml4pg-remove-empties (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (not (string= (car temp) ""))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+
+
+(defun ml4pg-occurrences (c string)
+ (do ((temp string)
+ (n 0))
+ ((not (search c temp)) n)
+ (progn (setf n (1+ n))
+ (setf temp (subseq temp (1+ (search c temp)))))))
+
+
+(defun ml4pg-put-together-parenthesis (list)
+ (do ((temp list (cdr temp))
+ (n 0)
+ (temp2 nil)
+ (aux ""))
+ ((endp temp) temp2)
+ (cond ((search "(" (car temp))
+ (progn (setf n (1+ n))
+ (setf aux (concatenate 'string aux (car temp) " "))))
+ ((and (search ")" (car temp)) (not (= (- n (ml4pg-occurrences ")" (car temp))) 0)))
+ (progn (setf n (- n (ml4pg-occurrences ")" (car temp))))
+ (setf aux (concatenate 'string aux (car temp) " "))))
+ ((search ")" (car temp))
+ (progn (setf n (1- n))
+ (setf aux (concatenate 'string aux (car temp)))
+ (setf temp2 (append temp2 (list aux)))
+ (setf aux "")))
+ ((not (= n 0))
+ (progn (setf aux (concatenate 'string aux (car temp) " "))))
+ (t (setf temp2 (append temp2 (list (car temp))))
+ ))))
+
+
+(defun ml4pg-remove-squared-parenthesis (string res)
+ (let ((pos1 (search "[" string))
+ (pos2 (search "{" string)))
+ (cond ((and pos1 pos2)
+ (if (< pos1 pos2)
+ (ml4pg-remove-squared-parenthesis
+ (subseq string (1+ (search "]" string :start2 pos1)))
+ (concatenate 'string res (subseq string 0 pos1)))
+ (ml4pg-remove-squared-parenthesis
+ (subseq string (1+ (search "}" string :start2 pos2)))
+ (concatenate 'string res (subseq string 0 pos2)))))
+ (pos1 (ml4pg-remove-squared-parenthesis
+ (subseq string (1+ (search "]" string :start2 pos1)))
+ (concatenate 'string res (subseq string 0 pos1))))
+ (pos2 (ml4pg-remove-squared-parenthesis
+ (subseq string (1+ (search "}" string :start2 pos2)))
+ (concatenate 'string res (subseq string 0 pos2))))
+ (t (concatenate 'string res string)))))
+
+
+(defun ml4pg-remove-iterations (string)
+ (do ((temp string)
+ (temp2 ""))
+ ((= (length temp) 0) temp2)
+ (if (or (string= (subseq temp 0 1) "!") (string= (subseq temp 0 1) "?"))
+ (setf temp (subseq temp 1))
+ (progn (setf temp2 (concatenate 'string temp2 (subseq temp 0 1)))
+ (setf temp (subseq temp 1))
+ ))))
+
+
+
+(defun ml4pg-remove-squared-parenthesis2 (string)
+ (do ((temp string)
+ (temp2 ""))
+ ((= (length temp) 0) temp2)
+ (if (or (string= (subseq temp 0 1) "[") (string= (subseq temp 0 1) "]") (string= (subseq temp 0 1) "|"))
+ (setf temp (subseq temp 1))
+ (progn (setf temp2 (concatenate 'string temp2 (subseq temp 0 1)))
+ (setf temp (subseq temp 1))
+ ))))
+
+
+(defun ml4pg-extract-params3 (cmd)
+ (let* ((res (ml4pg-extract-params2 (ml4pg-remove-iterations (ml4pg-remove-squared-parenthesis cmd "") ) nil))
+ (res1 (ml4pg-remove-empties res)))
+ (ml4pg-put-together-parenthesis res1)))
+
+
+(defun ml4pg-extract-params4 (cmd)
+ (let* ((res (ml4pg-extract-params2 (ml4pg-remove-squared-parenthesis2 cmd) nil))
+ (res1 (ml4pg-remove-empties res)))
+ (ml4pg-put-together-parenthesis res1)))
+
+
+
+;;; The following functions provide the numbers associated with a concrete tactic
+
+
+(defun ml4pg-numbers-move=> (cmd top level)
+ (let* ((params (ml4pg-extract-params3 (ml4pg-remove=> (subseq cmd (+ 2 (search "=>" cmd)))) ))
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-move views))
+ (real-params (ml4pg-extract-real-params params))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
+ (types-params (ml4pg-get-types-list real-params 0))
+ (foo3 (ml4pg-add-info-to-level (list (ml4pg-get-types-list real-params 0) 0 0 0 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-move (append ml4pg-move (list (list (ml4pg-get-types-list (if real-params (list (car real-params)) nil) 0) (ml4pg-get-types-list (cdr real-params) 0)
+ (* -1 (ml4pg-get-number-list real-params)) top))))))
+ (append (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params))))
+ (if simpl (list simpl-nums) nil)
+ (if views (list views-nums) nil)
+ (if rewrites (list rewrites-nums) nil))))
+
+(defun ml4pg-numbers-move/ (cmd top level)
+ (let* ((params (ml4pg-extract-params3 (ml4pg-remove=> (subseq cmd 4)) ))
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-move views))
+ (real-params (ml4pg-extract-real-params params))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 (nth 2 views-nums) 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-move/ (append ml4pg-move/ (list (list -4 (* -4 (ml4pg-get-number-list real-params)) (nth 3 views-nums) top)))))
+ (types-params (ml4pg-get-types-list real-params 0)))
+ (append (list views-nums)
+ (if real-params (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params)))))
+ (if simpl (list simpl-nums) nil)
+ (if rewrites (list rewrites-nums) nil)))
+)
+
+(defun ml4pg-numbers-move: (cmd top level)
+ (let* ((params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)))) )
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-move views))
+ (real-params (ml4pg-extract-real-params params))
+ (types-params (ml4pg-get-types-list real-params 0))
+ (foo3 (ml4pg-add-info-to-level (list (ml4pg-get-types-list real-params 0) 0 0 0 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-move (append ml4pg-move (list (list (ml4pg-get-types-list (if real-params (list (car real-params)) nil) 0) (ml4pg-get-types-list (cdr real-params) 0)
+ (* 1 (ml4pg-get-number-list real-params)) top))))))
+ (append (list (list (* -1 (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id)))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params))))
+ (if views (list views-nums) nil)
+ (if simpl (list simpl-nums) nil)
+ (if rewrites (list rewrites-nums) nil)))
+
+)
+
+(defun ml4pg-numbers-move< (cmd top level)
+ (let* ((foo (list (ml4pg-compute-value-rewrites (list 1))))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 top 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-rewrite (append ml4pg-rewrite (list (list 4 0 1 top))))))
+ foo
+ )
+)
+
+(defun ml4pg-numbers-apply: (cmd top level)
+ (if (string= cmd "apply")
+ (list (list (cdr (assoc "apply" ml4pg-tactic_id)) 1 0 0))
+ (let ((moves (search "=>" cmd))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 100 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-apply (append ml4pg-apply (list (list -4 0 100 top))))))
+ (if (not moves)
+ (list (list (cdr (assoc "apply" ml4pg-tactic_id))
+ 1
+ -4
+ (ml4pg-compute-values-apply-tactic (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (if (search ":" cmd) (search ":" cmd) (search " " cmd)))))))))
+ (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
+ (simpl (ml4pg-extract-simplifications args0))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (args (ml4pg-extract-real-params args0))
+ )
+ (append (list (list (cdr (assoc "apply" ml4pg-tactic_id))
+ 1 -4
+ (ml4pg-compute-values-apply-tactic (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (if (search ":" cmd) (search ":" cmd) (search " " cmd))) moves))))
+ ))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil)))))
+))
+
+(defun ml4pg-numbers-elim (cmd top level)
+ (let* ((moves (search "=>" cmd))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)) moves))))) 0) 0 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-elim (append ml4pg-elim (list (list (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)) moves))))) 0) 0 -1 top))))))
+ (if (not moves)
+ (list (list (cdr (assoc "elim" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd))))) 0) -1))
+ (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
+ (simpl (ml4pg-extract-simplifications args0))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (args (ml4pg-extract-real-params args0)))
+ (append (list (list (cdr (assoc "elim" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)) moves))) 0) -1))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil))))))
+
+(defun ml4pg-numbers-case (cmd top level)
+ (if (string= cmd "case")
+ (list (list (cdr (assoc "case" ml4pg-tactic_id)) 1 0 0))
+ (let ((moves (search "=>" cmd))
+ (foo3 (ml4pg-add-info-to-level (list 0 (if (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd))))))
+ (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))))) 0) 1) 0 0 0 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-case (append ml4pg-case (list (list (if (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd))))))
+ (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))))) 0) 1)
+ 0 -1 top))))))
+ (if (not moves)
+ (list (list (cdr (assoc "case" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))) 0) -1))
+ (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
+ (simpl (ml4pg-extract-simplifications args0))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (args (ml4pg-extract-real-params args0)))
+ (if (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))
+ (append (list (list (cdr (assoc "case" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))) 0) -1))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil))
+ (append (list (list (cdr (assoc "case" ml4pg-tactic_id))
+ 1 0 0))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil))))))))
+
+(defun ml4pg-numbers-case/ (cmd top level)
+ (let* ((params (ml4pg-extract-params4 (ml4pg-separate-/ (ml4pg-remove=> (subseq cmd 5)) "")))
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-case views))
+ (real-params (ml4pg-extract-real-params params))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
+ (types-params (ml4pg-get-types-list real-params 0))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 (nth 2 views-nums) 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-case/ (append ml4pg-case/ (list (list -4 (/ (nth 2 views-nums) 10) (nth 3 views-nums) top))))))
+ (append (list views-nums)
+ (if real-params (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params)))))
+ (if simpl (list simpl-nums) nil)
+ (if rewrites (list rewrites-nums) nil)))
+)
+
+(defun ml4pg-separate-/ (string res)
+ (let ((pos (search "/" string)))
+ (if (not pos)
+ (concatenate 'string res string)
+ (cond ((= pos 0) (ml4pg-separate-/ (subseq string (1+ pos)) (concatenate 'string "/" res (subseq string 0 pos))))
+ ((not (string= " " (subseq string (1- pos) pos)))
+ (ml4pg-separate-/ (subseq string (1+ pos)) (concatenate 'string res (subseq string 0 pos) " /")))
+ (t (ml4pg-separate-/ (subseq string (1+ pos)) (concatenate 'string res (subseq string 0 pos))))))))
+
+
+(defun ml4pg-numbers-apply/ (cmd top level)
+ (let* ((params (ml4pg-extract-params4 (ml4pg-separate-/ (ml4pg-remove=> (subseq cmd 5)) "")))
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (rewrites (ml4pg-extract-rewrites params))
+ (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-apply views))
+ (real-params (ml4pg-extract-real-params params))
+ (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
+ (types-params (ml4pg-get-types-list real-params 0))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 (nth 2 views-nums) 0 0 0 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-apply/ (append ml4pg-apply/ (list (list -4 (/ (nth 2 views-nums) 10) (nth 3 views-nums) top))))))
+ (append (list views-nums)
+ (if real-params (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params)))))
+ (if simpl (list simpl-nums) nil)
+ (if rewrites (list rewrites-nums) nil)))
+)
+
+(defun ml4pg-numbers-exact (cmd top level)
+ (if (string= cmd "exact")
+ (list (list (cdr (assoc "exact" ml4pg-tactic_id)) 1 0 0))
+ (let* ((params (ml4pg-extract-params3 (cond ((search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))))
+ ((search "/" cmd) (subseq cmd (search "/" cmd)))
+ (t (subseq cmd (+ 1 (search " " cmd)))))))
+ (views (ml4pg-extract-views params))
+ (views-nums (ml4pg-compute-value-views-exact views))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 0 100 0 0) level))
+ (foo2 (setf ml4pg-exact (append ml4pg-exact (list (list -4 0 100 top))))))
+ (if views
+ (list views-nums)
+ (list (list (cdr (assoc "exact" ml4pg-tactic_id))
+ 1
+ -4
+ (ml4pg-compute-values-apply-tactic (ml4pg-extract-real-params params))))))))
+
+(defun ml4pg-numbers-rewrite (cmd top level)
+ (let* ((params (ml4pg-extract-params3 (subseq cmd (+ 1 (search " " cmd)))) )
+ (views (ml4pg-extract-views params))
+ (simpl (ml4pg-extract-simplifications params))
+ (simpl-nums (ml4pg-compute-value-simpl simpl))
+ (views-nums (ml4pg-compute-value-views-move views))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 (ml4pg-get-number-list2 (cdr params) 4) 0 0 0 0 0) level))
+ (foo2 (setf ml4pg-rewrite (append ml4pg-rewrite (list (list -4 (ml4pg-get-number-list2 (cdr params) 4) (ml4pg-compute-values-rewrite-tactic params) top))))))
+ (append (list (list (ml4pg-get-number-list2 params (cdr (assoc "rewrite" ml4pg-tactic_id)))
+ (length params)
+ (ml4pg-get-number-list2 params 4)
+ (ml4pg-compute-values-rewrite-tactic params)))
+ (if simpl (list simpl-nums) nil)
+ ))
+)
+
+(defun ml4pg-numbers-exists (cmd top level)
+ (let ((moves (search "=>" cmd))
+ (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 1 0 0 0 0) level))
+ (foo2 (setf ml4pg-exists (append ml4pg-exists (list (list 8 0 1 top))))))
+ (if (not moves)
+ (let* ((params (ml4pg-extract-params3 (subseq cmd 7)) )
+ (types-params (ml4pg-get-types-list-exists params 0))
+ )
+ (list (list (cdr (assoc "exists" ml4pg-tactic_id)) 1 types-params 0)))
+ (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
+ (simpl (ml4pg-extract-simplifications args0))
+ (simpl-nums (cml4pg-ompute-value-simpl simpl))
+ (args (ml4pg-extract-real-params args0)))
+ (append (list (list (cdr (assoc "exists" ml4pg-tactic_id))
+ 1 (ml4pg-get-types-list-exists (ml4pg-extract-params3 (subseq cmd 7 moves)) 0) -1))
+ (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
+ (if simpl (list simpl-nums) nil)))))
+ )
+
+
+(defun ml4pg-numbers-done (cmd top level)
+ (progn
+ (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 top 0 0 0) level)
+ (setf ml4pg-done (append ml4pg-done (list (list 0 0 0 top))))
+ (list (list (cdr (assoc "[]" ml4pg-tactic_id)) 1 0 0) ) )
+)
+
+
+(defun ml4pg-remove-multiple-spaces (string)
+ (let ((d (search " " string)))
+ (if d
+ (ml4pg-remove-multiple-spaces (concatenate 'string (subseq string 0 d) (subseq string (1+ d))))
+ string)))
+
+
+
+(defun ml4pg-compute-numbers-cmd (cmd top level)
+ (let* ((cmd1 (ml4pg-remove-multiple-spaces cmd)))
+ (cond ((search "symmetry" cmd) nil)
+ ((search "last by" cmd) (ml4pg-compute-numbers-cmd (subseq cmd (+ 3 (search "by" cmd))) top level))
+ ((search "first by" cmd) (ml4pg-compute-numbers-cmd (subseq cmd (+ 3 (search "by" cmd))) top level))
+ ((string= "try" (subseq cmd 0 2)) (ml4pg-compute-numbers-cmd (subseq cmd (+ 4 (search "try" cmd))) top level))
+ ((string= "do" (subseq cmd 0 2)) (ml4pg-compute-numbers-cmd (subseq cmd (cond ((search "!" cmd) (1+ (search "!" cmd)))
+ ((search "?" cmd) (1+ (search "?" cmd)))
+ (t (+ 3 (search "do" cmd))))) top level))
+ ((search "have" cmd) nil)
+ ((or (search "move=>" cmd1) (search "move =>" cmd1)) (ml4pg-numbers-move=> cmd1 top level))
+ ((or (search "move:" cmd1) (search "move :" cmd1)) (ml4pg-numbers-move: cmd1 top level))
+ ((or (search "move/" cmd1) (search "move /" cmd1)) (ml4pg-numbers-move/ cmd1 top level))
+ ((or (search "move<-" cmd1) (search "move->" cmd1) (search "move ->" cmd1) (search "move <-" cmd1)) (ml4pg-numbers-move< cmd1 top level))
+ ((or (search "apply/" cmd1) (search "apply /" cmd1)) (ml4pg-numbers-apply/ cmd1 top level))
+ ((or (search "apply:" cmd1) (search "apply :" cmd1) (search "apply" cmd1)) (ml4pg-numbers-apply: cmd1 top level))
+ ((or (search "elim:" cmd1) (search "elim :" cmd1)) (ml4pg-numbers-elim cmd1 top level))
+ ((or (search "case/" cmd1) (search "case /" cmd1)) (ml4pg-numbers-case/ cmd1 top level))
+ ((or (search "case:" cmd1) (search "case" cmd1)) (ml4pg-numbers-case cmd1 top level))
+ ((or (search "exact" cmd1) (search "exact :" cmd1)) (ml4pg-numbers-exact cmd1 top level))
+ ((search "rewrite" cmd1) (ml4pg-numbers-rewrite cmd1 top level))
+ ((search "exists" cmd1) (ml4pg-numbers-exists cmd1 top level))
+ ((or (search "[]" cmd1) (search "done" cmd1) (search "constructor" cmd1)) (ml4pg-numbers-done cmd1 top level))
+
+ ((string= (subseq cmd1 0 4) "pose") nil)
+ ((string= (subseq cmd1 0 3) "set") nil)
+ ((string= (subseq cmd1 0 4) "left") nil)
+ ((string= (subseq cmd1 0 4) "righ") nil)
+ )
+ )
+ )
+
+
+(defun ml4pg-split-command (cmd result end)
+ (if (or (string= " " (subseq cmd 0 1)) (string= "-" (subseq cmd 0 1)))
+ (ml4pg-split-command (subseq cmd 1) result end)
+ (let ((is_by (string= "by" (subseq cmd 0 2))))
+ (if is_by
+ (ml4pg-split-command (subseq cmd 3) result 1)
+ (let ((comma (search ";" cmd)))
+ (if comma
+ (ml4pg-split-command (subseq cmd (1+ comma)) (append result (list (subseq cmd 0 comma))) end)
+ (list (append result (list (subseq cmd 0 (1- (length cmd))))) end)))))))
+
+
+
+
+(defun ml4pg-add-tactics (tactics end top level)
+ (do ((temp tactics (cdr temp))
+ (temp2 nil))
+ ((endp temp) (if (> end 0) (append temp2 (list (list 0 1 0 0))) temp2))
+ (let ((res (ml4pg-compute-numbers-cmd (car temp) top level)))
+ (if res (setf temp2 (append temp2 res))))))
+
+
+;The first value is the tactic, the second one is the number of tactics,
+;the third one is the argument type, the fourth one is if the
+;argument is a hypothesis of a theorem, the fifth one is the top-symbol
+;and the last one the number of subgoals
+
+
+(defun ml4pg-get-numbers (cmd top level)
+ (let* ((res (ml4pg-split-command cmd nil 0))
+ (tactics (car res))
+ (end (cadr res))
+ (nums (ml4pg-add-tactics tactics end top level)))
+ (if nums (do ((temp (cdr nums) (cdr temp))
+ (temp2 (list (format "%s" (nth 0 (car nums))) (nth 1 (car nums)) (format "%s" (nth 2 (car nums))) (format "%s" (nth 3 (car nums))))))
+ ((endp temp) (list (string-to-number (nth 0 temp2)) (nth 1 temp2) (string-to-number (nth 2 temp2)) (string-to-number (nth 3 temp2))) )
+ (setf temp2 (list (if (or (< (string-to-number(nth 0 temp2)) 0) (< (nth 0 (car temp)) 0))
+ (concatenate 'string (format "-%s" (abs (string-to-number(nth 0 temp2)))) (format "%s" (abs (nth 0 (car temp)))))
+ (concatenate 'string (format "%s" (abs (string-to-number(nth 0 temp2))) ) (format "%s" (abs (nth 0 (car temp))))))
+ (+ (nth 1 temp2) (nth 1 (car temp)))
+ (if (or (< (abs (string-to-number(nth 2 temp2))) 0) (< (nth 2 (car temp)) 0))
+ (concatenate 'string (format "-%s" (abs (abs (string-to-number(nth 2 temp2))))) (format "%s" (abs (nth 2 (car temp)))))
+ (concatenate 'string (format "%s" (abs (abs (string-to-number(nth 2 temp2))))) (format "%s" (abs (nth 2 (car temp))))))
+ (if (or (< (string-to-number (nth 3 temp2)) 0) (< (nth 3 (car temp)) 0))
+ (concatenate 'string (format "-%s" (abs (string-to-number (nth 3 temp2)))) (format "%s" (abs (nth 3 (car temp)))))
+ (concatenate 'string (format "%s" (abs (string-to-number (nth 3 temp2)))) (format "%s" (abs (nth 3 (car temp))))))
+ ))
+ )
+ )))
+
+;; Function to obtain the information just about the goals.
+
+(defun ml4pg-count-seq (item seq)
+ (let ((is? (search item seq)))
+ (if is?
+ (+ 1 (ml4pg-count-seq item (subseq seq (+ 1 is?))))
+ 0)))
+
+(defun ml4pg-get-number-of-goals ()
+ (let ((r (proof-shell-invisible-cmd-get-result (format "Show Proof"))))
+ (ml4pg-count-seq "?" r)))
+
+
+(defun ml4pg-flat (ll)
+ (if (endp ll)
+ nil
+ (append (car ll) (ml4pg-flat (cdr ll)))))
+
+
+
+
+;; The following function computes the result of the tactic
+
+
+(defun ml4pg-digits (n)
+ (if (= (mod n 10) 0)
+ 0
+ (1+ (ml4pg-digits (/ n 10)))))
+
+(defun ml4pg-first-digit (n digits)
+ (/ n (expt 10 (1- digits))))
+
+(defun ml4pg-rest-of-digits (n digits)
+ (- n (* (ml4pg-first-digit n digits) (expt 10 (1- digits)))))
+
+(defun ml4pg-obtain-tactic-result (tactic)
+ (do ((temp (cdr tactic) (cdr temp))
+ (temp2 (if (endp tactic) (list 0 0 0 0 0)
+ (list (ml4pg-first-digit (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic))))
+ (* (ml4pg-rest-of-digits (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic)))) (expt 10 (length (cdr tactic))))
+ (* (nth 1 (car tactic)) (expt 10 (length (cdr tactic))))
+ (nth 2 (car tactic))
+ (nth 3 (car tactic))))))
+ ((endp temp) temp2)
+ (setf temp2 (list (nth 0 temp2)
+ (+ (nth 1 temp2) (* (expt 10 (length (cdr temp))) (nth 0 (car temp))))
+ (+ (nth 2 temp2) (* (expt 10 (length (cdr temp))) (nth 1 (car temp))))
+ (concat (format "%s" (nth 3 temp2)) (format "%s" (nth 2 (car temp))))
+ (+ (nth 4 temp2) (nth 3 (car temp))))
+ )
+ ))
+
+
+
+
+(defvar ml4pg-useless-terms '("Definition" "Defined" "Fixpoint" "Structure" "Section" "Add Ring" "Hypothesis" "Hypotheses" "Include" "Export" "Parameter" "Axiom"
+"End" "Notation" "Hint" "Inductive" "Variable" "Implicit" "Import" "Canonical" "Coercion"
+"Module" "Ltac" "Let" "Opaque" "Bind" "Scope" "Require" "Infix" "Record" "Fact" "Print"))
+
+(defun ml4pg-is-in-search (cmd)
+ (do ((temp ml4pg-useless-terms (cdr temp))
+ (is nil))
+ ((or (endp temp) is) is)
+ (if (search (car temp) cmd) (setf is t))))
+
+
+
+(defun ml4pg-compute-tactic-value (list)
+ (if (not list) (list 0 0 0 0 0)
+ (let ((len (length list))
+ (arg0 (car (car list)))
+ (arg1 (format "%s" (nth 1 (car list))))
+ (hyp (format "%s" (nth 2 (car list))))
+ (top (format "%s" (nth 3 (car list)))))
+ (do ((temp (cdr list) (cdr temp)))
+ ((endp temp) (list arg0 (string-to-number arg1) (string-to-number hyp) (string-to-number top) len))
+ (progn (setf arg1 (format "%s%s%s" arg1 (nth 0 (car temp)) (nth 1 (car temp))))
+ (setf hyp (format "%s%s" hyp (nth 2 (car temp))))
+ (setf top (format "%s%s" top (nth 3 (car temp))))
+ )))))
+
+
+
+(defun ml4pg-compute-tactic-result (name)
+ (append (list name) (list (append
+ (ml4pg-compute-tactic-value ml4pg-move)
+ (ml4pg-compute-tactic-value ml4pg-case)
+ (ml4pg-compute-tactic-value ml4pg-elim)
+ (ml4pg-compute-tactic-value ml4pg-apply/)
+ (ml4pg-compute-tactic-value ml4pg-move/)
+ (ml4pg-compute-tactic-value ml4pg-case/)
+ (ml4pg-compute-tactic-value ml4pg-rewrite)
+ (ml4pg-compute-tactic-value ml4pg-exists)
+ (ml4pg-compute-tactic-value ml4pg-done)
+ (ml4pg-compute-tactic-value ml4pg-exact)))))
+
+(defun ml4pg-compute-proof-tree-result (name)
+ (append (list name) (list (append
+ (if ml4pg-tdl1 ml4pg-tdl1 (ml4pg-generate-zeros 13))
+ (if ml4pg-tdl2 ml4pg-tdl2 (ml4pg-generate-zeros 13))
+ (if ml4pg-tdl3 ml4pg-tdl3 (ml4pg-generate-zeros 13))
+ (if ml4pg-tdl4 ml4pg-tdl4 (ml4pg-generate-zeros 13))
+ (if ml4pg-tdl5 ml4pg-tdl5 (ml4pg-generate-zeros 13))))))
+
+
+
+
+
+(defun ml4pg-export-theorem-aux (result name)
+ (let* ((semis (save-excursion
+ (skip-chars-backward " \t\n"
+ (proof-queue-or-locked-end))
+ (proof-segment-up-to-using-cache (point))))
+ (comment (caar semis))
+ (cmd (cadar semis))
+ (pos_dot (search "." cmd))
+ (pos_space (search " " cmd))
+ (ts nil))
+ (if semis
+ (cond ((or (string= comment "comment")
+ (ml4pg-is-in-search cmd))
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result name)))
+ ((search "Lemma" cmd)
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result
+ (subseq cmd (1+ (search " " cmd))
+ (search " " cmd :start2 (1+ (search " " cmd))))
+ )))
+ ((search "Proof" cmd)
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result name )))
+ ((search "Theorem" cmd)
+ (progn (proof-assert-next-command-interactive)
+ (ml4pg-export-theorem-aux result
+ (subseq cmd (1+ (search " " cmd))
+ (search " " cmd :start2 (1+ (search " " cmd))))
+ )))
+ ((search "Qed." cmd)
+ (progn (proof-assert-next-command-interactive)
+ ; (insert (format "\n(* %s *)\n" (reverse result)))
+ ;(setf proof-tree-level (append proof-tree-level (list (compute-proof-result))))
+ ;(setf tactic-level (append tactic-level (list (compute-tactic-result))))
+ (setf ml4pg-tactic-level (append ml4pg-tactic-level (list (ml4pg-compute-tactic-result name))))
+ (setf ml4pg-proof-tree-level (append ml4pg-proof-tree-level (list (ml4pg-compute-proof-tree-result name))))
+ (if name
+ ; (split-feature-vector name (flat (reverse result)))
+ (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
+ (list (list name (ml4pg-flat (reverse result))))))
+ )))
+ (t (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (ml4pg-get-number-of-goals))
+ (ml4pg-export-theorem-aux (cons (append (ml4pg-get-numbers cmd ts ml4pg-current-level) (list ts) (list ng2)) result)
+ name)
+ (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 0 0 ng2 (if (< ng2 ng) 1 0)) ml4pg-current-level)
+ (setf ml4pg-current-level (1+ ml4pg-current-level))
+
+ ))))))
+
+
+
+
+(defun ml4pg-split-feature-vector (name fv)
+ (let ((len (1+ (floor (length fv) 30))))
+ (do ((i 0 (+ i 1)))
+ ((equal i len) nil)
+ (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
+ (list (list name (ml4pg-take-30-from fv i))))))
+ ))
+
+
+(defun ml4pg-take-30-from (list pos)
+ (let ((j (* 30 pos)))
+ (do ((i j (1+ i))
+ (temp2 nil (if (nth i list) (cons (nth i list) temp2) (cons 0 temp2))))
+ ((= i (+ j 30)) (reverse temp2)))))
+
+
+
+
+;;; Functions to save the files
+
+(defun ml4pg-save-file-conventions1 ()
+ (interactive)
+ (let ((file (read-file-name "Save in file (don't include the extension): ")))
+ (progn (with-temp-file (concat file "_goals.csv") (insert (ml4pg-extract-features-1)))
+ (with-temp-file (concat file "_tactics.csv") (insert (ml4pg-extract-features-2 tactic-level)))
+ (with-temp-file (concat file (format "_summary.txt")) (insert (ml4pg-extract-names))))))
+
+
+(defun ml4pg-extract-names ()
+ (do ((temp ml4pg-saved-theorems (cdr temp))
+ (temp2 "")
+ (i 1 (1+ i)))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2 (format "%s %s\n" i (ml4pg-remove_last_colon (caar temp)))) )))
+
+
+
+
+
+(defun ml4pg-print-list (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) (subseq temp2 0 (1- (length temp2))))
+ (setf temp2 (concat temp2 (format "%s," (car temp))) )))
+
+
+(defun ml4pg-last-part-of-lists (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (setf temp2 (append temp2 (list (cadar temp))))))
+
+
+
+
+(defun ml4pg-extract-features-1 ()
+ (let ((fm (ml4pg-find-max-length)))
+ (do ((temp (ml4pg-last-part-of-lists ml4pg-saved-theorems) (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2
+ (format "%s\n"
+ (ml4pg-print-list (ml4pg-take-30 (append (car temp)
+ (ml4pg-generate-zeros 30))) ))))
+ )
+ ))
+
+
+
+
+
+
+(defun ml4pg-extract-features-2 (list)
+ (do ((temp (ml4pg-last-part-of-lists (cdr list)) (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2 (format "%s\n" (ml4pg-print-list (car temp)))))))
+
+
+
+(defun ml4pg-generate-zeros (n)
+ (do ((i 0 (1+ i))
+ (temp nil (cons 0 temp)))
+ ((= i n) temp)))
+
+(defun ml4pg-find-max-length ()
+ (do ((temp ml4pg-saved-theorems (cdr temp))
+ (i 0))
+ ((endp temp) i)
+ (if (< i (length (cadar temp)))
+ (setf i (length (cadar temp)))
+ nil)))
+
+(defun ml4pg-take-30 (list)
+ (do ((i 0 (1+ i))
+ (temp list (cdr temp))
+ (temp2 nil (cons (car temp) temp2)))
+ ((= i 30) (reverse temp2))))
+
+
+;; Function which extract the info of a theorem up to a concrete point
+
+(defvar ml4pg-tactic-temp nil)
+(defvar ml4pg-proof-tree-temp nil)
+
+(defun ml4pg-extract-info-up-to-here ()
+ (interactive)
+ (setf ml4pg-move nil
+ ml4pg-case nil
+ ml4pg-elim nil
+ ml4pg-apply nil
+ ml4pg-apply/ nil
+ ml4pg-move/ nil
+ ml4pg-case/ nil
+ ml4pg-rewrite nil
+ ml4pg-exists nil
+ ml4pg-done nil
+ ml4pg-exact nil
+ ml4pg-tactic-temp nil
+ ml4pg-tdl1 nil
+ ml4pg-tdl2 nil
+ ml4pg-tdl3 nil
+ ml4pg-tdl4 nil
+ ml4pg-tdl5 nil
+ ml4pg-current-level 1
+ ml4pg-dot-level nil)
+ (let ((final (point))
+ (result nil)
+ (end nil))
+ (search-backward "Proof.")
+ (proof-goto-point)
+ (while (< (point) final)
+ (let* ((semis (save-excursion
+ (skip-chars-backward " \t\n"
+ (proof-queue-or-locked-end))
+ (proof-segment-up-to-using-cache (point))))
+ (comment (caar semis))
+ (cmd (cadar semis))
+ (ts nil))
+ (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (ml4pg-get-number-of-goals))
+ (if cmd
+ (setf result (cons (append (ml4pg-get-numbers cmd ts ml4pg-current-level) (list ts) (list ng2)) result)))
+ (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 0 0 ng2 (if (< ng2 ng) 1 0)) ml4pg-current-level)
+ (setf ml4pg-current-level (1+ ml4pg-current-level))
+ )
+
+ )
+ )
+ (setf ml4pg-tactic-temp (cadr (ml4pg-compute-tactic-result "")))
+ (setf ml4pg-proof-tree-temp (cadr (ml4pg-compute-proof-tree-result "")))
+ (ml4pg-take-30 (append (ml4pg-flat (reverse result)) (ml4pg-generate-zeros 30) ))
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
+ ))
+
+
+
+(defun ml4pg-extract-features-1-bis (thm)
+ (let ((fm (ml4pg-find-max-length)))
+ (do ((temp (append (ml4pg-last-part-of-lists ml4pg-saved-theorems) (list thm)) (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2
+ (format "%s\n"
+ (ml4pg-print-list (ml4pg-take-30 (append (car temp)
+ (ml4pg-generate-zeros 30))) ))))
+ )
+ ))
+
+
+(defun ml4pg-extract-features-2-bis (thm list)
+ (let ((fm (find-max-length)))
+ (do ((temp (append (ml4pg-last-part-of-lists (cdr list)) (list thm)) (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2
+ (format "%s\n"
+ (ml4pg-print-list (car temp)))))
+ )
+ ))
+
+
+
+
+
+
+;; Function which extract the information from all the theorems up to a point
+
+(defun ml4pg-extract-feature-theorems ()
+ (interactive)
+ (let ((final (point))
+ (current-level 1)
+ (last-point -1))
+ (ml4pg-export-theorem)
+ (while (and (< (point) final) (not (= (point) last-point)))
+ (progn (setq last-point (point))
+ (ml4pg-export-theorem)))))
+
+
+
+
+
+(defun ml4pg-extract-theorems-library ()
+ (interactive)
+ (search-backward "Qed.")
+ (forward-char)
+ (forward-char)
+ (forward-char)
+ (forward-char)
+ (let ((final (point))
+ (last-point -1))
+ (beginning-of-buffer)
+ (proof-goto-point)
+ (ml4pg-export-theorem)
+ (while (and (< (point) final) (not (= (point) last-point)))
+ (progn (setq last-point (point))
+ (ml4pg-export-theorem)))
+ )
+
+ )
+
+
+
+;;; Function to normalize the results
+
+(defun ml4pg-max-two-lists (list1 list2)
+ (do ((temp1 (ml4pg-take-30 (append list1 (ml4pg-generate-zeros 24))) (cdr temp1))
+ (temp2 (ml4pg-take-30 (append list2 (ml4pg-generate-zeros 24))) (cdr temp2))
+ (temp nil))
+ ((endp temp1) temp)
+ (if (< (car temp1) (car temp2))
+ (setf temp (append temp (list (car temp2))))
+ (setf temp (append temp (list (car temp1))))
+ )))
+
+(defun ml4pg-min-two-lists (list1 list2)
+ (do ((temp1 (ml4pg-take-30 (append list1 (ml4pg-generate-zeros 24))) (cdr temp1))
+ (temp2 (ml4pg-take-30 (append list2 (ml4pg-generate-zeros 24))) (cdr temp2))
+ (temp nil))
+ ((endp temp1) temp)
+ (if (> (car temp1) (car temp2))
+ (setf temp (append temp (list (car temp2))))
+ (setf temp (append temp (list (car temp1))))
+ )))
+
+(defun ml4pg-max-position (list )
+ (do ((temp list (cdr temp))
+ (max (ml4pg-generate-zeros (length (car list)))))
+ ((endp temp) max)
+ (setf max (ml4pg-max-two-lists max (car temp)))))
+
+(defun ml4pg-min-position (list )
+ (do ((temp list (cdr temp))
+ (min (ml4pg-generate-zeros (length (car list)))))
+ ((endp temp) min)
+ (setf min (ml4pg-min-two-lists min (car temp)))))
+
+
+(defun ml4pg-normalize-list (list max min)
+ (do ((temp (ml4pg-take-30 (append list (ml4pg-generate-zeros 24))) (cdr temp))
+ (temp-max max (cdr temp-max))
+ (temp-min min (cdr temp-min))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (cond ((< 0 (car temp)) (setf temp2 (append temp2 (list (/ (+ (car temp) .0) (car temp-max))))))
+ ((= 0 (car temp)) (setf temp2 (append temp2 (list 0))))
+ (t (setf temp2 (append temp2 (list (- (/ (+ (car temp) .0) (car temp-min))))))))))
+
+(defun ml4pg-normalize (list)
+
+ (let ((max (ml4pg-max-position list))
+ (min (ml4pg-min-position list)))
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (setf temp2 (append temp2 (list (ml4pg-normalize-list (car temp) max min)))))))
+
+
+
+
+
+
+
+
diff --git a/contrib/ML4PG/ssreflect/lemmas.txt b/contrib/ML4PG/ssreflect/lemmas.txt
new file mode 100644
index 00000000..c818e3b0
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/lemmas.txt
@@ -0,0 +1,44 @@
+size_ncons&102$addn0&103$IHs&104$cats1&105$size_cat&106$addnC&107$last_cat&108$lastI&109$belast_cat&110$catA&111$|&112$rewrite&113$cat0s&114$cats0&115$cat_rcons&116$last_nth&119$nth_nil&120$eq_s12&122$IHs1&123$=>&124$i&125$addn1&126$maxn0&127$maxnE&128$subn1&129$add1n&130$addn_maxr&131$nth_ncons&132$eqSS&133$subnn&134$nth_default&135$subn_gt0&136$size_set_nth&138$maxnA&139$maxnn&140$nth_set_nth&141$maxnCA&142$eq_sym&143$if_neg&144$ne_n12&145$add0n&147$eqn_leq&148$andbC&149$ltnNge&150$count_size&151$leqnn&154$fun_if&155$filter_cat&159$count_filter&160$orbA&161$has_cat&162$has_seq1&163$orbC&164$andbA&165$all_cat&166$all_seq1&167$Ea&168$eq_filter&169$has_count&170$eq_count&171$all_count&172$has_find&173$s12&177$filter_pred0&179$filter_predT&180$addnCA&181$addnA&182$addn_negb&183$count_pred0&184$count_predT&185$negb_and&187$has_predC&188$has_predU&189$iterSr&191$IHn&192$drop_oversize&194$drop0&195$take_oversize&196$cat_take_drop&198$size_drop&199$size_takel&200$ltnW&201$ltnS&202$subSS&203$take0&204$take_cat&205$ltn_neqAle&206$Hn0&207$take_size&208$nth_cat&209$size_take&210$lt_n0_s&211$addKn&212$leq_addr&213$eqnP&216$lt_i_n0&217$1IHs&218$take_size_cat&220$drop_size_cat&221$size_rot&222$rot_size_cat&223$catrev_catr&225$catrevE&226$rev_cons&227$size_rcons&228$catrev_catl&229$rev_cat&230$rev_rcons&231$subn0&232$ltnn&233$subnK&234$addSnnS&235$eqseq_cons&237$andbF&238$1andbA&239$in_cons&241$inE&242$mem_cat&243$mem_seq1&244$mem_rcons&246$mem_head&247$mem_behead&249$s0x&250$s0'x&251$orbT&252$ay&254$eq_a&258$y&259$s_y&260$eq_a12&261$s'y&262$eq_in_count&263$has_filter&264$Es12&265$in&266$Hx&267$*&268$eqxx&270$all_pred1_nseq&271$def_s&273$has_pred0&274$has_sym&275$negb_or&276$cat_uniq&277$andbCA&278$uniq_catC&279$mem_filter&280$negbTE&281$mem_rev&282$Hy&283$all_pred1P&284$count_uniq_mem&285$s_x&286$mem_undup&287$size_undup&288$find_size&290$has_pred1&291$find_cat&292$lt_i_s&293$mem_nth&294$rcons_uniq&295$index_cat&296$size_belast&297$index_uniq&298$eq_sij&299$cat_cons&302$i.+1&304$nax&305$exists&306$i]&307$eq_all&308$a_s&309$IHv&310$count_cat&312$addn_eq0&313$count_predC&314$filter_predI&315$cnt_a'&316$leq_add2r&318$eq12&319$perm_eq_sym&321$eqn_add2l&322$perm_catC&324$perm_cat2r&326$cat1s&328$perm_catCA&329$perm_cons&330$def_s2&331$mem_rot&332$negPf&333$rot_uniq&334$le_s21&335$leqNgt&337$s3x&338$uniq_leq_size&339$eqs12&340$eqs12,&342$uniq_size_uniq&343$@uniq_leq_size&345$s2x&346$Hs12&347$x&352$\in&353$s1&354$by&355$/(rot i s1)&356$def_s1&357$FcatCA&359$addnK&360$rot1_cons&361$rotK&362$has_rot&363$subKn&364$rot0&365$size_rev&367$size_rotr&370$@size_takel&371$5(catA, =^~ rot_size_cat)&372$leq_addl&373$rot_addn&375$addnBA&376$@rot_oversize&377$1ltnW&378$rot_add_mod&379$1addnC&380$rot_rot&381$has_mask_cons&382$Hsn0:&383$size&384$take&385$=&386$Hs&387$size_mask&388$mask_cat&389$mask_rot&392$size_nseq&393$mask_false&394$sz_m&396$geq_min&397$nth_take&398$negb_add&399$addbF&400$addbT&401$negb_eqb&402$before_find&403$def_m_i&404$lt_i_m&405$subnKC&406$congr1&407$drop_nth&410$nth_index&411$index_mem&412$mask0&413$sz_m1&414$sz_m2&415$cat_subseq&416$sub0seq&417$mask_true&419$all_predC&428$map_cat&429$map_take&430$map_drop&431$map_rot&433$size_map&434$filter_mask&435$a_x&436$size_subseq_leqif&438$subseq_filter&439$introT&440$uniq_perm_eq&441$filter_uniq&442$Ds2&444$perm_rcons&445$eqP&446$x']&447$map_mask&449$inj_in_eq&450$count_map&453$Est&454$eq_sz&457$ltis&458$nth_map&459$Ef&460$eq_f12&461$eqf12&462$eqxx,&463$sy&464$gK&466$fK&467$mem_map&468$pmap_filter&469$size_pmap&471$IHn1&475$addnS&476$iota_add&477$size_iota&478$andbN&479$leq_eqVlt&480$mem_iota&482$nth_iota&484$size_mkseq&486$Hi&487$nth_mkseq&488$mkseq_nth&490$perm_map&491$perm_eq_small&492$s&493$Ds&494$iota_addl&495$map_rotr&496$map_comp&497$@eq_map&498$mulnC&499$sumn_nseq&500$foldr_cat&501$revK&502$Hfg&503$Hgf&504$addn_minr&505$size_zip&506$zip_cat&507$zip_rcons&508$IHss&509$IHsh&510$leq_subLR&511$leq_add2l&513$leq_max&514$def_z&515$def_x'&516$map_f&517$not_fxt_z&518$eq_s&519$eq_t&520$fpz&521$sp2&522$Ut&526$:&527$z.1,&528$x,&529$Dz1&530$s1z&531$s1'x&532$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$andb_false_r&108$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$i:&174$F&175$=&176$G&177$by&178$big_const_seq&179$cardE&180$size_iota&181$big_const&182$card_ord&183$big1&186$big_mkcond&187$mul1m,&188$filter_index_enum&189$enum1&190$big_seq1&191$big_cat&193$iota_add&194$leq_sub&195$big_geq&196$@big_cat_nat&197$leqnSn&198$big_nat1&199$big_nat_recr&200$leqW&202$val_enum_ord&204$map_cat&205$map_comp&206$eqxx&207$r2i:&208$\in&209$r2&210$has_pred1&211$eq_r12&212$count_cat&214$uniq_perm_eq&217$enum_uniq&218$big_tnth&219$index_uniq&220$valK&221$filter_undup&222$IHr&223$big_rem&224$idM&225$big_undup&226$undup_uniq&227$mem_undup&228$eq_r&229$big_split&230$simpm&231$bigID&232$orbK&233$cardD1&235$Aj&236$Qp&238$Q0&239$cardD1x&240$bigD1&241$Qj,&242$j&243$P0&244$IH&245$h'K&246$reindex_onto&247$hK&248$reindex_inj&251$addSn&252$subnDr&253$addnBA&254$partition_big&255$Pi&256$andbT&257$andb_idl&259$exchange_big_dep&260$Qi&261$2(big_seq_cond _ _ _ xQ)&262$exchange_big_dep_nat&263$big_endo&264$mulm0&266$x&267$y&268$big_distrl&270$big_distrr&271$f&276$ffunE&277$nri&278$eqP&279$big_distr_big_dep&280$mul0m&282$bigA_distr_big&284$big_has_cond&285$big_all_cond&286$allB&287$sum_nat_const&289$muln1&290$Monoid&291$big_const_nat&292$big_andE&293$@leqif_sum&296$muln_gt0&297$leq_maxl&299$geq_max&304$dvdn_lcm&307$in&308$dvFm&309$p_m&310$dvdn_trans&311$dvdn_lcml&312$dvdn_gcd&313$dvmF&314$m_p&315$dvdn_gcdl&316$mul0n&317$muln0&318$mulnDr&319$mulnDl&320$mulnC&321$addn2&322$exp0n&323$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$i:&174$F&175$=&176$G&177$by&178$big_const_seq&179$cardE&180$size_iota&181$big_const&182$card_ord&183$big1&186$big_mkcond&187$mul1m,&188$filter_index_enum&189$enum1&190$big_seq1&191$big_cat&193$iota_add&194$leq_sub&195$big_geq&196$@big_cat_nat&197$leqnSn&198$big_nat1&199$big_nat_recr&200$leqW&202$val_enum_ord&204$map_cat&205$map_comp&206$eqxx&207$r2i:&208$\in&209$r2&210$has_pred1&211$eq_r12&212$count_cat&214$uniq_perm_eq&217$enum_uniq&218$big_tnth&219$index_uniq&220$valK&221$filter_undup&222$IHr&223$big_rem&224$idM&225$big_undup&226$undup_uniq&227$mem_undup&228$eq_r&229$big_split&230$simpm&231$bigID&232$orbK&233$cardD1&235$Aj&236$Qp&238$Q0&239$cardD1x&240$bigD1&241$Qj,&242$j&243$P0&244$IH&245$h'K&246$reindex_onto&247$hK&248$reindex_inj&251$addSn&252$subnDr&253$addnBA&254$partition_big&255$Pi&256$andbT&257$andb_idl&259$exchange_big_dep&260$Qi&261$2(big_seq_cond _ _ _ xQ)&262$exchange_big_dep_nat&263$big_endo&264$mulm0&266$x&267$y&268$big_distrl&270$big_distrr&271$f&276$ffunE&277$nri&278$eqP&279$big_distr_big_dep&280$mul0m&282$bigA_distr_big&284$big_has_cond&285$big_all_cond&286$allB&287$sum_nat_const&289$muln1&290$Monoid&291$big_const_nat&292$big_andE&293$@leqif_sum&296$muln_gt0&297$leq_maxl&299$geq_max&304$dvdn_lcm&307$in&308$dvFm&309$p_m&310$dvdn_trans&311$dvdn_lcml&312$dvdn_gcd&313$dvmF&314$m_p&315$dvdn_gcdl&316$mul0n&317$muln0&318$mulnDr&319$mulnDl&320$mulnC&321$addn2&322$exp0n&323$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$mxE&102$ord1&105$perm1&106$permM&107$eq_axiomK&108$cast_ord_id&109$castmx_id&110$mxE,&113$unsplitK&116$row_mxEl&117$row_mxEr&118$col_mxEu&120$col_mxEd&121$row_mxKl,&122$col_mxKu,&123$tr_col_mx&125$trmx_usub&126$trmx_dsub&127$hsubmxK&128$castmxE&130$j&131$&&&132$by&133$def_j&134$lshift_subproof&135$mxE]&136$~~&137$j2&138$leqNgt&139$j1&140$<&141$n2&142$ltn_add2l&143$leq_add2l&144$trmx_cast&145$row_mxA&146$tr_col,&147$tr_col',&148$row_mxEl,&149$row_mxEr,&150$col_mxEu,&151$col_mxEd,&152$2mxE&153$def_j'&155$addSn&156$ltn_addr&157$@tr_row'&158$@tr_col_mx&159$col'Kl&160$addnS&161$tr_row',&162$col'Kr&163$vsubmxK&164$col_mxKu&165$row_mxKl&166$row_mxKr&167$col_mxKd&168$submxK&169$trmx_ulsub&170$trmx_ursub&171$trmx_dlsub&172$trmx_drsub&173$block_mxKul&174$block_mxKur&175$block_mxKdl&176$block_mxKdr&177$tr_block_mx&178$tr_row_mx&179$2tr_col_mx&180$block_mxEh&181$col_mxA&182$cast_row_mx&183$block_mxEv&184$cast_col_mx&185$castmx_comp&186$etrans_id&187$card_prod&188$card_ord&189$cast_ordK&190$enum_valK&191$enum_rankK&192$mxvecE&193$castmxE,&194$conform_mx_id&195$neq_mn&196$B&197$nonconform_mx&198$addrA&199$addrC&200$add0r&201$addNr&202$mulrS&203$IHd&204$can2_eq&208$raddf0&209$opp_col_mx&213$opp_row_mx&214$add_col_mx&215$add_row_mx&216$negbTE&217$row0&220$eqxx&221$map_const_mx&222$raddfN&223$raddfD&224$map_mxD&225$map_mxN&226$mul1r&227$mulrDl&228$mulrDr&229$mulrA&230$summxE&231$bigD1&232$mulr1&233$big1&234$addr0&235$diff&236$j'&237$mulr0&238$matrix_sum_delta&239$big_ord1&240$can_eq&241$inj_eq&242$vec_mx_delta&243$vec_mxK&244$scale_col_mx&245$scale_row_mx&246$mulrnAr&247$mulrnDl&248$mulr_natr&249$i'&250$ne_i'i&251$diag_const_mx&253$raddfB&254$scale_scalar_mx&255$diag_mx_sum_delta&256$scalar_mx_sum_delta&258$scaler_sumr&259$scale1r&260$A&262$eqxx]&263$eqn0Ngt&264$n0&265$in&266$*&267$flatmx0&268$val_eqE&269$eqn_add2l&270$big_distrr&271$exchange_big&272$big_distrl&273$mul0r&274$sumrN&275$mulrN&276$mulNr&277$big_split&278$mulmxDl&279$mulNmx&280$mulmxDr&281$mulmxN&282$mul0mx&284$mulmx0&286$rowE&287$mulmxA&288$mulmxnE&289$andbT&290$natrM&291$mulrnA&292$mulnb&293$andbAC&294$mul_delta_mx_cond&295$mulrnAl&296$mul_diag_mx&297$mul_scalar_mx&298$mul_mx_diag&299$reindex_inj&300$permKV&301$mul_col_perm&302$invgK&303$tpermV&304$mul_row_perm&305$mulmx1&306$mul1mx&307$col_permE&308$trmx1&310$tr_perm_mx&311$row_permM&313$perm_mx1&315$perm_mx_is_perm&316$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$m1_lb&186$m2_lb,&187$eqPQ&188$max_i&189$max_j&190$eq_f&191$mulSn&193$mulnS&194$mulnSr&195$muln0&196$muln0,&197$mulnC&198$mulnDl&199$mulnBl&200$mulnA&201$mulnCA&202$mulnBr&203$muln_eq0&204$leq_mul2l&205$le_mn2&207$orbT&208$leq_mul2r&209$le_mn1&210$orb_andr&211$eqn_mul2l&212$eqn_mul2r&213$ltn_mul2l&214$ltn_mul2r&215$mul1n&216$ltn_pmul2r&217$ltn_Pmull&218$maxn_mulr&220$minn_mulr&221$muln1&222$expnS&223$mul1n,&224$exp1n&225$expnD&226$expnMn&227$expnM&228$addn_gt0&229$eqn0Ngt&230$expn_gt0&231$leq_pmul2l&232$leq_pmulr&233$leq_exp2l&234$eqn_exp2l&235$leq_exp2l]&236$ltn_exp2l]&237$leq_mul&239$expn1&240$ltn_mul&241$IHe&242$ltn_exp2r&243$leq_exp2r&244$eqn_exp2r&245$muln_gt0&246$addTb&247$addbA&248$odd_add&251$odd_sub&252$andb_addl&253$odd_mul&254$addnn&255$mul2n&256$doubleB&257$2ltnNge&258$leq_double&259$doubleS&260$ltn_Sdouble&261$addbb&262$muln2&263$uphalf_half&264$doubleD&265$half_double,&266$odd_double_half&267$half_double&268$uphalf_double&269$halfD&270$mulnn&271$mulnDr&272$def_m&273$sqrnD&274$2addnA&275$/(2 * 2)&276$sqrn_sub&277$lte&280$ltm12&281$ltm23&282$andbT&283$eqm12&284$f_mono&285$in&286$hyp&287$*&288$lemn&289$le_ab&290$geq_leqif&291$n12_0&294$le2&295$m2_0&296$n1_gt0&297$n2_gt0&298$sqrn_gt0&299$ne_mn&300$ltn_add2r&301$nat_Cauchy&302$addE&303$add_mulE&304$mulE&305$mul_expE&306$sub2nn&307$:&308$n.*2&309$def_b&106$mem_topred&130$symR&132$Rxy&133$eqiR&134$fK&135$hf&140$fgK&141$mf&143$fgK_on&144$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$le_i_mj&186$:&187$subnBA&188$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$subnBA&186$:&187$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big1&181$big_mkcond&182$mul1m,&183$filter_index_enum&184$enum1&185$big_seq1&186$big_cat&188$iota_add&189$leq_sub&190$big_geq&191$@big_cat_nat&192$leqnSn&193$big_nat1&194$big_nat_recr&195$leqW&197$val_enum_ord&199$map_cat&200$map_comp&201$eqxx&202$count_cat&204$uniq_perm_eq&207$enum_uniq&208$big_tnth&209$index_uniq&210$valK&211$filter_undup&212$IHr&213$big_rem&214$idM&215$big_undup&216$undup_uniq&217$mem_undup&218$eq_r&219$big_split&220$simpm&221$bigID&222$orbK&223$cardD1&225$Aj&226$Qp&228$Q0&229$cardD1x&230$bigD1&231$Qj,&232$j&233$P0&234$IH&235$h'K&236$reindex_onto&237$hK&238$reindex_inj&241$addSn&242$subnDr&243$addnBA&244$partition_big&245$Pi&246$andbT&247$andb_idl&249$exchange_big_dep&250$Qi&251$2(big_seq_cond _ _ _ xQ)&252$exchange_big_dep_nat&253$big_endo&254$mulm0&256$x&257$y&258$big_distrl&260$big_distrr&261$f&263$ffunE&264$nri&265$eqP&266$big_distr_big_dep&267$mul0m&269$bigA_distr_big&271$big_has_cond&272$big_all_cond&273$allB&274$sum_nat_const&276$muln1&277$Monoid&278$big_const_nat&279$big_andE&280$@leqif_sum&283$muln_gt0&284$leq_maxl&286$geq_max&291$dvdn_lcm&294$in&295$dvFm&296$p_m&297$dvdn_trans&298$dvdn_lcml&299$dvdn_gcd&300$dvmF&301$m_p&302$dvdn_gcdl&303$mul0n&304$muln0&305$mulnDr&306$mulnDl&307$mulnC&308$addn2&309$exp0n&310$big1_seq&311$in_nil&312$big_cat_nested,&313$op_idx'&314$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$big_endo&256$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$big_has_cond&274$big_all_cond&275$allB&276$sum_nat_const&278$muln1&279$Monoid&280$big_const_nat&281$big_andE&282$@leqif_sum&285$muln_gt0&286$leq_maxl&288$geq_max&293$dvdn_lcm&296$in&297$dvFm&298$p_m&299$dvdn_trans&300$dvdn_lcml&301$dvdn_gcd&302$dvmF&303$m_p&304$dvdn_gcdl&305$mul0n&306$muln0&307$mulnDr&308$mulnDl&309$mulnC&310$addn2&311$exp0n&312$big1_seq&313$in_nil&314$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$is_perm_mx_tr&312$is_perm_mxMl&313$perm_mx_is_perm,&314$ltn_ord&315$lshift_subproof&316$row_mx0&317$leq_min&318$tr_pid_mx&319$pid_mx_minv&320$pid_mx_minh&321$le_n_i&322$andbCA&323$mul_pid_mx&324$minnn&325$minn_idPr&326$mulmxBl&327$pid_mx_id&328$subrr&329$mulmxBr&330$mul_pid_mx_copid&331$oppr0&332$defk&333$defi&334$big_split_ord&335$mul_col_mx&336$mul_mx_row&337$mul_row_col&338$mul_row_block&339$linear_sum&340$linearZ&341$mul_rV_lin&343$mxvecK&344$scalemxAl&345$linearP&346$row_mul&347$raddf0]&348$mulr_sumr&349$mxtrace_diag&351$mx11_scalar&353$block_mxEul,&354$oner_eq0&355$lift_permV&359$permK&360$canF_eq&361$split1&362$lift0_perm_lift&363$lift0_perm0&364$lift0_mx_perm&365$rmorphM&366$rmorph_sum&367$rmorph_nat&368$rmorphMn&369$map_scalar_mx&370$rmorph1&371$rmorph_sign&373$rmorph_prod&374$det_map_mx&375$map_row'&376$map_col'&377$cofactor_map_mx&378$map_mx_sub&379$map_mx1&380$map_pid_mx&381$map_delta_mx&385$def_gf&386$map_mxvec&388$map_vec_mx&389$trmx_mul_rev&390$mulrC&391$trmx_mul&392$scalemxAr&393$reindex&394$pair_bigA&395$mulrAC&396$mulmx_sum_row&397$scaler_suml&398$mulmx_diag&399$row_id&402$mulrCA&403$BA&404$CA&405$bigID&406$oddMt&410$mulN1r&411$tpermK&412$eqA12&413$odd_permV&414$t&415$Dst&416$det_perm&417$odd_perm1&418$det1&419$prodr_const&420$scale0r&421$detZ&422$exprS&423$bigA_distr_bigA&425$valP&427$signr_addb&428$odd_permM&429$pvalE&430$determinant_alternate&431$simp&432$Ef12&433$p_i&437$ulsfK&439$liftK&440$permE&441$si0&442$signr_odd&443$odd_add&444$odd_lift_perm&445$_]&446$neq_lift&447$partition_big&448$expand_cofactor&449$tr_row'&451$tr_col'&452$det_tr&453$expand_det_row&454$cofactor_tr&455$cofactorZ&456$eqP&457$Di&458$eq_refl&459$trmx_adj&460$mul_mx_adj&461$mul_adj_mx&462$kA:&463$A'&464$*m&465$=&466$1%:M&467$by&468$kA&469$AB1&470$def_m&471$mul_col_row&472$scalar_mx_block&473$BlAu1&474$AuBr0&475$oner_neq0&476$expand_det_col&477$1simp&478$block_mxEdl&479$block_mxEul&480$col'_col_mx&481$row'Ku&482$row'_row_mx&483$IHn1&484$trmx0&485$det_ublock&486$unitmxE&487$unitr1&488$unitrX&489$unitrN&490$unitrM&491$invr1&492$adj1&493$if_same&494$Ua&495$U_A&496$adjZ&497$scalerA&498$invrM&499$unitrX_pos&500$mulrK&501$exprSr&502$prednK&503$divrK&504$scalemx1&505$invmxZ&506$invmx1&507$invr_out&508$nsA&509$mulVr&510$mulVmx&511$mulmxV&512$uA&513$negbT&514$divrr&516$det_inv&517$unitrV&518$unitmx_tr&519$unitmx_inv&521$unitmx_mul&522$unitmx1&523$perm_mxM&526$mulVg&527$unitr0&531$mulf_eq0&533$nz_a&534$subr_eq0&536$orbF&537$scalemx_eq0&538$linearB&539$eq_aAB&540$mul_mx_scalar&542$vA0&543$detA0&544$thinmx0&545$signr_eq0&546$unlift_none&547$wjA'0&548$reindex_onto&551$defA&552$@mul_mx_row&553$/aj&554$aj0&555$wjA'&556$wj0_0&558$subr0&559$negPf&560$w0A'&561$linear0&562$fmorph_unit&565$unitfE&566$map_mxZ&568$map_mx_adj&569$fmorphV&570$is_perm_mxMr&573$mulmxE&575$xrowE&576$/A1&577$/(1 + n.+1)%N&578$mulmx_block&579$subrK&580$lshift0&581$tpermL&582$mulVf&583$_&584$elimNf&585$@det_lblock&586$def_t&589$trmxK&590$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mulC&116$mulm1&117$iteropS&118$mulmA&119$mulmC&120$mulmCA&121$mem_iota&124$leq_subLR&125$subSn&126$subnDA&127$subnKC&128$enumT&129$mem_enum&130$unlock&131$f_op&136$big_filter&139$filter_predI&140$mkseq_nth&143$big_map&144$eqn0Ngt&145$big_hasC&146$has_pred0&147$foldr_cat&149$big_cat_nested&150$big_seq_cond&152$big_andbC&153$big_seq&154$eq_bigr&155$mem_index_iota&156$big_nat_cond&157$big_nil&160$big_cons&161$iota_addl&163$big_addn&164$big_ltn&165$big_add1&166$val_ord_enum&167$sorted_filter&169$iota_ltn_sorted&170$mem_filter&171$andbCA&172$andb_idr&173$big_mkord&174$len12&175$big_ord_widen_cond&176$inord_val&177$big_pred0&178$]&179$big_ord0&180$big_nth&181$tnth_nth&182$big_ord_widen_leq&183$inordK&186$eqFG&187$big_const_seq&188$cardE&189$size_iota&190$big_const&191$card_ord&192$big_cat_nested,&193$op_idx'&194$big1&197$mul1m,&198$filter_index_enum&199$enum1&200$big_seq1&201$big_cat&203$iota_add&204$leq_sub&205$big_geq&206$@big_cat_nat&207$leqnSn&208$leqW&210$val_enum_ord&212$map_cat&213$map_comp&214$eqxx&215$count_cat&217$uniq_perm_eq&220$enum_uniq&221$big_tnth&222$index_uniq&223$valK&224$filter_undup&225$IHr&226$big_rem&227$idM&228$big_undup&229$undup_uniq&230$mem_undup&231$eq_r&232$big_split&233$simpm&234$bigID&235$orbK&236$cardD1&238$Aj&239$Qp&241$Q0&242$cardD1x&243$bigD1&244$Qj,&245$j&246$P0&247$h'K&248$reindex_onto&249$hK&250$reindex_inj&253$addSn&254$subnDr&255$addnBA&256$partition_big&257$Pi&258$andbT&259$andb_idl&261$exchange_big_dep&262$Qi&263$2(big_seq_cond _ _ _ xQ)&264$exchange_big_dep_nat&265$big_endo&266$mulm0&268$x&269$y&270$big_distrl&272$big_distrr&273$f&275$ffunE&276$nri&277$eqP&278$big_distr_big_dep&279$mul0m&281$bigA_distr_big&283$big_has_cond&284$big_all_cond&285$allB&286$sum_nat_const&288$Monoid&289$big_const_nat&290$big_andE&291$@leqif_sum&294$muln_gt0&295$leq_maxl&297$geq_max&302$dvdn_lcm&305$in&306$dvFm&307$p_m&308$dvdn_trans&309$dvdn_lcml&310$dvdn_gcd&311$dvmF&312$m_p&313$dvdn_gcdl&314$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$by&143$nth_nseq&144$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$min0n&155$big_mkord&156$big_ord0&157$GRing&158$minn0&159$mulE&160$addE&161$minSS&162$big_nat_recl&163$GRing.addrC&164$GRing.add0r&165$addnS&167$nth_take&168$nth_drop&170$ltn_add2l&171$lsubseqmxE&172$usubseqmxE&173$rsubseqmxE&174$dsubseqmxE&175$size_row_row_seqmx&176$ltn_add2r&177$leqNgt&178$size_row_col_seqmx&179$ord1&180$row_seqmxE&181$col_seqmxE&182$H2&183$H1&184$H2=>&185$H3&186$H4&187$castmx_id&188$size_iota&189$mkseqmxE&191$oneE&192$scalar_seqmxE&193$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul1n&116$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.Theory.sumrB&115$big_ltn&116$@big_add1&117$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$min0n&155$big_mkord&156$big_ord0&157$GRing&158$minn0&159$mulE&160$addE&161$minSS&162$big_nat_recl&163$GRing.addrC&164$GRing.add0r&165$addnS&167$nth_take&168$nth_drop&170$ltn_add2l&171$lsubseqmxE&172$usubseqmxE&173$rsubseqmxE&174$dsubseqmxE&175$size_row_row_seqmx&176$ltn_add2r&177$leqNgt&178$size_row_col_seqmx&179$ord1&180$row_seqmxE&181$col_seqmxE&182$H2&183$H1&184$H2=>&185$H3&186$H4&187$castmx_id&188$size_iota&189$mkseqmxE&191$oneE&192$scalar_seqmxE&193$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$mxE&102$ord1&103$hjj&104$tpermR&105$hxx&106$hjjj&107$tpermL&108$tpermD&109$hx&110$leq0n&111$hy&112$xcolE&113$xcol_tool&114$vsubmxK&115$lshift0&116$eqP&117$hM00&118$unitmx1&119$mulmx1&120$block_mxEv&121$rshift1&122$unitmxE&123$det_ublock&124$det1&125$mul1r&126$unitr1&127$submxK&128$mulmx_block&129$mulmx0&130$addr0&131$mul_scalar_mx&132$scalerA&133$mulrN&134$mulfV&135$scaleN1r&136$addrC&137$subrr&138$scalemxAr&139$scaleNr&140$unitmx_mul&141$unitmx_perm&142$mul1r
+&143$h1&144$hsubmxK&145$mulmxA&146$@mul_row_block&147$mulmx0
+&148$add0r&149$h3&150$block_mxEh&151$tperm01_tool&152$_(1 + n)]row_mx0&153$dl&154$h&155$row_mx0&156$addsmxC&158$trmx0&160$trmxK&161$trmx_eq0&162$tr_block_mx&163$tr_col_mx&164$mulr1n&167$mxrank_tr&168$mxrank_disjoint_sum&169$rank_rV&170$rank0M&171$trmx_neq0&172$hC&173$tr_scalar_mx&174$sub_capmx&175$hB&176$big1&177$mulr0&178$hb&179$@mul0r&180$scale0r&181$rankaMc&182$M&183$mxrankMfree&184$subnDr&185$subSn&186$rank_leq_row&187$mulmxV&188$mul0mx&189$by&190$hY&191$mul_mx_scalar&192$@mul_row_col&193$@mul_col_mx&194$col_mx0&195$mul1mx&196$@mulmx_block&197$scalar_mx_block&198$m&199$n&200$castmx_mul&201$castmxE&202$thinmx0&203$X&204$hX&205$@mul_mx_row&206$mulmxN&207$addr_eq0&208$scalerN&209$opprK&210$mulVf&211$scale1r&212$hM&213$hR&214$hZ&215$ker0MS&217$dsubseqmxE&218$seqmx0E&219$@seqmxE&220$rsubseqmxE&221$dlsubseqmxE&222$row_seqmxE&223$ursubseqmxE&224$mulseqmxE&225$drsubseqmxE&226$cinvE&227$scaleseqmxE&228$subseqmxE&229$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$HH1&163$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$expn0&102$expnS&103$H&104$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$H&117$addnsubn1&118$addSn&119$mulnDr&120$addn2&121$IH0&122$H1&123$expn_gt0&124$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$H&117$addnsubn1&118$addSn&119$mulnDr&120$addn2&121$IH0&122$H1&123$expn_gt0&124$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$factS&112$fact_auxP&113$prednK&114$addnS&115$pred_Sn&116$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$IH&102$mulSn&103$helper_mul_is_theta&104$IH&102$mulSn&103$helper_mul_is_theta&104$IH&102$IH&102$IH&102$pred_Sn&103$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$helper_expt_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_expt&112$program_is_fn_expt&113$fn_expt_is_theta&114$H&115$program_correct_expt&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$helper_less_is_theta&102$IH&103$pred_Sn&104$loop_is_helper_less&105$program_is_fn_less&106$fn_less_is_theta&107$H&108$program_correct_less&109$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$mulnS&108$helper_power_is_theta&109$mul1n&110$pred_Sn&111$run_app&112$loop_is_helper_power&113$program_is_fn_power&114$fn_power_is_theta&115$H&116$program_correct_power&117$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$factS&112$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$factS&113$fact0&114$mul0n&102$mul1n&103$IH&104$pred_Sn&105$mulnDr&106$mulnDl&107$
+&108$helper_fib_is_theta&109$muln0&110$muln1&111$H&112$in&113$/fib_locals&114$/helper_fib&115$prednK&116$H1&117$run_app&118$loop_is_helper_fib&119$program_is_fn_fib&120$fn_fib_is_theta&121$program_correct_fib&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&291$le2&292$m2_0&293$n1_gt0&294$n2_gt0&295$sqrn_gt0&297$ne_mn&298$ltn_add2r&299$nat_Cauchy&300$addE&301$add_mulE&302$mulE&303$mul_expE&304$sub2nn&305$natTrecE&306$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$/(rot i s1)&229$def_s1&230$FcatCA&232$addnK&233$rot1_cons&234$rotK&235$has_rot&236$subKn&237$rot0&238$size_rev&240$size_rotr&243$@size_takel&244$5(catA, =^~ rot_size_cat)&245$leq_addl&246$rot_addn&248$addnBA&249$@rot_oversize&250$1ltnW&251$rot_add_mod&252$1addnC&253$rot_rot&254$has_mask_cons&255$size_mask&256$mask_cat&257$Hs&258$mask_rot&261$size_nseq&262$mask_false&263$sz_m&265$geq_min&266$nth_take&267$negb_add&268$addbF&269$addbT&270$negb_eqb&271$before_find&272$def_m_i&273$lt_i_m&274$subnKC&275$congr1&276$drop_nth&277$nth_index&278$index_mem&279$mask0&280$sz_m1&281$sz_m2&282$cat_subseq&283$sub0seq&284$mask_true&286$all_predC&295$map_cat&296$map_take&297$map_drop&298$map_rot&300$size_map&301$filter_mask&302$a_x&303$size_subseq_leqif&305$subseq_filter&306$introT&307$uniq_perm_eq&308$filter_uniq&309$x&310$Ds2&312$perm_rcons&313$eqP&315$x']&316$map_mask&318$inj_in_eq&319$count_map&322$Est&323$eq_sz&326$ltis&327$nth_map&328$Ef&329$eq_f12&330$eqf12&331$eqxx,&332$sy&333$gK&335$fK&336$mem_map&337$pmap_filter&338$size_pmap&340$IHn1&344$addnS&345$iota_add&346$size_iota&347$andbN&348$leq_eqVlt&349$mem_iota&351$nth_iota&353$size_mkseq&355$Hi&356$nth_mkseq&357$mkseq_nth&359$perm_map&360$perm_eq_small&361$Ds&362$iota_addl&363$map_rotr&364$map_comp&365$@eq_map&366$mulnC&367$sumn_nseq&368$foldr_cat&369$revK&370$Hfg&371$Hgf&372$addn_minr&373$size_zip&374$zip_cat&375$zip_rcons&376$IHss&377$IHsh&378$leq_subLR&379$leq_add2l&381$leq_max&382$def_z&383$def_x'&384$map_f&385$not_fxt_z&386$eq_s&387$eq_t&388$fpz&389$sp2&390$Ut&391$:&392$z.1,&393$=&394$x,&395$by&396$Dz1&397$s1z&398$s1'x&399$def_b&106$mem_topred&129$symR&131$Rxy&132$eqiR&133$fK&134$hf&139$fgK&140$mf&142$fgK_on&143$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$thinmx0&102$=>&103$H&104$det1&105$det0&106$H1&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$ffunE&102$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$big_endo&256$mxE&108$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$big_has_cond&274$big_all_cond&275$allB&276$sum_nat_const&278$muln1&279$Monoid&280$big_const_nat&281$big_andE&282$@leqif_sum&285$muln_gt0&286$leq_maxl&288$geq_max&293$dvdn_lcm&296$in&297$dvFm&298$p_m&299$dvdn_trans&300$dvdn_lcml&301$dvdn_gcd&302$dvmF&303$m_p&304$dvdn_gcdl&305$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$addnS&155$nth_take&156$nth_drop&158$ltn_add2l&159$lsubseqmxE&160$usubseqmxE&161$rsubseqmxE&162$dsubseqmxE&163$size_row_row_seqmx&164$ltn_add2r&165$leqNgt&166$size_row_col_seqmx&167$ord1&168$row_seqmxE&169$col_seqmxE&170$H2&171$H1&172$H2=>&173$H3&174$H4&175$castmx_id&176$size_iota&177$mkseqmxE&179$oneE&180$scalar_seqmxE&181$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$helper_expt_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_expt&112$program_is_fn_expt&113$fn_expt_is_theta&114$H&115$program_correct_expt&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$mul0n&102$mul1n&103$IH&104$pred_Sn&105$mulnDr&106$mulnDl&107$
+&108$helper_fib_is_theta&109$muln0&110$muln1&111$H&112$in&113$/fib_locals&114$/helper_fib&115$prednK&116$H1&117$run_app&118$loop_is_helper_fib&119$program_is_fn_fib&120$fn_fib_is_theta&121$program_correct_fib&122$helper_less_is_theta&102$IH&103$pred_Sn&104$loop_is_helper_less&105$program_is_fn_less&106$fn_less_is_theta&107$H&108$program_correct_less&109$IH&102$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$mulnS&108$helper_power_is_theta&109$mul1n&110$pred_Sn&111$run_app&112$loop_is_helper_power&113$program_is_fn_power&114$fn_power_is_theta&115$H&116$program_correct_power&117$addn0&102$addn0&102$addn0&102$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$addn0&102$IH&103$addn0&102$IH&103$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$fact0&102$muln1&103$fact0&102$muln1&103$res&104$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$addn0&102$IH&103$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$def_b&106$mem_topred&129$symR&131$Rxy&132$eqiR&133$fK&134$hf&139$fgK&140$mf&142$fgK_on&143$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$/(rot i s1)&229$def_s1&230$FcatCA&232$addnK&233$rot1_cons&234$rotK&235$has_rot&236$subKn&237$rot0&238$size_rev&240$size_rotr&243$@size_takel&244$5(catA, =^~ rot_size_cat)&245$leq_addl&246$rot_addn&248$addnBA&249$@rot_oversize&250$1ltnW&251$rot_add_mod&252$1addnC&253$rot_rot&254$has_mask_cons&255$size_mask&256$mask_cat&257$Hs&258$mask_rot&261$size_nseq&262$mask_false&263$sz_m&265$geq_min&266$nth_take&267$negb_add&268$addbF&269$addbT&270$negb_eqb&271$before_find&272$def_m_i&273$lt_i_m&274$subnKC&275$congr1&276$drop_nth&277$nth_index&278$index_mem&279$mask0&280$sz_m1&281$sz_m2&282$cat_subseq&283$sub0seq&284$mask_true&286$all_predC&295$map_cat&296$map_take&297$map_drop&298$map_rot&300$size_map&301$filter_mask&302$a_x&303$size_subseq_leqif&305$subseq_filter&306$introT&307$uniq_perm_eq&308$filter_uniq&309$x&310$Ds2&312$perm_rcons&313$eqP&315$x']&316$map_mask&318$inj_in_eq&319$count_map&322$Est&323$eq_sz&326$ltis&327$nth_map&328$Ef&329$eq_f12&330$eqf12&331$eqxx,&332$sy&333$gK&335$fK&336$mem_map&337$pmap_filter&338$size_pmap&340$IHn1&344$addnS&345$iota_add&346$size_iota&347$andbN&348$leq_eqVlt&349$mem_iota&351$nth_iota&353$size_mkseq&355$Hi&356$nth_mkseq&357$mkseq_nth&359$perm_map&360$perm_eq_small&361$Ds&362$iota_addl&363$map_rotr&364$map_comp&365$@eq_map&366$mulnC&367$sumn_nseq&368$foldr_cat&369$revK&370$Hfg&371$Hgf&372$addn_minr&373$size_zip&374$zip_cat&375$zip_rcons&376$IHss&377$IHsh&378$leq_subLR&379$leq_add2l&381$leq_max&382$def_z&383$def_x'&384$map_f&385$not_fxt_z&386$eq_s&387$eq_t&388$fpz&389$sp2&390$Ut&391$:&392$z.1,&393$=&394$x,&395$by&396$Dz1&397$s1z&398$s1'x&399$muln1&102$leq_mul&103$fact_gt0&104$ltn_mul&105$big_nil&106$factS&108$big_add1&109$big_nat_recr&110$mulnC&111$logn1&112$big_geq&113$lognM&114$logn_count_dvd&116$big_mkcond&117$big_nat_widen&118$1ltnW&119$exchange_big_nat&122$divn_count_dvd&124$big_filter&125$fact_prod&126$prednK&128$all_predC&129$has_pred1&130$mem_iota&131$leq_eqVlt&132$bigD1&133$lt0n&134$dvdn_gt0&135$dvdn_addr&136$dvdn_mulr&137$dvdn1&138$1((1 =P p.-1)&139$modnMml&141$modnMmr&142$mulnA&143$mul1n&144$val_eqE&145$i_gt0&146$modnMDl&147$modn_small&148$coprime_sym&149$prime_coprime&150$leqNgt&151$ltn_ord&152$vFp0&153$mod0n&154$mFp1r&155$vFpV&156$mFpA&157$vFp0,&158$eqn_mod_dvd&162$modnDl,&163$subnKC&164$2eqFp&165$Euclid_dvdM&166$addnS&167$addnBA&168$mulnDl&169$subn_sqr&170$leq_sqr&171$mulnS&172$mulnn&173$/(Fp1 : nat)&174$dvdn_addl&175$eqFp&176$Fp_mod&177$eqn0Ngt&178$lt0i&179$modnDl&180$eqxx&181$modnDml&182$mod_fact&183$modnn&184$modnMm&185$big_mkord&186$bigID&187$/mFpM&188$mFpC&189$vFpId&190$mFp1&191$lt1p&192$orbT&193$eqF1n1&194$reindex_onto&195$2negb_or&196$E&197$vFpK&198$big_split&199$big1&200$ffactn1&201$ffactSS&202$muln_gt0&203$ffact_gt0&204$ffactnS&205$mulnK&206$binS&207$bin0&208$addn_gt0&209$IHm&210$andKb&211$leq_add&212$bin_gt0&213$bin_small&214$bin1&215$mulSn&216$mulnDr&217$mulnCA&218$mul_Sm_binm&219$divnMA&220$divn_small&221$fact_smonotone&222$ffact_small&223$eqn_pmul2r&224$bin_ffact&225$subKn&226$bin_fact&227$mulnAC&228$bin_sub&229$leqnSn&230$subSnn&231$mul2n&232$half_double&233$bin2&234$divn2&235$muln_divA&236$dvdn2&237$def_p&238$gtnNdvd&239$bin1]&240$addnn&242$big_nat_rev&243$sum_nat_const&244$card_ord&245$big_ord_recl&246$big_ord0&247$expnS&248$big_distrr&249$big_ord_recr&250$binn&251$subnSK&252$2mulnA&253$expnSr&254$/(f _ _)&255$fxx&256$IHk&257$big1_eq&258$mulnBl&259$subnDA&260$addnK&261$exp1n&262$subn_exp&263$reindex_inj&264$@eq_card1&265$t&266$tuple0&267$sum1dep_card&268$partition_big&269$cardD1&270$Ax&271$reindex&272$tuple_eta&273$theadE&274$andbT&275$all_predI&276$card_uniq_tuples&277$on_card_preimset&278$codom_ffun&280$has_map&282$enumT&283$has_filter&284$size_eq0&285$cardE&286$card_inj_ffuns_on&287$2inE&288$eq_card0&289$A&290$leq_ltn_trans&291$sum_nat_dep_const&292$card_inj_ffuns&293$card_imset&294$cardAk&295$enum_rankK_in&298$ffunE&299$inj_eq&300$im_f0&301$ffactnn&302$eq_pij&303$eqEcard&304$mem_imset&305$card_draws&307$mkseq_nth&308$Am&309$sorted_filter&310$unlock&311$val_ord_enum&312$iota_ltn_sorted&313$mem_enum&314$val_fA&315$cardsE&316$card_uniqP&317$size_tuple&318$map_inj_uniq&319$ft_m&321$in&323$t_x&324$*&325$addSn&326$tnth_nth&327$card_ltn_sorted_tuples&328$map_comp&329$eq_map&330$m0&331$def_m&332$drop_nth&333$leq_addl&334$drop_size&335$leq_add2l&336$tnth_ord_tuple,&338$inord_val&339$inc_t&340$tnth_map&341$tnth_ord_tuple&342$inordK&343$leq_subLR&344$nth_map&345$def_e&346$size_map&347$IHj&349$card_sorted_tuples&351$/(val x0)&352$big_cons&353$IHt&354$val_insubd&355$leq_add2r&356$add_mn&357$s&358$sub_mn&359$=&360$x&361$by&362$card_partial_ord_partitions&363$sameP&364$def_n&365$rowK&107$tnth_nth&108$genmx_id&109$gen_vs2mx&111$sameP&113$memvK&115$linear0&116$genmx0&117$genmx_adds&118$genmx_cap&119$genmx1&120$tvalK&121$mulmx_sum_row&122$linear_sum&123$row_b2mx&125$linearZ&126$mul_b2mx&127$mxE&128$span_b2mx&129$size_tuple&130$scalemx_sub&132$sub0mx&133$Uu&134$Uv&135$linearP&136$addmx_sub&137$scale1r&144$memvE&146$subv_refl&147$eqUV&148$row_sub&150$eqEsubv&152$sub0v&153$andbT&154$scaler0,&155$vs2mxF&156$submx1&157$mem_r2v&159$nz_row_sub&160$memv0&161$subv0&162$vs2mx0&163$submx0&164$nz_row_eq0&165$vs2mxD&166$addsmx_sub&167$addsmxSl&169$addsmxSr&170$addsmxC&171$submx_refl&172$addsmxA&173$addvC&175$linearD&177$submxMl&180$bigD1&181$addvSl&182$subv_add&187$vs2mx_sum&189$vs2mxI&190$sub_capmx&191$capmxSl&193$capmxSr&194$capmxC&195$capmxA&196$capvC&197$subv_cap&199$memv_cap&200$vs2mxD,&202$capvSl&204$bigcapv_inf&205$sub1mx&206$capmx_compl&208$diffmxSl&209$capmx_diff&210$addv_diff_cap&211$addvA&212$addv_idPr&213$mxrank0&214$mxrank_eq0&215$mxrank1&216$mxrank_gen&217$rank_rV&218$can2_eq&219$dimvf&223$mxrank_compl&224$mxrank_cap_compl&225$mxrank_sum_cap&226$dimv_sum_cap&227$dxUV&228$dimv0&229$dimv_eq0&231$eqn_add2l&232$dimv_leqif_eq&233$dim_vline&234$eqxx&235$leq_add2l&237$directvE&239$leq_eqVlt&242$dimv_sum_leqif&243$orbF&244$mxdirectE&245$mxdirect_addsE&246$directv_addE&247$directv_trivial&248$subr_eq0&250$opprD&251$addrACA&252$addr_eq0&253$xpair_eqE&254$eq_uv&255$oppr_eq0&256$andbb&257$memvN&258$memvB&259$addrC&260$vs2mx0]&262$2vs2mx_sum&263$dxU&266$sub0r&267$u_0&268$addKr&269$j&270$Dv&271$sumrB&272$big1&273$negPf&274$subrr&275$Pj&276$big1_eq&278$eq_row_sub&279$memv_span&280$rank_leq_row&281$sXU&283$mem_tnth&284$sub_span&286$u&287$eqXY&288$big_rem&289$big_tnth&290$span_def&291$big_nil&292$big_seq1&293$big_cons&294$big_cat&295$mulmxDl&296$scalemxAl&297$Xv&298$mulmxKpV&299$span_nil&300$span_seq1&301$perm_eq_size&302$eq_span&303$seq1_free&304$sum1_card&305$card_ord&306$has_pred1&307$all_predC&308$big_all&309$big_andE&310$free_directv&311$free_b2mx&312$\row_i&313$k&314$=&315$0&316$by&317$mul0mx&318$lin_b2mx&319$kt0&320$kermx_eq0&321$t_free&322$row_mul&323$mulmx1&324$CtK&325$2mulmxA&326$coord_free&327$mulr1&328$addr0&329$j'i&330$mulr0&331$negb_or&332$cat_free&333$perm_free&334$directvEgeq&336$geq_leqif&337$nil_free&338$big_ord0&339$free_cons&340$IH_X&341$big_ord_recl&342$freeE&343$negb_exists&344$negbK&345$in_tupleE&346$freeX&347$def_v&348$big_nth&349$big_mkord&350$index_uniq&351$free_uniq&352$valK&353$insubT&354$coord_sum_free&355$scaler_sumr&356$big_split&357$scalerA&358$scalerDl&359$size_map&360$eq_szX&361$ltiX&362$nth_map&363$neqji&364$scale0r&365$span_cat&367$defU&368$defV&369$freeY&370$eqEdim&371$sUX&372$dimvS&373$tnth_mktuple&375$row_base_free&376$eq_row_base&377$big_morph&381$span_bigcat&382$freeXs&383$bigcat_free&384$directvP&385$mul_rV_lin1&386$rowE&387$fun_of_lfunK&388$eq_fg&389$lfunE&390$addrA&391$add0r&392$addNr&393$scalerDr&394$/(f2mx (Vector.Hom _))&395$mulmxDr&396$scalemxAr&397$mxvecK&401$linearN&402$eqmxMr&404$limg_line&405$limgS&406$mulmxA&408$Drw&409$capvSr&411$big_map&412$limg_sum&413$opp_lfunE&416$add_lfunE&417$fg0&418$memvf&419$comp_lfunE&420$inv_lfun_def&421$lkerE&422$mxrank_mul_ker&423$limg_ker_dim&424$limg_span&425$limg_dim_eq&426$injf&428$memv_ker&429$linearB&430$eq_fuv&431$inj_eq&432$limg_ker0&433$limg_lfunVK&434$fK&435$capv0&436$lker0_limgf&437$lker0_lfunVK&438$comp_lfunA&439$lker0_compfV&440$comp_lfun1l&441$lker0_compVf&442$comp_lfun1r&443$map_id_in&444$map_comp&445$capvA&446$capvv&447$cap0v&448$limg0&449$add0v&450$addvS&451$capvS&452$limg_add&453$limg_comp&454$addv0&455$defW&456$x&457$Xx&458$lpreim_cap_limg&460$lpreimK&461$addNKr&462$Wfu&463$oner_eq0&464$proj_mx_sub&465$subvP&467$proj_mx_id&468$add_proj_mx&469$daddv_pi_add&473$projv_id&475$dimv_compl&476$limg_proj&477$addnK&478$capfv&479$subr0&480$capv_diff&482$addv_pi2_id&483$memv_pi2&484$addv_diff&485$memv_pi1&486$big_filter&487$IHr&488$coord_vbasis&494$vsprojK&495$basis_free&496$vbasis_mem&497$memt_nth&498$rmorphD&501$scale_scalar_mx&502$mx11_scalar&503$hsubmxK&504$row_mxKl&505$row_mxKr&506$ffunE&508$enum_rankK&509$enum_valK&510$sol_u&512$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$exp0n&102$subn0&103$big1_seq&104$muln0&105$in_nil&106$exp0n&102$subn0&103$big1_seq&104$muln0&105$in_nil&106$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
+&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$ \ No newline at end of file
diff --git a/contrib/ML4PG/ssreflect/matlab_interaction.el b/contrib/ML4PG/ssreflect/matlab_interaction.el
new file mode 100644
index 00000000..6aab9def
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/matlab_interaction.el
@@ -0,0 +1,646 @@
+;; This function starts Matlab
+
+(defun ml4pg-init-clusters ()
+ (interactive)
+ (ml4pg-my-config-display)
+ (require 'comint)
+ (apply 'make-comint "matlab" *matlab-program* nil
+ (list "-nodesktop -r 0")))
+ ;(apply 'make-comint "matlab" *matlab-program* nil (list "-nodesktop -r")))
+ ; (shell-command "/home/jonathan/Matlab/bin/matlab -nodesktop -r
+ ; \"load /home/jonathan/Desktop/Research/Matlab/expt1_complete_goals.csv; kmeans_clusters_and_frequencies(expt1_complete_goals,3,1000)\"")
+
+(defvar ml4pg-my-buffer "")
+
+(defun ml4pg-my-config-display ()
+ (delete-other-windows)
+ (switch-to-buffer-other-window "*display*")
+ (erase-buffer)
+ (other-window -1))
+
+;; This function is in charge of processing the output produced by Matlab
+;; The variable signal is used to indicate the function which has called to matlab and to process the result
+
+(defvar ml4pg-signal 0)
+
+(defun ml4pg-my-output-filter (output)
+ (setq ml4pg-my-buffer (concat ml4pg-my-buffer output))
+ (when (and output (get-buffer "*display*"))
+ (with-current-buffer "*display*"
+ (progn (erase-buffer)
+ (cond ((equal ml4pg-signal 0) nil)
+ ((equal ml4pg-signal 1) (ml4pg-print-similarities (ml4pg-split-clusters-aux2 ml4pg-my-buffer nil)))
+ ((equal ml4pg-signal 4) (ml4pg-print-clusters-bis (ml4pg-split-clusters-aux ml4pg-my-buffer nil) (ml4pg-split-frequencies ml4pg-my-buffer nil)))
+ ((equal ml4pg-signal 3) (ml4pg-compute-clusters-and-values (ml4pg-split-clusters-aux (ml4pg-remove-jumps (subseq ml4pg-my-buffer (search "load" ml4pg-my-buffer :from-end t))) nil)
+ (ml4pg-split-frequencies (ml4pg-remove-jumps (subseq ml4pg-my-buffer (search "load" ml4pg-my-buffer :from-end t))) nil)))
+ (t nil)))))
+ output)
+
+(add-hook 'comint-preoutput-filter-functions 'ml4pg-my-output-filter)
+
+
+(defun ml4pg-split-clusters-aux2 (str res)
+ (let ((init (search "ans =" str)))
+ (if init
+ (list (ml4pg-cluster-string-to-list (ml4pg-remove-jumps (subseq str (+ 5 init) (search ">>" str :from-end t)))))
+ nil)))
+
+(defun ml4pg-split-clusters-aux (str res)
+ (let ((init (search "ans =" str)))
+ (if init
+ (let ((end (search "[" str :start2 (1+ init))))
+ (ml4pg-split-clusters-aux (subseq str (1+ end))
+ (cons (ml4pg-cluster-string-to-list (ml4pg-remove-jumps (subseq str (+ 5 init) end))) res)))
+ res)))
+
+
+(defun ml4pg-split-frequencies (str res)
+(let ((init (search "[" str)))
+ (if init
+ (let ((end (search "]" str :start2 (1+ init))))
+ (if (not (search "char" (subseq str init end)))
+ (ml4pg-split-frequencies (subseq str (1+ end))
+ (cons (string-to-number (ml4pg-remove-jumps (subseq str (1+ init) end))) res))
+ (ml4pg-split-frequencies (subseq str (1+ (search "[" str :start2 (1+ end)))) res)
+ ))
+ res)))
+
+
+
+
+(defun ml4pg-search-cluster (res n)
+ (do ((temp res (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (member (format "%s" n) (car temp))
+ (append temp2 (list (car temp))))))
+
+
+
+(defun ml4pg-cluster-string-to-list (cluster)
+ (do ((temp cluster)
+ (temp2 nil))
+ ((not (search "," temp)) (append temp2 (list temp)))
+ (progn (setf temp2 (append temp2 (list (subseq temp 0 (search "," temp)))))
+ (setf temp (subseq temp (1+ (search "," temp)))))))
+
+
+
+
+
+(defun ml4pg-remove-occurrence (list n)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (not (equal (format "%s" n) (car temp)))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+
+(defvar ml4pg-granularity-level-temp 1)
+
+(defun ml4pg-print-similarities (res)
+ (interactive)
+ (cond ((not (caar res)) (insert (format "Searching similarities...\n")))
+ ((search "None" (caar res))
+ (if (not ml4pg-iterative)
+ (insert (format "Sorry, but we have not found any similarity using granularity %s\n" ml4pg-granularity-level))
+ (if (eq ml4pg-granularity-level-temp 5)
+ (format "Sorry, but we have not found any similarity at any ganularity level\n")
+ (progn (setf ml4pg-granularity-level-temp (1+ ml4pg-granularity-level-temp))
+ (ml4pg-show-clusters-of-theorem-iterative)))))
+ (t (progn (insert (format "Similarities:\n"))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (insert (format "This lemma is similar to the lemmas: \n"))
+ (do ((temp2 (ml4pg-remove-occurrence (car res) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
+ ((endp temp2) )
+ (if (<= (string-to-number (car temp2)) (length ml4pg-saved-theorems))
+ (progn (insert (format "- "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
+ (insert (format "- "))
+ (ml4pg-insert-button-lemma temp-res)))))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (if ml4pg-iterative (insert (format "Similarities found using granularity level %s\n" ml4pg-granularity-level-temp)))
+ )))
+
+
+
+;
+(defun ml4pg-print-similarities-matlab ()
+ (with-current-buffer "*display*"
+ (while (string= "0" (car (ml4pg-read-lines (expand-file-name "available.txt"))))
+
+ (progn (erase-buffer)
+ (insert (format "Searching clusters...\n"))
+ (sleep-for 1))
+ )
+ (erase-buffer)
+ (let* ((clu (car (ml4pg-read-lines (expand-file-name "matlab_res.txt")))))
+ (cond
+ ((search "None" clu)
+ (if (not ml4pg-iterative)
+ (insert (format "Sorry, but we have not found any similarity using granularity %s\n" ml4pg-granularity-level))
+ (if (eq ml4pg-granularity-level-temp 5)
+ (format "Sorry, but we have not found any similarity at any ganularity level\n")
+ (progn (setf ml4pg-granularity-level-temp (1+ granularity-level-temp))
+ (ml4pg-show-clusters-of-theorem-iterative)))))
+ (t (progn (insert (format "Similarities:\n"))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (insert (format "This lemma is similar to the lemmas:\n "))
+ (do ((temp2 (ml4pg-remove-occurrence (ml4pg-cluster-string-to-list clu) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
+ ((endp temp2) )
+ (if (<= (string-to-number (car temp2)) (length ml4pg-saved-theorems))
+ (progn (insert (format "- "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
+ (insert (format "- "))
+ (ml4pg-insert-button-lemma temp-res)))))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (if ml4pg-iterative (insert (format "Similarities found using granularity level %s\n" ml4pg-granularity-level-temp)))
+ ))
+)))
+
+
+
+
+
+(defun ml4pg-print-similarities-weka (n)
+ (let ((clusters (ml4pg-extract-clusters-from-file n)))
+ (with-current-buffer "*display*"
+ (erase-buffer)
+ (insert (format "Similarities:\n"))
+ (insert (format "-----------------------------------------------------------------------------------\n"))
+ (insert (format "This lemma is similar to the lemmas:\n"))
+ (do ((temp2 (ml4pg-remove-occurrence (ml4pg-clusters-of-n clusters (nth (1- (length ml4pg-saved-theorems)) clusters)) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
+ ((endp temp2) )
+ (if (<= (car temp2) (length ml4pg-saved-theorems))
+ (progn (insert (format "- "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (car temp2) 1) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (car temp2) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
+ (insert (format "- "))
+ (ml4pg-insert-button-lemma temp-res)
+ )))
+ (insert (format "-----------------------------------------------------------------------------------\n") )
+ )
+ ))
+
+
+
+(defun ml4pg-insert-button-lemma (lemma)
+ (progn (insert-button lemma 'action (ml4pg-insert-button-lemma-macro lemma)
+ 'face (list 'link)
+ 'follow-link t)
+ (insert (format "\n"))))
+
+
+
+(defun ml4pg-insert-button-lemma-macro (test)
+ (list 'lambda '(x)
+ (list 'progn
+ (list 'proof-shell-invisible-cmd-get-result (list 'format '"Unset Printing All."))
+ (list 'if (list 'get-buffer '"*display2*") (list 'with-current-buffer '"*display2*" (list 'delete-window)))
+ (list 'with-current-buffer '"*display*" (list 'split-window-vertically))
+ (list 'switch-to-buffer-other-window '"*display2*")
+ (list 'with-current-buffer '"*display2*" (list 'erase-buffer))
+ (list 'with-current-buffer '"*display2*"
+ (list 'insert (list 'proof-shell-invisible-cmd-get-result
+ (list 'format '"Print %s." test))))
+ )))
+
+
+
+
+
+
+(defvar ml4pg-times 0)
+
+(defun ml4pg-print-clusters (res freq)
+ (interactive)
+ (setf ml4pg-times (1+ ml4pg-times))
+ (if (not (caar res))
+ (insert (format "Searching clusters...\n"))
+ (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
+ (res1 (car temp0))
+ (freq1 (cadr temp0)))
+ (insert (format "We have found the following clusters:\n" ))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (do ((temp res1 (cdr temp))
+ (temp-freq freq1 (cdr temp-freq))
+ (i 1 (1+ i)))
+ ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
+ (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
+ (do ((temp2 (car temp) (cdr temp2)))
+ ((endp temp2) (insert (format "\n")))
+ (progn (insert (format "Lemma "))
+ (ml4pg-insert-button-lemma
+ (ml4pg-remove_last_colon
+ (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))))))))
+
+
+(defun ml4pg-print-clusters-bis (res freq)
+ (interactive)
+ (setf ml4pg-times (1+ ml4pg-times))
+ (if (not (caar res))
+ (insert (format "Searching clusters...\n"))
+ (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
+ (res1 (car temp0))
+ (freq1 (cadr temp0)))
+ (insert (format "We have found the following clusters:\n" ))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (do ((temp res1 (cdr temp))
+ (temp-freq freq1 (cdr temp-freq))
+ (i 1 (1+ i)))
+ ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
+ (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
+ (do ((temp2 (car temp) (cdr temp2)))
+ ((endp temp2) (insert (format "\n")))
+ (if (< (string-to-number (car temp2)) (length ml4pg-saved-theorems))
+ (progn (insert (format "Lemma "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
+ (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (format "%s" (read (current-buffer)))))
+ (insert (format "Lemma " ))
+ (ml4pg-insert-button-lemma temp-res))
+ )))))))
+
+
+(defun ml4pg-extract_clusters_freq (list)
+ (do ((temp list (cdr temp))
+ (clusters nil)
+ (freq nil))
+ ((endp temp) (list clusters freq))
+ (if (not (string= (subseq (car temp) 0 1) "["))
+ (setf clusters (append clusters (list (car temp))))
+ (setf freq (append freq (list (string-to-number (subseq (car temp) 1 (search "]" (car temp))))))))))
+
+
+
+
+
+
+(defun ml4pg-print-clusters-matlab ()
+ (with-current-buffer "*display*"
+ (while (string= "0" (car (read-lines (expand-file-name "available.txt"))))
+
+ (progn (erase-buffer)
+ (insert (format "Searching clusters...\n"))
+ (sleep-for 1))
+ )
+ (erase-buffer)
+ (let* ((clu-freq (ml4pg-extract_clusters_freq (read-lines (expand-file-name "matlab_res.txt"))))
+ (clu (car clu-freq))
+ (freq (cadr clu-freq))
+ (temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip clu freq))))
+ (res1 (car temp0))
+ (freq1 (cadr temp0)))
+ (insert (format "We have found the following clusters:\n" ))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (do ((temp res1 (cdr temp))
+ (temp-freq freq1 (cdr temp-freq))
+ (i 1 (1+ i)))
+ ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
+ (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
+ (do ((temp2 (ml4pg-cluster-string-to-list (car temp)) (cdr temp2)))
+ ((endp temp2) (insert (format "\n")))
+ (if (< (string-to-number (car temp2)) (length ml4pg-saved-theorems))
+ (progn (insert (format "Lemma "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
+ (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (format "%s" (read (current-buffer)))))
+ (insert (format "Lemma " ))
+ (ml4pg-insert-button-lemma temp-res))
+ ))))
+ )))
+
+
+
+
+(defun ml4pg-print-clusters-weka (gra)
+ (let* ((clusters (ml4pg-extract-clusters-from-file gra))
+ (res1 (ml4pg-remove-alone (cdr (ml4pg-form-clusters clusters gra)))))
+ (with-current-buffer "*display*"
+ (erase-buffer)
+ (insert (format "We have found the following clusters:\n" ))
+ (insert (format "-------------------------------------------------------------------------------------\n"))
+
+ (do ((temp res1 (cdr temp))
+ (i 1 (1+ i)))
+ ((endp temp) (insert (format "-------------------------------------------------------------------------------------\n")) )
+ (progn (insert (format "Cluster %s\n" i ))
+ (do ((temp2 (car temp) (cdr temp2)))
+ ((endp temp2) (insert (format "\n")))
+ (if (< (car temp2) (length ml4pg-saved-theorems))
+ (progn (insert (format "Lemma "))
+ (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
+ (car (nth (car temp2) ml4pg-saved-theorems)))))
+ (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
+ (format "%s" (- (car temp2) (length ml4pg-saved-theorems)))
+ "p'"))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (read (current-buffer))
+ (setf temp-res (format "%s" (read (current-buffer)))))
+ (insert (format "Lemma " ))
+ (if (not (search "home" temp-res) )(ml4pg-insert-button-lemma temp-res)))
+ ))))
+
+
+
+
+ )))
+
+
+
+
+
+
+
+(defun ml4pg-remove_last_colon (str)
+ (if (string= (subseq str (1- (length str))) ":")
+ (subseq str 0 (1- (length str)))
+ str))
+
+
+;; This functions shows the cluster of a theorem
+
+
+(defun ml4pg-show-clusters-of-theorem-iterative ()
+ (interactive)
+ (let* ((alg (cond ((string= "g" ml4pg-algorithm) "find_cluster_with_gaussian") (t "find_cluster_with_kmeans")))
+ (gra (if (not ml4pg-iterative)
+ (cond ((eq 2 ml4pg-granularity-level) 5)
+ ((eq 3 ml4pg-granularity-level) 10)
+ ((eq 4 ml4pg-granularity-level) 15)
+ ((eq 5 ml4pg-granularity-level) 20)
+ (t 3))
+ (cond ((eq 2 ml4pg-granularity-level-temp) 5)
+ ((eq 3 ml4pg-granularity-level-temp) 10)
+ ((eq 4 ml4pg-granularity-level-temp) 15)
+ ((eq 5 ml4pg-granularity-level-temp) 20)
+ (t 3)))))
+ (progn (setf signal 1)
+ (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
+ (require 'comint)
+ (comint-send-string (get-buffer-process "*matlab*")
+ (concat "load " (expand-file-name "temp.csv")
+ (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra (1+ (length ml4pg-saved-theorems))
+ (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
+ (ml4pg-print-similarities-matlab)
+ )))
+
+(defun ml4pg-show-clusters-of-theorem ()
+ (interactive)
+ (let* ((alg (cond ((string= "g" ml4pg-algorithm) "find_cluster_with_gaussian") (t "find_cluster_with_kmeans")))
+ (gra (if (not ml4pg-iterative)
+ (cond ((eq 2 ml4pg-granularity-level) 8)
+ ((eq 3 ml4pg-granularity-level) 15)
+ ((eq 4 ml4pg-granularity-level) 25)
+ ((eq 5 ml4pg-granularity-level) 50)
+ (t 5))
+ (cond ((eq 2 ml4pg-granularity-level-temp) 8)
+ ((eq 3 ml4pg-granularity-level-temp) 15)
+ ((eq 4 ml4pg-granularity-level-temp) 25)
+ ((eq 5 ml4pg-granularity-level-temp) 50)
+ (t 5)))))
+ (progn
+ (setq ml4pg-my-buffer "")
+ (setf res (ml4pg-extract-info-up-to-here))
+ (with-temp-file (expand-file-name "temp.csv") (cond ((string= ml4pg-level "g") (insert (ml4pg-extract-features-1-bis res)))
+ ((string= ml4pg-level "t") (insert (ml4pg-extract-features-2-bis ml4pg-tactic-temp ml4pg-tactic-level)))
+ ((string= ml4pg-level "p") (insert (ml4pg-extract-features-2-bis ml4pg-proof-tree-temp ml4pg-proof-tree-level)))))
+ (if ml4pg-libs-menus
+ (progn (ml4pg-add-libraries-temp)
+ (ml4pg-add-names)))
+ (switch-to-buffer-other-window "*display*")
+ (cond ((string= ml4pg-ml-system "m")
+ (progn (setf ml4pg-signal 1)
+ (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
+ (require 'comint)
+ (comint-send-string (get-buffer-process "*matlab*")
+ (concat "load " (expand-file-name "temp.csv")
+ (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra (1+ (length ml4pg-saved-theorems))
+ (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
+ (ml4pg-print-similarities-matlab)
+ ))
+
+ ((string= ml4pg-ml-system "w")
+ (progn (setf ml4pg-signal 5)
+ (ml4pg-weka gra)
+ (sleep-for 1)
+ (ml4pg-print-similarities-weka gra))
+ )
+ )))
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All")))
+
+;; The following function shows all the clusters which have been obtained from all the theorems exported up to now
+
+(defun ml4pg-show-clusters ()
+ (interactive)
+ (let* ((alg (cond ((string= "g" ml4pg-algorithm) "gaussian_clusters") (t "kmeans_clusters_and_frequencies")))
+ (gra (cond ((eq 2 ml4pg-granularity-level) 5)
+ ((eq 3 ml4pg-granularity-level) 10)
+ ((eq 4 ml4pg-granularity-level) 15)
+ ((eq 5 ml4pg-granularity-level) 20)
+ (t 3)))
+ (freq (cond ((eq 2 ml4pg-frequency-precision) 500)
+ ((eq 3 ml4pg-frequency-precision) 1000)
+ (t 100))))
+
+ (progn
+ (setf ml4pg-signal 2)
+ (setf ml4pg-my-buffer "")
+ (progn (with-temp-file (expand-file-name "temp1.csv") (insert (ml4pg-extract-features-1)))
+ (switch-to-buffer-other-window "*display*")
+ (require 'comint)
+ (comint-send-string (get-buffer-process "*matlab*")
+ (concat "load " (expand-file-name "temp1.csv") (format "; %s(temp1,%s,%s)\n" alg gra freq))))
+ )))
+
+
+
+(defun ml4pg-show-clusters-bis ()
+ (interactive)
+ (let* ((alg (cond ((string= "g" ml4pg-algorithm) "gaussian_clusters") (t "kmeans_clusters_and_frequencies")))
+ (gra (cond ((eq 2 ml4pg-granularity-level) 5)
+ ((eq 3 ml4pg-granularity-level) 10)
+ ((eq 4 ml4pg-granularity-level) 15)
+ ((eq 5 ml4pg-granularity-level) 20)
+ (t 3)))
+ (freq (cond ((eq 2 ml4pg-frequency-precision) 500)
+ ((eq 3 ml4pg-frequency-precision) 1000)
+ (t 100))))
+
+ (progn
+ (setf ml4pg-signal 4)
+ (setf ml4pg-my-buffer "")
+ (if ml4pg-libs-menus
+ (progn (with-temp-file (expand-file-name "temp.csv") (cond ((string= ml4pg-level "g") (insert (ml4pg-extract-features-1)))
+ ((string= ml4pg-level "t") (insert (ml4pg-extract-features-2 ml4pg-tactic-level)))
+ ((string= ml4pg-level "p") (insert (ml4pg-extract-features-2 ml4pg-proof-tree-level)))))
+ (ml4pg-add-libraries-temp)
+ (ml4pg-add-names))
+ (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-1))))
+ (switch-to-buffer-other-window "*display*")
+ (cond ((string= ml4pg-ml-system "m")
+ (progn
+ (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
+ (require 'comint)
+ (comint-send-string (get-buffer-process "*matlab*")
+ (concat "load " (expand-file-name "temp.csv") (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra freq
+ (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
+ (ml4pg-print-clusters-matlab)))
+ ((string= ml4pg-ml-system "w")
+ (progn (setf ml4pg-signal 5)
+ (ml4pg-weka gra)
+ (sleep-for 1)
+ (ml4pg-print-clusters-weka gra))
+ )
+
+ )))
+ (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
+)
+
+
+
+
+(defun ml4pg-add-libraries ()
+ (do ((temp ml4pg-libs-menus (cdr temp)))
+ ((endp temp) nil)
+ (cond ((string= ml4pg-level "g") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) ".csv >> " (expand-file-name "temp1.csv"))))
+ ((string= ml4pg-level "t") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_tactics.csv >> " (expand-file-name "temp1.csv"))))
+ ((string= ml4pg-level "p") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_tree.csv >> " (expand-file-name "temp1.csv")))))))
+
+(defun ml4pg-add-libraries-temp ()
+ (do ((temp ml4pg-libs-menus (cdr temp)))
+ ((endp temp) nil)
+ (cond ((string= ml4pg-level "g") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) ".csv >> " (expand-file-name "temp.csv"))))
+ ((string= ml4pg-level "t") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_tactics.csv >> " (expand-file-name "temp.csv"))))
+ ((string= ml4pg-level "p") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_tree.csv >> " (expand-file-name "temp.csv")))))))
+
+(defun ml4pg-add-names ()
+ (shell-command (concat "rm " (expand-file-name "names_temp.txt")))
+ (shell-command (concat "touch " (expand-file-name "names_temp.txt")))
+ (do ((temp ml4pg-libs-menus (cdr temp)))
+ ((endp temp) nil)
+ (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_names >> " (expand-file-name "names_temp.txt")))))
+
+
+
+
+
+
+
+(defvar ml4pg-names-values nil)
+
+(defun ml4pg-print-clusters2 (res freq)
+ (interactive)
+ (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
+ (res1 (car temp0))
+ (freq1 (cadr temp0)))
+ (insert (format "We have found the following clusters:\n"))
+ (insert (format "------------------------------------------------------------------------------------------------------------\n"))
+ (do ((temp res1 (cdr temp))
+ (temp-freq freq1 (cdr temp-freq))
+ (i 1 (1+ i)))
+ ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")))
+ (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
+ (do ((temp2 (car temp) (cdr temp2)))
+ ((endp temp2) (insert (format "\n")))
+ (insert (format "Lemma %s\n"
+ (ml4pg-remove_last_colon
+ (car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems2))))))))))
+
+
+(defun ml4pg-compute-clusters-and-values (list fr)
+ (if (not (ml4pg-left-strings ml4pg-saved-theorems2))
+ (ml4pg-print-clusters2 list fr)
+ (progn (setf ml4pg-names-values (ml4pg-extract-names-dynamic))
+ (do ((temp list (cdr temp))
+ (n 200 (+ n 5)))
+ ((endp temp) (progn (setf ml4pg-names-values (ml4pg-complete-names-values ml4pg-names-values n))
+ (setf ml4pg-saved-theorems2 (ml4pg-recompute-saved-theorems ml4pg-saved-theorems2))
+ (setf ml4pg-my-buffer "")
+ (ml4pg-show-clusters-dynamic-b)
+ )
+nil
+)
+ (ml4pg-assign-values (car temp) n))
+ )))
+
+(defvar ml4pg-granularity-dynamic 0)
+
+(defun ml4pg-show-clusters-dynamic ()
+ (interactive)
+ (setf ml4pg-granularity-dynamic (read-string "Introduce the granularity level (values from 1 to 5): "))
+ (progn
+ (setf ml4pg-signal 3)
+ (setf ml4pg-my-buffer "")
+ (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-dynamic)))
+ (switch-to-buffer-other-window "*display*")
+ (require 'comint)
+ (cond ((string= "1" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,3,100)\n")))
+ ((string= "2" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,5,100)\n")))
+ ((string= "3" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,10,100)\n")))
+ ((string= "4" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,15,100)\n")))
+ ((string= "5" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,20,100)\n")))
+ (t (ml4pg-show-clusters-dynamic)))
+
+ ))
+
+(defun ml4pg-show-clusters-dynamic-b ()
+ (interactive)
+ (progn
+ (setf ml4pg-signal 3)
+ (setf ml4pg-my-buffer "")
+ (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-dynamic)))
+ (require 'comint)
+ (cond ((string= "1" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,3,100)\n")))
+ ((string= "2" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,5,100)\n")))
+ ((string= "3" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,10,100)\n")))
+ ((string= "4" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,15,100)\n")))
+ ((string= "5" ml4pg-granularity-dynamic)
+ (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,20,100)\n")))
+ (t (ml4pg-show-clusters-dynamic)))
+ ;(comint-send-string (get-buffer-process "*matlab*")
+; (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,"
+; (format "%s" (floor (length (extract-list-without-strings saved-theorems2)) 5) ) ",100)\n"))
+ )) \ No newline at end of file
diff --git a/contrib/ML4PG/ssreflect/menus.el b/contrib/ML4PG/ssreflect/menus.el
new file mode 100644
index 00000000..226c1212
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/menus.el
@@ -0,0 +1,308 @@
+;;; The menu interaction
+
+(easy-menu-define ml4pg-menu global-map "Statistics"
+ '("Statistics"
+ ("Configuration"
+ ("Algorithm"
+ ["K-means" (ml4pg-change-algorithm "k")
+ :selected (string= ml4pg-algorithm "k")
+ :style toggle
+ :help "Use k-means algorithm"]
+ ["Gaussian" (ml4pg-change-algorithm "g")
+ :selected (string= ml4pg-algorithm "g")
+ :style toggle
+ :active (string= ml4pg-ml-system "m")
+ :help "Use Gaussian algorithm"]
+ ["EM" (ml4pg-change-algorithm "e")
+ :selected (string= ml4pg-algorithm "e")
+ :style toggle
+ :active (string= ml4pg-ml-system "w")
+ :help "Use Simple EM algorithm"]
+ ["FarthestFirst" (ml4pg-change-algorithm "f")
+ :selected (string= ml4pg-algorithm "f")
+ :style toggle
+ :active (string= ml4pg-ml-system "w")
+ :help "Use FarhestFirst algorithm"])
+ ("Granularity"
+ ["1" (ml4pg-change-granularity 1)
+ :selected (eq ml4pg-granularity-level 1)
+ :style toggle
+ :help "We will use 3 clusters"]
+ ["2" (ml4pg-change-granularity 2)
+ :selected (eq ml4pg-granularity-level 2)
+ :style toggle
+ :help "We will use 5 clusters"]
+ ["3" (ml4pg-change-granularity 3)
+ :selected (eq ml4pg-granularity-level 3)
+ :style toggle
+ :help "We will use 10 clusters"]
+ ["4" (ml4pg-change-granularity 4)
+ :selected (eq ml4pg-granularity-level 4)
+ :style toggle
+ :help "We will use 15 clusters"]
+ ["5" (ml4pg-change-granularity 5)
+ :selected (eq ml4pg-granularity-level 5)
+ :style toggle
+ :help "We will use 20 clusters"])
+ ("Frequencies"
+ ["1" (ml4pg-change-frequency 1)
+ :selected (eq ml4pg-frequency-precision 1)
+ :style toggle
+ :help "The experiments will be run 100 times"]
+ ["2" (ml4pg-change-frequency 2)
+ :selected (eq ml4pg-frequency-precision 2)
+ :style toggle
+ :help "The experiments will be run 500 times"]
+ ["3" (ml4pg-change-frequency 3)
+ :selected (eq ml4pg-frequency-precision 3)
+ :style toggle
+ :help "The experiments will be run 1000 times"]))
+ ["Extract info up to point" (ml4pg-extract-feature-theorems)
+ :keys "C-c SPC"]
+ ["Show clusters" (ml4pg-show-clusters-bis)
+ :keys "C-c c"]
+ ["Show similar theorems" (ml4pg-show-clusters-of-theorem)
+ :keys "C-c m"]
+ ["Export library" (ml4pg-save-numbers)
+ :keys "C-c n"]
+ ["Show cluster libraries" (ml4pg-exported-libraries)]
+ ["Activate Icons" (ml4pg-activate-icons)]
+))
+
+(easy-menu-remove-item global-map '("menu-bar") "Statistics")
+
+(easy-menu-add-item nil nil ml4pg-menu "help-menu")
+
+(defun ml4pg-activate-icons ()
+ (interactive)
+ (progn
+ (easy-menu-remove-item nil '("Statistics") "Activate Icons")
+ (define-key coq-mode-map [tool-bar statistical-hint]
+ (list 'menu-item "Statistical Hint" 'ml4pg-show-clusters-of-theorem
+ :help "Statistical Hint"
+ :image (list 'image :type 'xpm
+ :file (concat ml4pg-home-dir "icons/sh-hint.xpm"))))
+ (define-key coq-mode-map [tool-bar clustering]
+ (list 'menu-item "Clustering" 'ml4pg-show-clusters-bis
+ :help "Clustering"
+ :image (list 'image :type 'xpm
+ :file (concat ml4pg-home-dir "icons/clustering.xpm"))))))
+
+
+(defvar ml4pg-ml-system "w")
+(defvar ml4pg-algorithm "k")
+(defvar ml4pg-granularity-level 3)
+(defvar ml4pg-frequency-precision 1)
+(defvar ml4pg-iterative nil)
+(defvar ml4pg-save-automatically nil)
+(defvar ml4pg-level "g")
+
+
+(defun ml4pg-change-level (n)
+ (setq ml4pg-level n))
+
+(defun ml4pg-change-algorithm (s)
+ (setq ml4pg-algorithm s))
+
+(defun ml4pg-change-ml-system (s)
+ (setq ml4pg-ml-system s)
+ (setq ml4pg-algorithm "k")
+ (cond ((string= s "w")
+ (setq ml4pg-iterative nil)
+ ))
+ )
+
+(defun ml4pg-change-granularity (n)
+ (setq ml4pg-granularity-level n))
+
+(defun ml4pg-change-frequency (n)
+ (setq ml4pg-frequency-precision n))
+
+(defun ml4pg-change-iterative-search ()
+ (setq ml4pg-iterative (not ml4pg-iterative)))
+
+(defun ml4pg-change-save ()
+ (setq ml4pg-save-automatically (not ml4pg-save-automatically)))
+
+
+;(easy-menu-add-item nil '("Statistics") statistics-menu "help-menu")
+
+(defun ml4pg-change-algorithm-interactive ()
+ (interactive)
+ (let ((alg (read-string
+ "What algorithm do you want to use (k-means -> k, Gaussian -> g): ")))
+ (setf ml4pg-algorithm (cond ((string= "g" alg) "g")
+ ((string= "k" alg) "k")
+ (t ml4pg-algorithm)))))
+
+(defun ml4pg-change-granularity-interactive ()
+ (interactive)
+ (let ((alg (read-string
+ "Introduce the granularity level (values from 1 to 5): ")))
+ (setf ml4pg-granularity-level (cond ((string= "1" alg) 1)
+ ((string= "2" alg) 2)
+ ((string= "3" alg) 3)
+ ((string= "4" alg) 4)
+ ((string= "5" alg) 5)
+ (t granularity-level)))))
+
+(defun ml4pg-change-frequency-interactive ()
+ (interactive)
+ (let ((alg (read-string
+ "Introduce the precision of the frequencies that you want to obtain (values from 1 to 3): ")))
+ (setf ml4pg-frequency-precision (cond ((string= "1" alg) 1)
+ ((string= "2" alg) 2)
+ ((string= "3" alg) 3)
+ (t ml4pg-frequency-precision)))))
+
+(defun change-iterative-interactive ()
+ (interactive)
+ (let ((alg (read-string
+ "Do you want to perform iterative search? (yes -> y, no -> n): ")))
+ (setf ml4pg-iterative (cond ((string= "y" alg) 1)
+ ((string= "n" alg) 2)
+ (t ml4pg-iterative)))))
+
+
+
+(defun ml4pg-exported-libraries ()
+ (interactive)
+ (easy-menu-remove-item nil '("Statistics") "Show cluster libraries")
+ (easy-menu-add-item nil '("Statistics")
+ (cons "Available libraries for clustering:"
+ (cons ["Current" nil
+ :selected t
+ :style toggle
+ :help "Use the current library for clustering"]
+ (ml4pg-select-libraries)))))
+
+
+(defun ml4pg-select-libraries ()
+ (ml4pg-available-libraries)
+ (ml4pg-available-dirs)
+ (append (ml4pg-select-libraries-aux ml4pg-libs nil) (ml4pg-libraries-dirs)))
+
+
+(defun ml4pg-select-libraries-aux (temp temp2)
+ (if (endp temp)
+ temp2
+ (ml4pg-select-libraries-aux (cdr temp) (append temp2 (list (ml4pg-menu-library (car temp)))))))
+
+
+
+
+(defvar ml4pg-libs nil)
+
+(defun ml4pg-available-libraries ()
+ (shell-command (concat "ls " ml4pg-home-dir "libs/ssreflect | grep .csv | wc -l"))
+ (let ((n nil)
+ (i 0))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (setq n (string-to-number (format "%s" (read (current-buffer))))))
+ (shell-command (concat "ls " ml4pg-home-dir "libs/ssreflect | grep .csv"))
+ (with-current-buffer "*Shell Command Output*"
+ (progn (beginning-of-buffer)
+ (while (< i n)
+ (let ((r (format "%s" (read (current-buffer)))))
+ (progn (setq i (1+ i))
+ (setq ml4pg-libs (append ml4pg-libs (list (subseq r 0 (search "." r))))))))))))
+
+
+
+(defvar ml4pg-dirs nil)
+
+(defun ml4pg-available-dirs ()
+ (shell-command (concat "ls -d " ml4pg-home-dir "libs/ssreflect/*/ | wc -l"))
+ (let ((n nil)
+ (i 0))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (setq n (string-to-number (format "%s" (read (current-buffer))))))
+ (shell-command (concat "ls -d " ml4pg-home-dir "libs/ssreflect/*/"))
+ (with-current-buffer "*Shell Command Output*"
+ (progn (beginning-of-buffer)
+ (while (< i n)
+ (let ((r (format "%s" (read (current-buffer)))))
+ (progn (setq i (1+ i))
+ (setq ml4pg-dirs (append ml4pg-dirs (list (subseq r (length (concat ml4pg-home-dir "libs/ssreflect/")) (1- (length r)))))))))))
+ ))
+
+
+
+
+(defun ml4pg-libraries-dirs ()
+ (do ((temp ml4pg-dirs (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (setf temp2 (append temp2 (list (append (list (car temp)) (ml4pg-libraries-dir (car temp))))))))
+
+
+
+(defun ml4pg-libraries-dir (dir)
+ (shell-command (concat "ls " ml4pg-home-dir "libs/ssreflect/" dir "/ | grep _names | wc -l"))
+ (let ((n nil)
+ (i 0)
+ (temp nil))
+ (with-current-buffer "*Shell Command Output*"
+ (beginning-of-buffer)
+ (setq n (string-to-number (format "%s" (read (current-buffer))))))
+ (shell-command (concat "ls " ml4pg-home-dir "libs/ssreflect/" dir "/ | grep _names"))
+ (with-current-buffer "*Shell Command Output*"
+ (progn (beginning-of-buffer)
+ (while (< i n)
+ (let* ((r1 (format "%s" (read (current-buffer))))
+ (r (subseq r1 0 (search "_names" r1))))
+ (progn (setq i (1+ i))
+ (setq temp (append temp (list (ml4pg-menu-library-dir (subseq r 0 (search "." r)) dir)))))))
+))
+ temp))
+
+
+
+(defun ml4pg-menu-library-dir (item dir)
+ (vector item (list 'ml4pg-change-library (concat dir "/" item))
+ :selected (list 'ml4pg-string-member (concat dir "/" item) 'ml4pg-libs-menus)
+ :style 'toggle
+ :help (format "Use the %s library for clustering" item)))
+
+(defun ml4pg-menu-library (item)
+ (vector item (list 'change-library item)
+ :selected (list 'ml4pg-string-member item 'ml4pg-libs-menus)
+ :style 'toggle
+ :help (format "Use the %s library for clustering" item)))
+
+
+
+(defvar ml4pg-libs-menus nil)
+
+(defun ml4pg-string-member (string list)
+ (do ((temp list (cdr temp))
+ (is nil))
+ ((or (endp temp) is) is)
+ (if (string= string (car temp))
+ (setf is t))))
+
+
+(defun ml4pg-change-library (string)
+ (if (ml4pg-string-member string ml4pg-libs-menus)
+ (ml4pg-remove-from-menus string)
+ (setq ml4pg-libs-menus (append ml4pg-libs-menus (list string)))))
+
+
+(defun ml4pg-remove-from-menus (string)
+ (do ((temp ml4pg-libs-menus (cdr temp))
+ (temp2 nil))
+ ((endp temp) (setf ml4pg-libs-menus temp2))
+ (if (not (string= string (car temp)))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+
+
+
+
+
+
+
+
+
diff --git a/contrib/ML4PG/ssreflect/save_lemmas.el b/contrib/ML4PG/ssreflect/save_lemmas.el
new file mode 100644
index 00000000..531532fb
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/save_lemmas.el
@@ -0,0 +1,121 @@
+(defun ml4pg-proof-assert-next-command-interactive3 ()
+ (interactive)
+ (if (get-buffer "*response*")
+ (if (eq ml4pg-save-automatically 0)
+ (proof-assert-next-command-interactive)
+ (progn (with-current-buffer "*response*"
+ (beginning-of-buffer)
+ (if (zerop (buffer-size))
+ (setf temp nil)
+ (setf temp (search "No"
+ (format "%s" (read (current-buffer)))))))
+ (if temp
+ (ml4pg-export-previous-lemm)
+ (proof-assert-next-command-interactive)
+ ))
+
+ )
+ (proof-assert-next-command-interactive)))
+
+
+(defun ml4pg-export-previous-lemm ()
+ (interactive)
+ (let ((final (point))
+ (result nil)
+ (end nil))
+ (search-backward "Proof.")
+ (proof-goto-point)
+ (while (< (point) final)
+ (let* ((semis (save-excursion
+ (skip-chars-backward " \t\n"
+ (proof-queue-or-locked-end))
+ (proof-segment-up-to-using-cache (point))))
+ (comment (caar semis))
+ (cmd (cadar semis))
+ (ts nil))
+ (progn (setf ts (ml4pg-get-top-symbol))
+ (setf ng (ml4pg-get-number-of-goals))
+ (proof-assert-next-command-interactive)
+ (setf ng2 (ml4pg-get-number-of-goals))
+ (if cmd
+ (setf result (cons (append (ml4pg-get-numbers cmd) (list ts) (list ng2)) result))
+ )
+ )
+
+ )
+ )
+ (proof-assert-next-command-interactive)
+ (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
+ (list (list (format "%s" (ml4pg-get-name))
+ (flat (reverse result))))))
+ (search-forward "Qed.")
+
+ ))
+
+
+(defun ml4pg-get-name ()
+ (search-backward "Lemma")
+ (read (current-buffer))
+ (read (current-buffer)))
+
+
+(defun ml4pg-list-to-string (list)
+ (do ((temp list (cdr temp))
+ (temp2 ""))
+ ((endp temp) temp2)
+ (setf temp2 (concat temp2 (car temp) ", "))))
+
+
+
+
+
+
+
+(defun ml4pg-save-numbers ()
+ (interactive)
+ (progn (beginning-of-buffer)
+ (proof-goto-point)
+ (end-of-buffer)
+ (ml4pg-extract-feature-theorems)
+ (let ((d (read-string (concat "Where do you want to store this library (" (ml4pg-list-to-string ml4pg-dirs) "n (create new directory)): ")))
+ (d2 nil))
+ (cond ((ml4pg-string-member d ml4pg-dirs)
+ (progn (with-temp-file
+ (concat ml4pg-home-dir "libs/ssreflect/" d "/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ ".csv") (insert (ml4pg-extract-features-1)))
+
+
+ (with-temp-file (concat ml4pg-home-dir "libs/ssreflect/" d "/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ "_names") (insert (ml4pg-extract-names)))))
+ ((string= d "n")
+ (progn
+ (setf d2 (read-string (concat "Introduce a name for the directory: ")))
+ (shell-command (concat "mkdir " ml4pg-home-dir "libs/ssreflect/" d2))
+ (with-temp-file
+ (concat ml4pg-home-dir "libs/ssreflect/" d2 "/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ ".csv") (insert (ml4pg-extract-features-1)))
+
+
+ (with-temp-file (concat ml4pg-home-dir "libs/ssreflect/" d2 "/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ "_names") (insert (ml4pg-extract-names)))))
+ (t
+ (progn (with-temp-file
+ (concat ml4pg-home-dir "libs/ssreflect/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ ".csv") (insert (ml4pg-extract-features-1)))
+
+
+ (with-temp-file (concat ml4pg-home-dir "libs/ssreflect/"
+ (subseq (buffer-name (current-buffer)) 0
+ (search "." (buffer-name (current-buffer))))
+ "_names") (insert (ml4pg-extract-names))))))
+ ))) \ No newline at end of file
diff --git a/contrib/ML4PG/ssreflect/shortcuts.el b/contrib/ML4PG/ssreflect/shortcuts.el
new file mode 100644
index 00000000..d67a7f50
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/shortcuts.el
@@ -0,0 +1,14 @@
+(global-set-key (kbd "C-c C-d") 'ml4pg-export-theorem)
+(global-set-key (kbd "C-c C-e") 'ml4pg-save-file-conventions1)
+(global-set-key (kbd "C-c m") 'ml4pg-show-clusters-of-theorem)
+(global-set-key (kbd "C-c C-SPC") 'ml4pg-extract-feature-theorems)
+(global-set-key (kbd "C-c c") 'ml4pg-show-clusters)
+(global-set-key (kbd "C-c e") 'ml4pg-extract-feature-theorems-dynamic)
+(global-set-key (kbd "C-c d") 'ml4pg-show-clusters-dynamic)
+(global-set-key (kbd "C-c a") 'ml4pg-change-algorithm-interactive)
+(global-set-key (kbd "C-c g") 'ml4pg-change-granularity-interactive)
+(global-set-key (kbd "C-c f") 'ml4pg-change-frequency-interactive)
+(global-set-key (kbd "C-c i") 'ml4pg-change-iterative-interactive)
+(global-set-key (kbd "C-c C-m") 'ml4pg-proof-assert-next-command-interactive3)
+(global-set-key (kbd "C-c n") 'ml4pg-save-numbers)
+
diff --git a/contrib/ML4PG/ssreflect/storage.el b/contrib/ML4PG/ssreflect/storage.el
new file mode 100644
index 00000000..fde72694
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/storage.el
@@ -0,0 +1,51 @@
+(defun ml4pg-save-lemma-aux (string)
+ (append-to-file string nil (concat ml4pg-home-dir "lemmas.txt"))
+)
+
+(defun ml4pg-save-lemma (name value)
+ (ml4pg-save-lemma-aux (format "%s&%s$" name value)))
+
+
+(defun ml4pg-save-view-aux (string)
+ (append-to-file string nil (concat ml4pg-home-dir "views.txt"))
+)
+
+(defun ml4pg-save-view (name value)
+ (ml4pg-save-view-aux (format "%s&%s$" name value)))
+
+
+(defun ml4pg-read-lemmas ()
+ (if (file-exists-p (concat ml4pg-home-dir "ssreflect/lemmas.txt"))
+ (with-temp-buffer
+ (insert-file-contents (concat ml4pg-home-dir "ssreflect/lemmas.txt"))
+ (let ((temp (format "%s" (read (current-buffer)))))
+ (setf ml4pg-theorems_id (ml4pg-extract-info-from-files temp))
+ ))))
+
+(defun ml4pg-read-views ()
+ (if (file-exists-p (concat ml4pg-home-dir "ssreflect/views.txt"))
+ (with-temp-buffer
+ (insert-file-contents (concat ml4pg-home-dir "ssreflect/views.txt"))
+ (let ((temp (format "%s" (read (current-buffer)))))
+ (setf ml4pg-views_id (ml4pg-extract-info-from-files temp))
+ ))))
+
+(defun ml4pg-extract-info-from-files (string)
+ (do ((temp string)
+ (temp2 nil))
+ ((not (search "$" temp)) temp2)
+ (let ((dollar (search "$" temp))
+ (amper (search "&" temp)))
+ (progn
+ (setf temp2 (append temp2 (list (cons (subseq temp 0 amper)
+ (string-to-number (subseq temp (1+ amper) dollar))))))
+ (setf temp (subseq temp (1+ dollar)))))))
+
+
+
+
+
+
+
+
+
diff --git a/contrib/ML4PG/ssreflect/views.txt b/contrib/ML4PG/ssreflect/views.txt
new file mode 100644
index 00000000..1f40a052
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/views.txt
@@ -0,0 +1 @@
+all_filterP&102$leq_trans->&103$subnKC&104$addIn&105$rot&106$rotr&107$/eqP&108$eqP&109$hasP&110$negP&111$predU1P&112$eq_in_filter&113$allP&114$all_pred1P&115$index&116$nth_find&117$andP&118$i&119$idPn&120$perm_eqP&121$idP&122$perm_eq_trans&123$perm_eqlP&124$perm_eq_size:&125$eqP->&126$uniq_leq_size&127$/idP&128$ss12&129$rot_to:&130$PcatCA&131$PcatCA/IHs/PcatCA&132$catCA_perm_ind&133$has_mask&134$all_nthP&135$subseqP&136$@all_pred1P&137$perm_to_rem/perm_eq_size->&138$esym&139$rem_filter&140$perm_eq_size&141$mapP&142$/mapP&143$@eq_from_nth&144$eq_in_map->&145$filter_uniq&146$map_inj_uniq->&147$It&148$allpairsP&149$orP&150$hasPn&151$eq_bigl&102$eq_bigr->&103$index_iota&104$nilP->&105$eq_bigl->&106$reducebig&107$big_hasC->&108$index_enum&109$big_nat_widen&110$g&111$G&112$eq_bigr&113$_&114$perm_to_rem/(eq_big_perm _)->&115$eq_big_perm&116$big_rem->&117$rem_filter->&118$IHn&119$familyP&120$ffunP&121$eqP/Df&122$IHr&123$familyP/(_ i)&124$existsP&125$forallP&126$bigmax_leqP&127$eq_card0->&128$perm_to_rem/(eq_big_perm _)->&102$eq_big_perm&103$big_rem->&104$rem_filter->&105$IHn&106$familyP&107$ffunP&108$eqP/Df&109$IHr&110$familyP/(_ i)&111$existsP&112$forallP&113$bigmax_leqP&114$eq_card0->&115$matrixP&102$rowP&103$rowP/(_ j):&104$colP&105$canLR&106$conform_mx&107$ord_inj->&108$addnI/val_inj->&109$bump&110$block_mx&111$ulsubmx&112$ursubmx&113$dlsubmx&114$drsubmx&115$nz_row&116$row_matrixP&117$eqP:&118$negbTE&119$is_scalar_mx&120$is_scalar_mxP&121$negbTE->&122$xcol&123$is_perm_mxP&124$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$perm_to_rem/(eq_big_perm _)->&102$eq_big_perm&103$big_rem->&104$rem_filter->&105$IHn&106$familyP&107$ffunP&108$eqP/Df&109$IHr&110$familyP/(_ i)&111$existsP&112$forallP&113$bigmax_leqP&114$eq_card0->&115$lastP:&116$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$b&102$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$rowP&102$1&103$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$matrixP&102$ord_inj&103$bump&104$rowP&105$colP&106$block_mx&107$rowV0P&108$mulIf&109$1&110$ker&111$tool&112$row_freeP&113$kernel&114$eq_row_mx&115$eqP:&116$ker_base&117$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$fact&102$exponential&103$fact&102$exponential&103$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$exponential&102$multiplication&103$fact&104$b&102$a&103$pot_matrix&104$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_expt&102$fn_expt&103$theta_fact&102$fn_fact&103$fn_less&102$theta_power&102$fn_power&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$fn_fib&102$fib_locals&103$helper_fib&104$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$pot_matrix&102$eqP&103$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$val_inj&102$ffunP&103$matrixP&104$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$theta_expt&102$fn_expt&103$theta_fact&102$fn_fact&103$fn_fib&102$fib_locals&103$helper_fib&104$fn_less&102$theta_mul&102$fn_mul&103$theta_power&102$fn_power&103$theta_sum&102$theta_sum&102$theta_sum&102$b&102$a&103$pot_matrix&104$theta_sum&102$theta_sum&102$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$theta_sum&102$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$primeP&102$vFpV&103$dvdn&104$/eqxx&105$ffact_fact&106$eqP:&107$f&108$F&109$injectiveP&110$setP&111$imsetP&112$ffunP&113$ff0'&114$inj_f0&115$subsetP&116$add_mn_nat&117$sub_mn&118$add_mn&119$vs2mx&102$free&103$dimv&104$v2r_inj->&105$vlineP&106$subsetv&107$sU12&108$subvP&109$sVW&110$vs2mxP&111$subv_anti&112$vlinePk&113$subV&114$addv_idPl&115$addv_idPr&116$sub0v&117$subvf&118$sub_addsmxP&119$subv_trans->&120$rpred_sum&121$sumv_sup&122$Uv&123$sub_sumsmxP&124$subV(sameP capmx_idPl eqmxP)&125$capv_idPl&126$capv_idPr&127$eqmxP/matrix_modl&128$val_inj&129$eqmxP/addsmx_diff_cap_eq&130$eq_op&131$dimv_leqif_eq&132$geq_leqif&133$directv_def&134$andP]&135$dxU/(_ i Pi)&136$forall_inP&137$eqP/dxU&138$seq_tnthP&139$span_subvP&140$memv_span&141$subv_sumP&142$leqif_eq&143$dim_span&144$rowP/(_ i):&145$row_free_inj&146$r2v_inj&147$rowV0P&148$rowP&149$row_freeP&150$negPf&151$and3P&152$coord_span&153$sumX&154$k&155$f&156$span_basis&157$basis_of&158$basis_free/free_not0&159$eq_span&160$row_matrixP&161$directvP->&162$/]&163$directvP&164$lfunP&165$submxP&166$memv_imgP&167$lker0P&168$lker0_lfunK&169$eq_map&170$lfun_preim&171$memv_capP&172$canRL&173$rowP/(_ (Ordinal vT_proper))/eqP&174$daddv_pi_id&175$vspaceP&176$sumv_pi_for&177$addv_pi1_pi2&178$iota_uniq&179$val_inj/vsprojK/subvsP&180$p2r&181$r2p&182$fr&183$matrixP&184$ffunP&185$canLR&186$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$rowP&102$1&103$drlower1&104$invmx_uniq&105$b&102$a&103$pot_matrix&104$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$index_iota&102$andP&103$index_iota&102$andP&103$b&102$a&103$pot_matrix&104$ \ No newline at end of file
diff --git a/contrib/ML4PG/ssreflect/weka.el b/contrib/ML4PG/ssreflect/weka.el
new file mode 100644
index 00000000..ba220c1d
--- /dev/null
+++ b/contrib/ML4PG/ssreflect/weka.el
@@ -0,0 +1,112 @@
+(defun ml4pg-weka (n)
+ (let ((alg (cond ((string= "k" ml4pg-algorithm) "SimpleKMeans")
+ ((string= "e" ml4pg-algorithm) "EM")
+ ((string= "f" ml4pg-algorithm) "FarthestFirst")
+ )))
+ ;(comint-send-string (get-buffer-process "*matlab*")
+; (concat "load " (expand-file-name "temp.csv") "; [t1,X,t3] = princomp(temp); X=normalize(X); csvwrite('"
+; (expand-file-name "temp2.csv") "',X);
+;"))
+
+ (shell-command (concat "sleep 1; cat " ml4pg-home-dir "aux_files/headers.txt " (expand-file-name "temp.csv") " > " (expand-file-name "temp3.arff")))
+ (shell-command (concat "java -classpath "
+ *weka-dir*
+ " weka.filters.unsupervised.attribute.AddCluster -W \"weka.clusterers." alg " -N " (format "%s" n) " -S 42\" -I last -i "
+ (expand-file-name "temp3.arff") " -o " (expand-file-name "out.arff")))
+ (shell-command (concat "tail -n +37 "
+ (expand-file-name "out.arff") " > " (expand-file-name "out_bis.arff")))
+ ;(shell-command (concat "java -classpath "
+; *weka-dir*
+; " weka.attributeSelection.CfsSubsetEval -M -s \"weka.attributeSelection.BestFirst -D 1 -N 5\" -i "
+; (expand-file-name "temp3.arff") " > " (expand-file-name "res.txt")))
+ ))
+
+
+(defun ml4pg-why-are-similar ()
+ (with-temp-buffer
+ (insert-file-contents (expand-file-name "res.txt"))
+ (setf foo nil)
+ (while (not foo)
+ (setf foo (string= "attributes:" (format "%s" (read (current-buffer))))))
+ (ml4pg-extract-selected-attributes (format "%s" (read (current-buffer))) nil))
+ )
+
+
+(defun ml4pg-extract-selected-attributes (temp res)
+ (let ((comma (search "," temp)))
+ (if comma
+ (ml4pg-extract-selected-attributes (subseq temp (+ 1 comma))
+ (append res (list (car (read-from-string (subseq temp 0 comma))))))
+ (append res (list (car (read-from-string temp)))))))
+
+
+
+
+
+
+
+
+
+
+
+(defun ml4pg-0_n (n)
+ (do ((i 0 (1+ i))
+ (temp nil))
+ ((= i n) temp)
+ (setf temp (append temp (list (list i nil))))))
+
+
+(defun ml4pg-read-lines (file)
+ "Return a list of lines in FILE."
+ (with-temp-buffer
+ (insert-file-contents file)
+ (split-string
+ (buffer-string) "\n" t)
+ ))
+
+
+(defun ml4pg-lines-to-clusters (lines)
+ (do ((temp lines (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (setf temp2 (append temp2 (list (string-to-number (subseq (car temp) (+ 7 (search "cluster" (car temp) :from-end t)))))))
+ ))
+
+
+
+(defun ml4pg-extract-clusters-from-file (clusters)
+ (let* ((temp (ml4pg-0_n clusters))
+ (lines (ml4pg-read-lines (expand-file-name "out_bis.arff"))))
+ (ml4pg-lines-to-clusters lines)))
+
+
+
+
+
+(defun ml4pg-form-clusters (list n)
+ (do ((i 0 (1+ i))
+ (temp nil))
+ ((= i n) temp)
+ (setf temp (append temp (list (ml4pg-clusters-of-n list i))))))
+
+
+
+
+(defun ml4pg-clusters-of-n (list n)
+ (do ((temp list (cdr temp))
+ (i 1 (1+ i))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (equal (car temp) n)
+ (setf temp2 (append temp2 (list i))))))
+
+
+(defun ml4pg-remove-alone (list)
+ (do ((temp list (cdr temp))
+ (temp2 nil))
+ ((endp temp) temp2)
+ (if (not (= (length (car temp)) 1))
+ (setf temp2 (append temp2 (list (car temp)))))))
+
+
+
diff --git a/contrib/ML4PG/temp.csv b/contrib/ML4PG/temp.csv
new file mode 100644
index 00000000..90fe381e
--- /dev/null
+++ b/contrib/ML4PG/temp.csv
@@ -0,0 +1,72 @@
+1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1
+5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
+34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1
+5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1
+111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.14999999999999,6,1,6,1,-4,100.14999999999999,6,1
+1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0
+11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0
+1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,6,1,-4,100.19687499999999,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.199609375,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951171875,6,1,6,1,-4,100.199951171875,6,1
+1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19998779296874,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.19921875,6,1
+1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0
+111,3,-354,-1,557,1,6,1,-4,100.19999389648437,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/temp3.arff b/contrib/ML4PG/temp3.arff
new file mode 100644
index 00000000..d354c0ab
--- /dev/null
+++ b/contrib/ML4PG/temp3.arff
@@ -0,0 +1,107 @@
+@relation empty
+
+@attribute '1' real
+@attribute '2' real
+@attribute '3' real
+@attribute '4' real
+@attribute '5' real
+@attribute '6' real
+@attribute '7' real
+@attribute '8' real
+@attribute '9' real
+@attribute '10' real
+@attribute '11' real
+@attribute '12' real
+@attribute '13' real
+@attribute '14' real
+@attribute '15' real
+@attribute '16' real
+@attribute '17' real
+@attribute '18' real
+@attribute '19' real
+@attribute '20' real
+@attribute '21' real
+@attribute '22' real
+@attribute '23' real
+@attribute '24' real
+@attribute '25' real
+@attribute '26' real
+@attribute '27' real
+@attribute '28' real
+@attribute '29' real
+@attribute '30' real
+
+@data
+
+1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1
+5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
+34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1
+5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1
+111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.14999999999999,6,1,6,1,-4,100.14999999999999,6,1
+1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0
+11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0
+1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0
+1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,6,1,-4,100.19687499999999,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0
+1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-5,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.199609375,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951171875,6,1,6,1,-4,100.199951171875,6,1
+1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-25,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-52,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+11,2,-22,-1,55,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
+1,1,-2,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19998779296874,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.19921875,6,1
+1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0
+111,3,-354,-1,557,1,6,1,-4,100.19999389648437,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/views.txt b/contrib/ML4PG/views.txt
new file mode 100644
index 00000000..016fdc79
--- /dev/null
+++ b/contrib/ML4PG/views.txt
@@ -0,0 +1 @@
+theta_fact&102$fn_fact&103$theta_fact&102$fn_fact&103$theta_fact&102$fn_fact&103$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$leqif&131$eqP:&132$leqif_refl&133$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$fn_fact&102$b&106$a&107$pot_matrix&108$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$theta_fact&102$fn_fact&103$fn_fact&102$theta_fact&103$fn_fact&104$theta_fact&102$fn_fact&103$fn_fact&102$theta_fact&102$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$theta_fact&102$fn_fact&103$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$b&102$a&103$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$ \ No newline at end of file
diff --git a/contrib/ML4PG/weka.jar b/contrib/ML4PG/weka.jar
new file mode 100644
index 00000000..24e8bc68
--- /dev/null
+++ b/contrib/ML4PG/weka.jar
Binary files differ