[mlpack] 196/324: Add test for the nystroem method.

Barak A. Pearlmutter barak+git at cs.nuim.ie
Sun Aug 17 08:22:10 UTC 2014


This is an automated email from the git hooks/post-receive script.

bap pushed a commit to branch svn-trunk
in repository mlpack.

commit 81ad58f32313bf640012545574614b6f82c5855e
Author: marcus <marcus at 9d5b8971-822b-0410-80eb-d18c1038ef23>
Date:   Fri Jul 18 22:02:38 2014 +0000

    Add test for the nystroem method.
    
    git-svn-id: http://svn.cc.gatech.edu/fastlab/mlpack/trunk@16838 9d5b8971-822b-0410-80eb-d18c1038ef23
---
 src/mlpack/tests/data/german.csv          | 1000 +++++++++++++++++++++++++++++
 src/mlpack/tests/nystroem_method_test.cpp |  182 ++++++
 2 files changed, 1182 insertions(+)

diff --git a/src/mlpack/tests/data/german.csv b/src/mlpack/tests/data/german.csv
new file mode 100644
index 0000000..4753ec7
--- /dev/null
+++ b/src/mlpack/tests/data/german.csv
@@ -0,0 +1,1000 @@
+1,6,4,12,5,5,3,4,1,67,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,48,2,60,1,3,2,2,1,22,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,4,21,1,4,3,3,1,49,3,1,2,1,1,0,0,1,0,0,1,0,1,0
+1,42,2,79,1,4,3,4,2,45,3,1,2,1,1,0,0,0,0,0,0,0,0,1
+1,24,3,49,1,3,3,4,4,53,3,2,2,1,1,1,0,1,0,0,0,0,0,1
+4,36,2,91,5,3,3,4,4,35,3,1,2,2,1,0,0,1,0,0,0,0,1,0
+4,24,2,28,3,5,3,4,2,53,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,36,2,69,1,3,3,2,3,35,3,1,1,2,1,0,1,1,0,1,0,0,0,0
+4,12,2,31,4,4,1,4,1,61,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,30,4,52,1,1,4,2,3,28,3,2,1,1,1,1,0,1,0,0,1,0,0,0
+2,12,2,13,1,2,2,1,3,25,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+1,48,2,43,1,2,2,4,2,24,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+2,12,2,16,1,3,2,1,3,22,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,24,4,12,1,5,3,4,3,60,3,2,1,1,1,1,0,1,0,0,1,0,1,0
+1,15,2,14,1,3,2,4,3,28,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+1,24,2,13,2,3,2,2,3,32,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,24,4,24,5,5,3,4,2,53,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+1,30,0,81,5,2,3,3,3,25,1,3,1,1,1,0,0,1,0,0,1,0,0,1
+2,24,2,126,1,5,2,2,4,44,3,1,1,2,1,0,1,1,0,0,0,0,0,0
+4,24,2,34,3,5,3,2,3,31,3,1,2,2,1,0,0,1,0,0,1,0,0,1
+4,9,4,21,1,3,3,4,3,48,3,3,1,2,1,1,0,1,0,0,1,0,0,1
+1,6,2,26,3,3,3,3,1,44,3,1,2,1,1,0,0,1,0,1,0,0,0,1
+1,10,4,22,1,2,3,3,1,48,3,2,2,1,2,1,0,1,0,1,0,0,1,0
+2,12,4,18,2,2,3,4,2,44,3,1,1,1,1,0,1,1,0,0,1,0,0,1
+4,10,4,21,5,3,4,1,3,26,3,2,1,1,2,0,0,1,0,0,1,0,0,1
+1,6,2,14,1,3,3,2,1,36,1,1,1,2,1,0,0,1,0,0,1,0,1,0
+4,6,0,4,1,5,4,4,3,39,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+3,12,1,4,4,3,2,3,1,42,3,2,1,1,1,0,0,1,0,1,0,0,0,1
+2,7,2,24,1,3,3,2,1,34,3,1,1,1,1,0,0,0,0,0,1,0,0,1
+1,60,3,68,1,5,3,4,4,63,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,18,2,19,4,2,4,3,1,36,1,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,24,2,40,1,3,3,2,3,27,2,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,18,2,59,2,3,3,2,3,30,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+4,12,4,13,5,5,3,4,4,57,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+3,12,2,15,1,2,2,1,2,33,1,1,1,2,1,0,0,1,0,0,1,0,0,0
+2,45,4,47,1,2,3,2,2,25,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+4,48,4,61,1,3,3,3,4,31,1,1,1,2,1,0,0,1,0,0,0,0,0,1
+3,18,2,21,1,3,3,2,1,37,2,1,1,1,1,0,0,0,1,0,1,0,0,1
+3,10,2,12,1,3,3,2,3,37,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,9,2,5,1,3,3,3,1,24,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,30,2,23,3,5,3,2,3,30,1,1,1,1,1,0,0,1,0,0,1,0,0,0
+2,12,2,12,3,3,1,1,3,26,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,18,3,62,1,3,3,4,1,44,3,1,2,2,1,0,0,1,0,0,1,0,1,0
+1,30,4,62,2,4,4,4,3,24,3,2,1,1,1,0,1,1,0,1,0,0,0,1
+1,48,4,61,1,5,2,4,4,58,2,2,1,1,1,0,1,1,0,0,0,0,1,0
+4,11,4,14,1,2,2,4,3,35,3,2,1,1,1,1,0,1,0,0,1,0,0,0
+4,36,2,23,3,5,3,4,3,39,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,6,2,14,3,1,2,2,2,23,3,1,1,2,1,0,1,1,0,1,0,1,0,0
+4,11,4,72,1,3,3,4,2,39,3,2,1,1,1,1,0,1,0,0,1,0,1,0
+4,12,2,21,2,3,2,2,1,28,3,1,1,1,1,0,0,0,1,0,1,0,0,1
+2,24,3,23,5,2,3,2,2,29,1,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,27,3,60,1,5,3,2,3,30,3,2,1,2,1,0,1,1,0,0,1,0,0,0
+4,12,2,13,1,3,3,2,3,25,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,2,34,5,3,3,1,2,31,3,1,1,2,1,0,1,1,0,0,1,0,0,1
+2,36,3,22,1,5,3,4,4,57,1,2,1,2,1,1,0,1,0,0,0,0,0,1
+4,6,1,8,5,3,3,2,1,26,2,1,2,1,1,1,0,0,0,0,1,0,1,0
+2,12,2,65,5,1,3,1,4,52,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+4,36,4,96,1,3,2,2,3,31,2,2,1,1,1,0,0,1,0,0,1,0,0,1
+3,18,2,20,1,5,2,2,3,23,3,1,1,1,1,1,0,1,0,0,1,0,0,0
+1,36,4,62,1,2,2,4,4,23,3,2,1,2,1,0,0,0,1,1,0,0,1,0
+2,9,2,14,1,3,4,1,1,27,1,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,15,4,15,5,5,3,4,1,50,3,2,1,2,1,0,0,0,0,0,1,0,0,1
+2,36,0,20,1,5,3,4,4,61,3,1,1,2,1,0,0,1,0,0,0,0,0,0
+2,48,0,144,1,3,3,2,3,25,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,24,2,32,1,2,2,4,2,26,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,27,2,52,5,5,3,4,2,48,3,4,2,2,1,0,0,1,0,0,1,0,0,1
+4,12,2,22,1,2,2,2,3,29,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,12,2,10,4,3,4,1,1,22,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,36,2,18,1,3,3,4,4,37,2,1,1,2,1,0,0,1,0,0,0,0,0,1
+4,36,2,24,5,3,2,4,3,25,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,36,2,81,1,3,2,2,2,30,1,1,1,1,1,0,1,1,0,0,1,0,0,1
+4,7,4,7,5,5,3,2,2,46,3,2,1,2,1,0,0,1,0,1,0,0,1,0
+1,8,4,12,1,5,3,4,4,51,1,2,2,2,1,0,0,1,0,0,0,0,0,0
+2,42,4,60,1,4,2,1,1,41,1,2,1,1,1,0,0,1,0,0,1,0,1,0
+1,36,2,20,5,5,3,4,4,40,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+1,12,4,15,1,5,3,4,4,66,3,2,1,1,1,0,1,1,0,0,0,0,0,0
+1,42,2,40,1,2,3,3,3,34,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,11,3,48,1,4,3,4,2,51,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,54,0,94,5,3,3,2,2,39,3,1,2,1,1,0,1,1,0,0,1,0,1,0
+2,30,2,38,1,2,4,1,2,22,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,2,59,5,2,2,1,3,44,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,15,2,12,3,5,3,3,2,47,2,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,18,2,16,2,3,2,4,2,24,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+1,24,2,18,1,5,2,4,1,58,3,1,1,2,1,0,0,0,0,0,1,0,1,0
+1,10,2,23,1,5,3,4,1,52,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,12,4,14,1,3,2,2,1,29,3,2,1,2,1,0,0,0,0,0,1,0,0,0
+2,18,4,13,1,2,2,1,2,27,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,36,2,126,2,3,3,4,4,47,3,1,2,2,1,0,0,1,0,0,0,0,0,1
+1,18,2,22,2,4,3,3,3,30,3,1,2,2,1,1,0,1,0,0,1,0,0,0
+1,12,0,11,1,4,3,3,1,28,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,4,6,1,5,3,4,1,56,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,4,14,1,5,3,3,1,54,3,1,1,1,1,0,1,1,0,0,1,0,0,1
+4,12,4,8,5,5,2,3,2,33,1,1,2,1,1,0,0,1,0,0,1,0,1,0
+3,24,4,36,5,5,3,4,4,20,3,2,1,1,1,0,0,0,1,1,0,0,0,1
+2,12,2,13,4,5,3,4,1,54,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+2,54,0,159,1,2,3,4,4,58,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+4,12,4,20,5,4,2,2,3,61,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,18,2,26,2,3,3,4,3,34,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,36,4,23,1,5,3,4,1,36,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,20,3,71,5,4,3,4,2,36,1,2,2,2,1,0,1,1,0,1,0,0,0,0
+4,24,2,15,2,5,4,4,1,41,3,1,1,1,1,1,0,1,0,1,0,0,1,0
+2,36,2,23,1,4,3,4,3,24,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+4,6,3,9,1,3,2,2,1,24,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,9,4,19,1,4,3,3,3,35,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+4,12,2,24,5,2,4,4,3,26,3,1,1,2,1,0,1,1,0,1,0,0,0,1
+2,24,4,119,1,3,3,3,3,39,3,2,2,2,1,0,0,0,1,0,1,0,0,0
+4,18,1,65,1,5,3,4,4,39,1,2,2,2,1,1,0,1,0,0,1,0,0,0
+2,12,2,61,1,4,3,2,3,32,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+1,24,2,77,5,2,2,2,2,30,3,1,1,2,2,0,0,1,0,0,1,0,0,1
+2,14,2,14,3,5,4,2,1,35,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,6,3,14,2,5,1,2,3,31,1,2,2,1,1,0,0,1,0,0,1,0,0,1
+3,15,2,4,1,2,2,4,2,23,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+2,18,2,63,1,4,3,3,1,28,3,1,1,1,1,1,0,1,0,1,0,0,1,0
+4,36,4,79,1,3,2,2,1,25,2,2,1,2,1,1,0,1,0,0,1,0,0,1
+1,12,2,17,3,5,4,1,1,35,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,48,4,36,5,5,3,1,1,47,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,42,2,72,5,4,2,3,3,30,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+1,10,4,21,5,2,2,3,1,27,3,2,1,1,2,0,0,0,1,1,0,0,0,1
+1,33,4,43,3,3,2,4,3,23,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,12,4,24,3,4,1,3,3,36,3,1,1,2,1,1,0,1,0,0,1,0,0,0
+1,21,2,18,1,3,2,2,1,25,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,24,4,39,1,5,2,2,3,41,3,2,1,2,1,0,1,1,0,1,0,0,0,0
+4,12,2,18,1,3,3,2,1,24,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+3,10,4,8,1,5,3,4,4,63,3,2,1,2,1,1,0,1,0,0,0,0,0,1
+2,18,2,19,5,2,2,3,1,27,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,12,4,21,1,3,3,2,2,30,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+1,12,2,7,1,3,4,2,1,40,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,12,2,6,1,3,3,2,3,30,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,12,4,19,1,1,3,2,3,34,3,2,1,2,1,0,1,1,0,0,1,0,0,0
+1,12,4,35,1,3,2,2,1,29,3,2,1,1,1,1,0,0,1,0,1,0,0,1
+2,48,2,85,5,4,2,2,3,24,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+1,36,3,69,1,3,3,3,2,29,2,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,15,2,27,1,2,3,3,2,27,1,2,1,1,1,0,0,1,0,0,1,0,1,0
+4,18,2,20,1,3,3,4,4,47,1,2,1,1,1,0,0,1,0,0,0,0,0,1
+4,60,2,101,2,4,2,4,1,21,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,12,4,12,5,5,2,2,1,38,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,27,3,86,4,3,3,2,3,27,3,2,1,1,1,0,1,1,0,0,1,0,0,1
+2,12,2,8,3,3,3,3,1,66,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,15,4,27,5,4,3,2,1,35,1,3,1,2,1,0,0,0,0,0,1,0,0,1
+3,12,2,19,1,3,2,2,3,44,3,1,1,2,1,0,0,1,0,1,0,0,1,0
+3,6,2,7,4,2,4,2,1,27,3,1,1,1,2,1,0,1,0,0,1,1,0,0
+2,36,2,48,1,2,2,1,4,30,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+1,27,2,34,1,3,3,2,3,27,3,1,1,1,1,0,0,1,0,0,1,0,0,0
+1,18,2,25,1,3,3,2,3,22,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,21,4,23,1,2,2,4,2,23,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,48,1,36,2,4,3,2,3,30,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,6,4,9,1,5,2,4,4,39,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+4,12,4,7,2,4,2,3,3,51,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+1,36,4,54,1,3,3,2,2,28,3,2,1,1,1,0,0,0,0,0,1,0,0,1
+4,18,4,16,4,5,3,4,3,46,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,6,2,13,2,5,3,4,4,42,1,1,2,2,1,0,0,1,0,0,0,0,0,1
+4,10,2,19,1,3,3,4,2,38,3,1,1,2,2,0,0,1,0,0,1,0,0,1
+3,36,2,58,1,3,3,1,3,24,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,24,4,78,4,5,2,4,4,29,3,1,1,1,1,0,1,1,0,1,0,0,0,1
+2,24,3,70,2,4,3,4,3,36,3,1,1,2,1,0,0,1,0,1,0,0,0,0
+1,12,2,13,1,3,2,4,3,20,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,9,4,13,2,5,3,4,1,48,3,2,2,1,2,0,0,0,0,0,1,0,0,1
+1,12,1,3,1,5,4,1,3,45,1,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,24,2,35,2,4,3,3,3,38,1,2,1,2,1,1,0,1,0,0,1,0,0,1
+4,6,4,19,5,3,3,2,1,34,3,2,2,1,1,0,0,1,0,0,1,0,1,0
+4,24,4,29,2,5,3,4,1,36,3,1,2,2,1,0,0,1,0,0,1,0,0,1
+4,18,4,11,1,2,2,1,2,30,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,15,2,13,3,4,3,3,2,36,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,10,2,73,1,1,3,4,4,70,1,1,1,2,1,1,0,1,0,0,0,0,0,0
+4,36,2,9,3,5,3,4,2,36,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,6,2,30,3,3,3,2,3,32,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,18,2,11,1,1,2,2,3,33,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,11,2,16,4,2,2,1,1,20,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,2,40,1,4,2,4,2,25,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+2,24,4,19,1,5,1,4,1,31,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+1,15,0,10,1,5,3,3,3,33,3,2,2,1,1,1,0,1,0,1,0,0,0,1
+4,12,2,8,1,3,2,1,1,26,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,24,3,21,1,1,2,2,2,34,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+2,8,2,14,1,3,3,2,1,33,3,1,1,1,2,0,0,0,0,0,1,0,0,1
+1,21,3,34,1,2,3,1,2,26,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,30,1,75,5,1,2,1,1,53,1,1,1,2,1,0,1,1,0,0,1,0,0,0
+1,12,2,26,1,3,1,1,3,42,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,6,4,3,3,5,3,4,3,52,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,2,20,1,4,3,2,3,31,3,2,2,2,1,0,0,1,0,1,0,0,0,0
+1,21,4,6,1,5,3,4,1,65,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,36,3,96,1,2,1,1,3,28,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,36,3,45,1,3,1,2,1,30,2,2,1,2,1,0,0,1,0,0,1,0,0,0
+1,21,1,16,5,3,3,2,2,40,3,2,2,1,1,1,0,1,0,0,1,0,1,0
+4,24,4,38,4,3,3,4,1,50,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,18,4,9,1,5,3,4,3,36,1,1,2,2,1,1,0,1,0,0,1,0,0,1
+4,15,4,14,1,3,3,2,2,31,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,9,1,51,1,5,2,4,4,74,1,1,2,2,1,0,1,1,0,0,0,0,0,0
+2,16,4,12,1,1,3,3,3,68,3,3,1,2,1,1,0,1,0,0,0,1,0,0
+1,12,2,7,2,4,4,1,2,20,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,18,0,32,1,3,2,4,3,33,1,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,24,2,46,4,3,3,3,2,54,3,3,1,2,1,0,0,1,0,0,1,0,0,0
+2,48,0,38,2,4,3,4,4,34,3,1,2,1,1,0,0,1,0,0,0,0,1,0
+2,27,2,39,1,3,3,2,3,36,3,1,2,2,1,0,0,1,0,0,1,0,0,1
+4,6,2,21,1,4,4,2,1,29,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+2,45,2,30,2,3,3,4,2,21,3,1,1,1,1,0,0,0,0,1,0,0,0,1
+2,9,4,15,1,5,2,3,3,34,3,2,1,2,1,0,0,1,0,0,1,0,0,0
+4,6,4,14,1,3,2,1,3,28,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,12,2,10,2,2,2,4,3,27,1,4,1,1,1,0,0,1,0,1,0,0,0,1
+2,24,2,28,5,5,3,4,4,36,1,1,1,2,1,0,1,1,0,0,0,0,0,1
+2,18,3,43,1,5,1,3,4,40,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+4,9,4,9,3,5,3,2,3,52,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+1,12,2,12,1,3,4,3,1,27,3,1,1,1,1,1,0,1,0,0,1,0,1,0
+4,27,3,51,1,4,3,4,3,26,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,2,9,1,4,4,4,2,21,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+4,12,4,15,1,5,3,1,1,38,3,2,2,1,1,1,0,1,0,0,1,0,1,0
+1,30,4,106,1,5,3,4,4,38,3,3,2,2,1,0,1,1,0,0,0,0,0,0
+4,12,4,19,1,5,3,4,1,43,3,3,1,2,1,0,0,1,0,0,1,0,0,1
+2,12,4,14,1,4,3,3,2,26,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,2,66,1,3,4,2,3,21,2,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,12,2,14,4,4,3,2,2,55,3,1,1,1,2,0,1,1,0,0,1,0,0,1
+4,9,4,31,5,3,3,2,1,33,3,2,2,1,1,0,0,1,0,0,1,0,0,1
+4,36,2,38,5,5,2,4,1,45,3,1,1,2,1,0,0,1,0,0,1,0,1,0
+1,27,0,53,1,1,3,4,2,50,2,2,1,2,1,0,0,1,0,0,1,0,0,1
+3,30,3,19,1,5,3,4,1,66,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+4,36,4,33,5,5,3,2,3,51,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,6,4,9,5,4,2,3,2,39,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+1,18,0,31,1,4,3,1,2,31,1,1,1,2,1,0,0,1,0,0,1,0,0,1
+3,36,2,39,1,3,3,2,1,23,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,24,2,30,1,3,1,2,1,24,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+4,10,2,14,1,3,2,4,3,64,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+2,12,2,6,1,2,4,1,1,26,1,1,1,1,1,0,0,0,0,0,1,0,1,0
+1,12,2,12,5,3,2,4,2,23,1,1,1,2,1,0,0,1,0,1,0,0,0,1
+4,12,2,7,1,3,3,2,1,30,1,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,3,30,5,3,3,4,1,32,3,2,2,2,1,0,0,1,0,0,1,0,0,1
+4,15,2,47,1,3,3,2,3,30,3,1,1,2,1,0,1,1,0,0,1,0,0,1
+4,36,0,26,1,3,3,2,3,27,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,48,2,110,4,4,3,2,4,27,1,2,1,2,1,0,0,0,1,0,1,0,0,1
+1,12,2,79,1,5,3,4,4,53,3,1,1,2,1,0,0,1,0,0,0,0,0,0
+4,9,2,15,1,4,3,2,3,22,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,2,31,1,2,3,1,4,22,1,1,1,1,1,0,0,1,0,0,0,0,0,1
+3,36,2,42,1,3,3,2,3,26,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,9,2,25,3,5,3,4,4,51,3,1,1,1,1,1,0,1,0,0,0,0,1,0
+4,12,2,21,2,4,3,1,4,35,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,18,2,9,1,3,4,2,1,25,3,1,1,1,1,0,0,0,0,0,1,0,1,0
+4,4,4,15,1,4,3,1,1,42,3,3,2,1,1,0,0,1,0,0,1,0,1,0
+1,24,2,18,1,1,3,2,3,30,2,1,2,1,1,0,0,1,0,0,1,0,0,0
+2,6,2,146,5,1,3,2,2,23,3,1,1,2,1,1,0,1,0,0,1,1,0,0
+2,21,2,28,2,5,1,2,3,61,1,2,1,1,1,0,0,1,0,1,0,0,1,0
+4,12,4,13,1,3,2,2,2,35,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+1,30,2,25,1,5,3,3,2,39,3,1,2,1,1,0,0,0,0,0,1,0,0,1
+1,24,2,9,5,5,2,2,3,29,1,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,6,2,16,1,4,3,2,2,51,3,1,2,1,1,0,0,1,0,0,1,0,0,1
+1,48,0,46,1,5,3,4,4,24,3,2,2,1,1,0,1,1,0,0,0,0,0,1
+4,12,4,12,1,3,2,2,1,27,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,1,34,3,3,2,3,1,35,3,1,2,1,1,0,0,1,0,0,1,0,1,0
+4,24,2,13,1,4,3,1,1,25,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,12,4,7,1,5,3,4,1,52,3,3,1,1,1,0,0,1,0,0,1,0,0,1
+4,6,0,12,2,3,3,1,4,35,1,1,1,1,2,1,0,1,0,1,0,0,0,1
+3,24,2,19,1,3,3,2,1,26,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,2,4,1,1,2,4,1,22,3,1,1,1,1,0,0,0,1,1,0,0,0,1
+1,6,4,7,4,4,2,4,1,39,3,2,1,2,1,1,0,1,0,0,1,0,1,0
+3,12,2,23,1,3,2,2,3,46,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,30,2,22,1,3,2,2,4,24,1,1,1,1,1,1,0,0,0,0,1,0,0,1
+4,24,3,42,2,3,3,3,2,35,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,9,2,20,5,4,3,1,3,24,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,60,3,74,5,3,3,1,1,27,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,24,4,27,1,3,3,2,1,35,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+1,12,1,21,1,3,1,1,4,29,3,1,1,1,1,0,0,1,0,0,0,0,0,1
+4,15,2,38,2,2,2,4,3,23,3,1,1,2,1,0,1,1,0,0,1,0,0,1
+4,11,4,12,2,1,2,4,1,57,3,3,1,1,1,0,0,1,0,0,1,0,1,0
+1,12,2,17,1,3,3,2,1,27,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,2,16,1,5,2,4,3,55,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,18,4,53,1,5,3,4,4,36,3,3,1,2,1,1,0,1,0,0,0,0,0,0
+4,12,4,27,1,5,2,4,4,57,1,3,1,1,1,0,0,1,0,0,0,0,1,0
+4,10,4,12,1,5,3,4,1,32,3,2,2,1,2,1,0,1,0,0,1,0,1,0
+2,15,2,8,1,5,3,3,3,37,3,1,2,1,1,0,0,1,0,0,1,0,0,1
+4,36,4,63,5,5,3,4,1,36,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,2,15,1,2,2,3,3,38,2,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,14,2,90,1,5,1,4,2,45,3,1,1,2,2,1,0,1,0,0,1,0,0,0
+4,24,2,10,5,5,3,2,3,25,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,2,27,5,4,3,3,2,32,3,1,1,1,2,1,0,1,0,0,1,0,0,1
+4,12,4,14,3,4,2,4,3,37,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+2,48,1,122,5,1,3,4,4,36,3,1,1,2,1,1,0,0,1,0,0,0,0,0
+2,48,2,31,1,4,3,4,1,28,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+1,30,2,120,1,2,1,1,4,34,3,1,1,2,1,0,0,1,0,0,1,0,1,0
+4,9,2,27,1,3,3,2,1,32,3,1,2,1,1,0,0,1,0,0,1,0,0,1
+4,18,4,24,1,3,2,2,3,26,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,2,13,5,5,1,4,2,49,3,1,1,2,1,0,0,1,0,0,1,0,1,0
+4,6,2,46,1,2,2,4,2,32,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,2,19,2,3,3,4,3,29,3,1,1,2,1,0,0,1,0,1,0,0,0,0
+4,15,4,34,4,5,3,4,4,23,3,2,1,2,1,0,1,1,0,1,0,0,0,1
+4,12,2,16,1,3,3,2,1,50,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+3,18,1,14,5,4,3,4,3,49,1,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,15,4,15,5,5,3,4,2,63,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,24,4,39,2,2,1,2,3,37,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+1,47,2,107,1,2,2,1,1,35,3,1,1,2,1,1,0,1,0,0,1,0,1,0
+1,48,2,48,1,4,3,3,2,26,3,1,2,1,1,0,1,1,0,0,1,0,0,1
+2,48,3,76,2,1,3,4,4,31,3,1,1,2,1,0,0,1,0,0,0,0,0,0
+2,12,2,11,1,3,2,4,1,49,3,2,1,2,1,0,0,0,0,0,1,0,0,1
+1,24,3,10,1,2,4,4,1,48,2,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,2,11,1,3,4,2,1,26,3,1,1,2,2,0,0,1,0,0,1,0,0,1
+2,36,2,94,1,2,4,4,3,28,3,1,1,2,1,0,1,1,0,1,0,0,0,0
+1,24,4,64,1,5,2,4,4,44,3,2,2,2,1,0,1,1,0,0,0,0,0,0
+3,42,4,48,1,5,3,4,4,56,3,1,1,1,1,0,1,1,0,0,0,0,0,1
+4,48,4,76,5,5,1,2,3,46,1,2,2,1,1,0,0,1,0,0,1,0,0,0
+2,48,2,100,1,2,2,2,3,26,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,12,2,47,5,2,2,4,3,20,3,1,1,1,1,0,1,1,0,1,0,0,0,1
+4,10,2,13,5,5,3,2,2,45,3,1,1,1,2,1,0,0,1,0,1,0,1,0
+4,18,2,25,1,3,3,4,1,43,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,21,4,27,4,4,3,2,3,32,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,6,2,7,1,1,2,4,1,54,3,1,1,2,1,1,0,1,0,0,1,1,0,0
+2,36,0,38,1,3,2,1,3,42,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+3,24,4,13,5,4,3,2,1,37,1,2,2,1,1,1,0,1,0,0,1,0,1,0
+1,10,4,10,1,4,3,3,2,49,3,2,1,2,1,1,0,0,1,0,1,0,0,1
+4,48,4,101,3,3,3,2,4,44,1,1,1,1,1,1,0,1,0,0,0,0,0,1
+4,6,2,15,4,3,1,2,1,33,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,30,2,48,5,4,2,4,2,24,2,1,1,1,1,0,1,1,0,1,0,0,1,0
+1,12,2,7,2,2,4,3,4,33,3,1,1,2,1,0,0,1,0,0,1,0,1,0
+2,8,2,12,1,3,2,4,1,24,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,9,2,3,1,3,4,4,1,22,3,1,1,1,1,1,0,1,0,1,0,0,1,0
+2,48,2,54,5,1,3,4,4,40,1,1,1,2,1,0,0,1,0,0,0,1,0,0
+4,24,2,55,2,3,3,1,3,25,2,1,1,1,1,0,0,1,0,0,1,0,0,1
+3,24,2,37,1,2,2,4,3,26,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,12,2,7,1,4,4,3,3,25,1,1,1,1,1,1,0,1,0,0,1,0,1,0
+3,4,2,15,5,2,3,2,1,29,3,1,2,1,2,1,0,1,0,0,1,0,1,0
+1,36,1,27,1,5,3,4,3,31,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,2,7,1,3,3,3,2,38,3,1,2,1,1,0,0,0,0,0,1,0,1,0
+2,24,2,44,5,3,2,4,2,48,3,1,1,2,1,0,0,1,0,0,1,0,1,0
+4,12,4,7,1,3,3,2,3,32,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+1,15,3,36,1,5,2,4,2,27,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+2,30,4,42,1,1,4,2,3,28,3,2,1,1,1,1,0,1,0,0,1,0,0,0
+1,24,2,19,1,2,1,3,2,32,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,2,29,1,4,3,1,4,34,3,1,1,2,1,0,1,1,0,0,0,0,0,0
+1,18,2,27,4,3,3,2,3,28,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,4,10,1,3,2,3,1,36,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+1,8,4,34,1,4,3,4,1,39,3,2,1,1,2,1,0,1,0,0,1,0,1,0
+4,12,4,58,5,5,3,4,2,49,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+4,24,2,15,4,4,2,3,3,34,3,1,2,2,1,1,0,1,0,0,1,0,0,1
+3,36,2,45,1,5,3,2,3,31,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,6,2,11,1,5,3,4,3,28,3,1,2,1,1,0,0,1,0,0,1,0,0,1
+1,24,4,66,1,1,3,4,4,75,3,2,1,2,1,0,1,1,0,0,0,0,0,0
+4,18,4,19,2,3,2,2,1,30,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,60,2,74,2,2,2,2,2,24,3,1,1,1,1,1,0,1,0,0,1,0,0,0
+4,48,4,116,2,3,2,4,3,24,1,2,1,1,1,0,1,1,0,1,0,0,1,0
+1,24,0,41,1,5,3,4,4,23,1,2,2,1,1,0,0,1,0,1,0,0,0,1
+1,6,4,34,1,3,1,4,1,44,3,1,1,2,1,0,0,1,0,1,0,0,0,0
+2,13,2,21,1,2,2,4,2,23,3,1,1,1,1,0,0,0,0,0,1,0,1,0
+1,15,2,13,5,3,2,2,3,24,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,24,2,42,1,3,3,4,2,28,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,10,2,15,1,3,1,2,3,31,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,24,4,57,1,2,2,4,4,24,3,2,1,2,1,0,0,1,0,0,0,0,0,1
+1,21,2,36,1,4,2,4,3,26,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+2,18,2,32,3,2,4,3,1,25,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+2,18,2,44,1,5,3,1,1,33,1,1,1,2,1,0,0,0,1,0,1,0,0,0
+3,10,2,39,1,2,3,1,2,37,3,1,2,1,1,1,0,0,0,0,1,0,1,0
+4,15,4,15,1,3,2,2,3,43,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,13,4,9,1,2,3,4,1,23,3,2,1,1,1,0,0,0,0,0,1,0,0,1
+2,24,2,38,3,1,2,4,4,23,3,1,1,1,1,0,0,1,0,1,0,1,0,0
+4,6,3,17,2,3,3,2,1,34,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+2,9,4,11,4,5,3,3,4,32,3,2,2,1,1,0,0,1,0,0,0,0,0,1
+4,9,2,12,1,2,2,4,1,23,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+2,9,2,10,1,3,2,2,3,29,3,1,1,1,2,0,0,1,0,0,1,0,0,1
+4,18,4,32,5,1,3,4,4,38,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+1,12,0,62,1,3,3,2,2,28,3,2,1,2,1,0,0,1,0,1,0,0,0,1
+4,10,2,7,3,5,3,4,4,46,3,1,1,2,1,0,0,1,0,0,0,0,0,1
+2,24,2,12,1,2,3,2,1,23,2,1,1,1,1,1,0,1,0,0,1,0,1,0
+4,12,4,23,5,5,3,4,1,49,3,1,1,2,1,0,0,0,1,0,1,0,0,1
+4,36,3,45,1,3,3,2,3,26,3,2,1,2,1,0,0,1,0,0,1,0,0,0
+4,12,2,8,1,3,4,2,1,28,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,30,2,24,1,4,2,4,1,23,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+2,18,2,12,5,3,3,4,4,61,3,1,1,1,1,0,0,1,0,0,0,0,0,1
+3,12,2,34,5,5,3,3,3,37,3,1,1,1,1,0,0,1,0,0,1,0,0,0
+3,12,3,22,1,3,2,2,3,36,2,2,1,2,1,1,0,1,0,0,1,0,0,1
+4,6,2,18,1,3,4,2,2,21,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,18,2,25,1,1,3,1,3,25,3,1,1,1,1,0,0,1,0,0,1,1,0,0
+4,12,2,15,1,4,3,4,3,36,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,18,4,38,1,4,3,1,3,27,3,2,1,1,1,0,1,1,0,0,1,0,0,1
+1,18,2,36,1,2,2,4,3,22,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,36,2,34,1,5,3,2,3,42,3,1,2,1,1,0,0,1,0,0,1,0,0,1
+2,18,2,30,1,4,2,4,1,40,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+4,36,2,31,5,3,3,4,1,36,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,18,4,61,1,5,3,4,3,33,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,10,4,21,1,2,2,3,1,23,3,2,1,1,1,0,0,1,0,1,0,0,0,1
+4,60,4,138,5,5,3,4,4,63,1,1,1,2,1,1,0,1,0,0,0,0,0,0
+2,60,1,148,2,5,2,4,4,60,1,2,1,2,1,0,0,1,0,0,0,0,0,0
+1,48,1,77,1,4,2,4,3,37,3,1,1,1,1,0,0,0,0,1,0,0,0,1
+4,18,3,23,1,1,4,3,1,34,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,7,3,8,5,5,3,4,4,36,3,1,1,1,1,0,0,1,0,0,0,0,0,1
+2,36,2,143,1,5,3,2,4,57,3,1,1,2,1,1,0,1,0,0,0,0,0,0
+4,6,4,4,2,3,2,4,3,52,3,2,1,1,1,1,0,1,0,0,1,0,1,0
+1,20,2,22,5,4,3,4,3,39,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,18,2,130,1,1,2,4,4,38,3,1,1,2,1,0,1,1,0,0,0,0,0,0
+4,22,2,13,5,4,2,4,2,25,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+3,12,2,13,1,2,3,1,1,26,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,30,3,43,2,3,3,2,2,26,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+4,18,4,22,1,3,2,1,3,25,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,2,11,5,2,2,2,1,21,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+2,18,4,74,1,1,3,4,2,40,2,2,1,2,1,0,0,1,0,0,1,0,0,0
+2,15,4,23,3,3,3,4,3,27,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,9,2,14,1,4,2,2,3,27,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,2,18,1,3,4,2,2,30,3,1,1,2,1,1,0,1,0,0,1,0,0,0
+2,12,2,10,4,2,2,4,1,19,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+1,36,2,32,1,4,3,4,4,39,1,1,2,2,1,1,0,1,0,0,0,0,0,0
+1,6,4,20,1,4,2,4,3,31,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,9,4,24,1,1,3,3,3,31,3,1,1,1,1,0,0,1,0,0,1,0,0,0
+2,39,3,118,2,4,3,3,4,32,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+1,12,2,26,1,1,2,4,4,55,3,1,1,1,1,0,0,1,0,0,0,0,0,0
+1,36,4,23,1,3,4,2,2,46,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,12,2,12,1,5,1,1,1,46,3,2,1,1,1,1,0,1,0,1,0,0,0,1
+4,24,4,15,4,3,2,1,1,43,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+4,18,2,15,1,2,4,4,1,39,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,18,4,19,5,3,4,4,1,28,1,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,3,86,1,2,3,2,3,27,1,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,14,3,8,1,3,3,2,3,27,3,2,1,1,1,1,0,1,0,0,1,0,1,0
+2,18,3,29,5,5,3,4,3,43,3,1,2,1,1,1,0,1,0,0,1,0,0,1
+2,24,2,20,1,2,4,1,2,22,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,24,4,22,5,4,3,4,3,43,3,2,2,2,1,0,1,1,0,0,1,0,0,1
+1,15,2,11,1,2,4,2,1,27,3,1,1,1,2,0,0,1,0,0,1,0,0,1
+4,24,2,32,3,5,1,2,3,26,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+3,12,4,9,3,4,4,2,1,28,3,3,1,2,1,1,0,1,0,0,1,0,0,1
+2,24,2,20,1,5,2,4,3,20,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,33,4,73,1,4,3,2,3,35,3,2,1,2,1,0,1,1,0,0,1,0,0,0
+4,12,4,23,1,1,3,2,3,42,2,2,1,2,1,0,0,1,0,0,1,0,0,0
+4,10,2,16,3,3,3,2,4,40,3,1,2,1,2,1,0,1,0,1,0,0,1,0
+1,24,2,14,5,3,2,2,2,35,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,36,4,58,1,5,3,2,2,35,3,2,2,2,1,0,1,1,0,0,1,0,0,1
+1,12,2,26,1,2,3,1,1,33,3,1,2,1,1,1,0,1,0,0,1,0,1,0
+1,18,3,85,5,3,2,2,3,23,3,2,1,2,1,0,0,1,0,1,0,0,0,1
+4,21,2,28,3,4,2,2,3,31,1,1,1,1,1,1,0,1,0,0,1,0,0,0
+2,18,2,10,5,3,2,2,2,33,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,15,2,32,4,4,2,3,3,20,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+2,12,2,20,5,3,3,2,3,30,3,1,1,1,1,0,1,1,0,0,1,0,0,1
+2,12,4,10,1,4,3,3,1,47,3,2,2,1,1,1,0,1,0,0,1,0,1,0
+4,21,3,16,2,4,3,3,1,34,3,2,1,1,1,0,0,1,0,0,1,0,0,0
+2,12,2,28,5,5,2,2,2,25,1,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,18,2,28,1,3,4,3,3,21,3,1,1,2,1,0,1,1,0,1,0,0,0,1
+4,28,4,27,1,5,3,2,3,29,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,4,11,4,3,3,3,1,46,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,9,2,13,1,5,3,4,3,20,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,18,4,12,1,1,2,4,4,55,3,3,2,1,1,0,0,1,0,0,0,1,0,0
+4,5,2,34,1,4,3,4,1,74,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,24,2,113,1,3,3,3,3,29,1,2,1,2,1,0,0,0,1,0,1,0,0,0
+1,6,4,19,1,1,3,4,4,36,3,3,1,2,1,0,0,1,0,0,0,0,0,0
+4,24,4,21,1,3,1,2,1,33,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+1,9,2,21,1,3,3,2,1,25,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,12,2,15,5,3,4,1,1,25,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,6,2,7,3,4,4,4,1,23,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+4,24,4,13,4,5,2,4,1,37,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+1,42,4,34,1,1,3,4,3,65,3,2,1,1,1,0,0,0,1,0,1,1,0,0
+3,12,1,6,1,2,2,1,1,26,3,1,1,1,1,0,0,1,0,0,1,1,0,0
+4,12,2,19,1,5,3,4,3,39,3,1,1,2,1,1,0,1,0,0,1,0,0,0
+1,12,2,16,1,3,2,3,2,30,3,1,1,1,1,0,0,0,1,0,1,0,0,1
+2,20,3,26,1,3,3,3,3,29,1,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,12,2,7,1,5,3,4,3,41,1,1,2,1,1,0,0,1,0,0,1,0,1,0
+2,48,4,51,1,3,2,3,3,30,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+4,9,4,12,5,5,2,4,2,41,3,2,1,1,1,0,0,1,0,1,0,0,1,0
+1,36,2,18,1,2,2,4,3,34,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+2,7,2,26,1,3,3,2,1,35,3,1,1,1,1,0,0,0,0,0,1,0,0,1
+3,12,2,14,5,5,2,4,1,55,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+2,15,3,15,4,3,4,3,2,61,2,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,36,4,111,5,3,3,2,3,30,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+4,6,2,5,1,3,2,1,1,29,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,0,28,1,5,3,4,2,34,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,2,27,1,5,3,4,3,35,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+1,24,2,48,1,4,3,3,2,31,3,1,1,2,1,1,0,0,1,0,1,0,0,1
+4,24,2,27,1,2,2,1,4,29,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+1,11,4,39,1,3,3,2,1,36,3,2,2,1,1,1,0,1,0,1,0,0,0,1
+1,12,2,34,1,5,3,4,4,35,3,1,1,2,1,0,1,1,0,0,0,0,0,1
+1,6,2,3,1,2,2,1,1,27,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,2,46,1,2,3,2,3,32,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,36,2,36,1,3,3,2,2,37,3,1,2,1,1,0,0,0,0,0,1,0,0,1
+1,15,2,17,1,2,3,3,1,36,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+2,12,2,30,1,2,2,1,1,34,3,1,1,1,1,0,0,1,0,1,0,0,0,0
+2,12,2,8,5,5,3,4,2,38,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,2,20,1,4,3,1,3,34,2,2,1,2,1,0,0,1,0,0,1,0,0,1
+1,24,2,29,1,3,3,4,4,63,1,1,2,2,1,0,1,0,0,0,1,0,0,1
+1,24,3,17,1,2,2,2,3,29,3,1,1,2,1,0,0,1,0,1,0,0,1,0
+4,48,3,72,5,5,3,3,3,32,1,2,2,1,1,0,0,1,0,0,1,0,0,1
+4,33,3,28,1,3,2,2,3,26,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,24,3,47,1,4,3,3,3,35,3,2,1,2,1,0,1,1,0,0,1,0,1,0
+2,24,2,31,2,2,4,2,3,22,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+1,6,2,4,1,2,2,4,2,23,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,9,2,7,1,3,3,3,3,28,3,1,1,1,1,1,0,1,0,0,1,0,1,0
+4,6,2,12,5,1,3,4,2,36,3,1,2,2,1,0,0,1,0,0,1,0,0,0
+2,18,4,12,1,3,4,2,3,33,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,18,0,31,1,2,2,4,2,26,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+4,39,2,26,3,3,3,4,3,24,3,1,1,1,1,0,1,1,0,0,1,0,0,1
+3,24,2,52,1,4,3,2,3,25,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,12,2,10,2,4,3,4,1,39,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+1,15,4,15,1,5,3,4,3,44,3,2,2,2,1,0,0,1,0,0,1,0,0,1
+2,12,4,36,1,3,2,1,1,23,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,24,2,12,1,2,3,1,2,26,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+1,30,2,36,4,5,2,4,2,57,3,2,1,2,1,0,0,1,0,1,0,0,0,1
+4,15,3,10,4,4,2,2,2,30,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,4,12,3,3,3,4,1,44,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+2,6,3,12,1,1,3,4,2,47,3,1,1,2,1,1,0,1,0,0,1,0,0,0
+4,12,2,31,1,3,3,4,3,52,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,24,2,38,1,5,2,4,4,62,3,1,1,2,1,1,0,0,1,0,0,0,0,1
+4,10,2,14,2,3,3,2,1,35,3,1,1,1,2,1,0,1,0,1,0,0,1,0
+4,6,2,35,1,3,3,3,2,26,3,1,1,1,1,1,0,0,0,1,0,0,0,1
+4,12,4,19,1,5,3,2,4,26,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,27,0,83,1,5,2,4,4,42,3,2,1,2,1,0,0,1,0,0,0,0,0,0
+4,6,4,12,2,3,2,1,2,27,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,6,2,4,5,5,3,4,2,38,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,4,21,1,3,3,2,1,39,3,2,2,1,2,1,0,1,0,1,0,0,1,0
+1,24,2,30,5,3,4,4,3,20,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,36,2,90,2,2,3,1,4,29,3,1,1,2,1,0,0,0,1,1,0,0,0,0
+4,24,4,16,1,4,3,3,2,40,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,18,2,13,1,5,4,2,1,32,3,1,1,1,1,0,0,0,0,0,1,0,1,0
+3,6,4,13,2,5,1,4,3,28,3,2,2,2,1,1,0,1,0,0,1,0,0,1
+1,24,2,31,1,2,2,1,2,27,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+1,36,2,55,1,5,3,4,4,42,3,1,2,1,1,0,1,1,0,0,0,0,0,1
+3,9,2,11,2,5,1,4,1,49,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,24,4,12,2,2,3,4,4,38,1,2,2,1,1,0,0,1,0,0,1,0,0,1
+1,24,2,12,1,2,2,4,2,24,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+4,10,2,13,5,3,3,4,2,27,3,1,1,1,1,1,0,0,0,0,1,0,1,0
+3,15,4,24,3,3,3,2,3,36,3,1,1,2,1,0,1,1,0,0,1,0,0,1
+2,15,1,68,2,1,3,2,2,34,3,1,2,2,1,1,0,1,0,0,1,0,0,0
+4,24,2,14,1,3,4,2,2,28,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,39,2,86,2,5,3,2,3,45,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+1,12,2,8,1,4,3,2,1,26,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,36,2,47,1,3,3,2,4,32,3,1,1,2,1,0,1,1,0,0,0,0,0,0
+3,15,2,27,1,4,3,4,2,26,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+2,12,3,6,1,3,4,4,1,20,3,2,1,1,1,0,0,0,1,1,0,0,0,1
+4,24,2,23,5,2,3,1,2,54,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+1,6,4,6,1,4,2,3,2,37,3,2,1,1,2,1,0,1,0,0,1,0,0,1
+1,6,4,14,1,2,3,4,1,40,3,1,2,1,2,1,0,1,0,0,1,0,1,0
+4,36,4,71,1,2,2,4,2,23,3,2,1,2,1,0,0,1,0,1,0,0,0,1
+1,6,2,12,2,5,3,2,2,43,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+4,6,4,7,5,5,3,4,4,36,3,2,1,1,1,0,0,1,0,0,0,0,0,1
+4,24,4,55,1,5,3,4,4,44,3,2,1,1,1,0,0,1,0,0,0,0,0,1
+1,18,2,32,1,3,2,2,1,24,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,48,0,71,1,3,3,4,4,53,3,2,2,1,1,0,0,1,0,0,0,0,0,1
+4,24,2,35,2,4,2,4,3,23,3,1,1,1,1,0,1,1,0,0,1,0,0,1
+2,18,2,11,1,3,2,4,1,26,3,1,2,1,1,0,0,0,0,0,1,0,1,0
+2,26,2,80,1,2,3,3,3,30,3,2,1,1,1,0,1,1,0,0,1,0,0,1
+4,15,4,15,2,3,2,3,3,31,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,4,4,15,1,4,3,1,1,42,3,2,2,1,1,0,0,1,0,0,1,0,1,0
+1,36,2,23,1,3,1,4,3,31,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,6,2,7,1,2,3,4,1,41,3,1,2,2,1,1,0,1,0,0,1,0,1,0
+2,36,2,23,1,4,3,1,3,32,3,2,2,1,1,0,0,1,0,0,1,0,0,1
+2,15,2,26,2,3,2,4,3,28,3,2,1,2,1,1,0,1,0,1,0,0,0,1
+4,12,3,15,1,3,4,4,1,41,3,1,1,1,1,0,1,1,0,1,0,0,0,1
+4,24,2,13,2,4,4,3,2,26,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,24,2,31,5,2,3,2,3,25,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+3,21,4,23,1,2,1,1,3,33,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,6,2,14,5,1,2,3,2,75,3,1,1,2,1,1,0,1,0,0,1,0,0,0
+2,18,4,36,1,5,2,4,2,37,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,48,2,78,1,5,3,4,4,42,1,1,1,1,1,1,0,1,0,0,0,0,0,0
+3,18,2,30,1,2,2,1,2,45,2,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,12,2,15,1,2,4,1,1,23,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+4,24,3,20,1,5,3,4,4,60,3,2,1,2,1,1,0,1,0,0,0,0,0,1
+1,30,2,64,5,5,3,4,2,31,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+3,18,2,29,1,3,3,1,1,34,3,1,2,1,1,0,0,1,0,0,1,0,1,0
+4,12,4,13,1,5,3,4,1,61,3,2,1,1,1,1,0,1,0,0,1,0,1,0
+1,24,3,13,1,1,3,2,1,43,3,2,2,1,1,1,0,1,0,0,0,0,0,1
+4,24,4,20,1,3,2,4,3,37,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+4,24,2,16,1,4,3,1,3,32,1,1,2,1,1,0,0,1,0,0,1,0,0,1
+1,12,1,6,1,3,2,4,1,24,1,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,48,4,89,5,4,3,1,4,35,3,2,1,2,1,0,1,1,0,0,0,0,0,1
+4,12,4,10,5,4,2,4,1,23,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,6,1,18,3,5,3,4,2,45,1,1,2,1,1,0,0,1,0,0,1,0,1,0
+1,48,2,70,1,4,4,1,1,34,3,2,1,2,1,0,0,0,0,0,1,0,0,1
+2,12,4,20,2,2,3,1,3,27,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+2,9,2,12,1,4,2,4,2,67,3,2,1,2,1,0,0,1,0,0,1,0,0,0
+2,12,2,13,1,2,3,1,3,22,2,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,18,0,23,2,2,2,3,3,28,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,21,0,50,5,3,2,4,2,29,1,2,1,2,1,1,0,1,0,0,1,0,0,1
+1,24,1,36,1,4,3,4,3,27,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,18,4,19,1,2,3,2,1,31,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+1,24,2,30,5,5,3,4,4,49,1,1,2,2,1,0,1,1,0,0,0,0,0,1
+1,24,1,15,1,4,3,4,3,24,1,1,1,1,1,0,0,0,0,1,0,0,1,0
+3,6,3,7,1,2,2,1,2,29,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,36,2,124,5,3,3,4,4,37,3,1,1,2,1,1,0,1,0,0,0,0,0,1
+2,24,3,47,5,3,3,2,2,37,1,2,1,2,1,0,0,1,0,0,1,0,0,0
+2,24,3,16,2,4,2,2,2,23,3,2,1,2,1,0,0,1,0,1,0,0,0,1
+1,12,2,14,1,4,1,3,3,36,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,24,4,26,4,5,3,2,3,34,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,48,2,40,5,4,3,1,3,41,3,2,2,2,1,0,0,1,0,0,1,0,0,1
+1,48,2,68,1,3,2,2,3,31,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,24,2,32,1,2,2,4,1,23,3,1,1,2,1,0,0,1,0,1,0,0,1,0
+4,30,4,60,1,4,3,2,3,38,3,1,1,1,1,0,0,0,1,0,1,0,0,1
+4,24,2,54,5,1,2,4,2,26,3,1,1,2,1,0,1,1,0,1,0,0,0,0
+1,15,2,8,1,3,2,4,2,22,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,9,2,11,1,5,3,4,3,27,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+4,15,4,28,1,4,2,3,3,24,1,2,1,1,1,0,0,0,1,0,1,0,0,1
+2,12,2,29,1,4,2,1,1,27,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,4,19,5,3,2,2,3,33,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,36,4,28,1,2,1,4,3,27,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,24,2,9,1,2,4,3,3,27,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+2,18,4,11,1,5,3,3,1,30,1,2,1,1,1,1,0,0,0,0,1,0,0,1
+2,12,4,31,1,2,3,3,1,49,1,2,2,1,1,1,0,1,0,0,1,0,1,0
+4,9,2,14,1,3,2,2,1,26,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+2,36,2,24,1,2,3,1,4,33,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+4,12,2,21,5,5,2,4,4,52,3,1,1,2,1,1,0,1,0,0,0,0,0,0
+1,18,2,20,1,3,2,4,1,20,1,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,9,4,28,1,3,3,2,1,36,3,2,2,1,1,1,0,1,0,1,0,0,0,1
+1,12,2,13,1,3,3,1,2,21,3,1,1,1,1,0,0,0,0,0,1,0,1,0
+1,18,2,12,1,3,4,3,1,47,3,1,1,2,1,0,0,1,0,0,1,0,1,0
+1,12,4,22,1,5,3,3,2,60,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,4,4,1,4,2,3,1,58,3,4,1,2,1,0,0,1,0,0,1,0,1,0
+2,24,3,20,5,3,2,4,3,42,3,2,1,2,1,1,0,1,0,1,0,0,0,1
+4,21,2,16,4,5,2,4,1,36,1,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,24,2,27,1,3,2,4,2,20,3,1,1,2,1,1,0,1,0,1,0,0,1,0
+1,24,1,14,5,5,3,3,3,40,2,1,1,2,1,0,0,1,0,0,1,0,0,0
+2,6,1,9,2,2,2,1,2,32,2,1,1,1,1,1,0,1,0,0,1,0,1,0
+1,24,2,14,1,4,2,4,3,23,3,2,1,1,1,1,0,1,0,1,0,0,0,1
+2,24,0,42,1,3,3,4,1,36,3,3,1,2,1,0,0,1,0,0,1,0,1,0
+4,18,4,28,1,4,3,2,2,31,1,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,24,3,39,1,3,3,2,4,32,3,1,1,1,1,0,0,1,0,0,0,0,0,1
+2,7,2,23,1,2,2,1,1,45,3,1,1,1,1,0,0,0,0,0,1,0,0,1
+2,9,2,9,1,3,2,1,2,30,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,24,1,18,1,4,2,4,4,34,1,1,1,1,1,0,0,1,0,0,0,0,1,0
+4,36,2,33,1,3,2,2,3,28,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+3,10,2,13,1,2,2,2,2,23,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,1,28,3,3,3,4,1,22,2,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,24,4,45,1,3,3,2,1,74,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+2,36,2,27,2,3,2,4,4,50,3,1,1,1,1,0,0,0,1,0,0,0,0,1
+4,18,2,21,1,2,3,1,1,33,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,15,2,13,5,5,3,4,4,45,1,1,2,1,1,0,1,1,0,0,0,0,0,1
+1,12,2,7,2,1,2,3,2,22,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+3,10,2,12,2,5,2,4,4,48,3,1,2,1,1,1,0,1,0,0,0,0,1,0
+1,21,2,34,4,2,2,2,3,29,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,1,36,1,3,2,4,3,22,1,1,1,1,2,0,1,0,0,1,0,0,0,1
+4,18,3,18,1,4,2,1,1,22,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,48,0,122,5,3,3,2,3,48,1,1,1,2,1,0,0,1,0,0,1,0,0,0
+2,60,3,92,5,3,3,2,4,27,3,1,1,1,1,0,0,1,0,0,0,0,0,0
+1,6,4,37,1,3,3,3,1,37,3,3,2,1,1,1,0,1,0,1,0,0,0,1
+2,30,2,34,2,3,2,4,3,21,3,1,1,1,1,0,0,0,1,1,0,0,0,1
+4,12,2,6,1,3,1,2,1,49,3,1,1,1,1,1,0,1,0,0,1,0,1,0
+2,21,4,37,1,4,3,3,2,27,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,18,4,15,1,3,3,2,2,32,1,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,48,2,39,5,3,1,2,1,38,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,2,19,1,2,2,1,3,22,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,18,2,26,1,3,3,4,4,65,3,2,1,1,1,0,0,1,0,0,0,0,0,1
+4,15,2,20,5,5,3,2,3,35,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+3,6,2,21,1,3,3,2,1,41,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,9,1,14,2,4,3,3,4,29,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,42,4,40,3,3,3,4,1,36,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,9,2,38,5,5,3,4,1,64,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+1,24,2,37,1,3,2,4,3,28,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,18,1,16,1,3,3,3,3,44,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,15,2,14,5,2,3,1,2,23,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,9,2,20,1,2,2,2,3,19,3,2,1,1,1,0,0,0,1,1,0,0,0,1
+2,24,2,14,1,2,2,4,3,25,3,1,1,2,1,1,0,1,0,0,1,0,1,0
+4,12,2,14,1,5,3,4,2,47,1,3,2,2,1,0,0,1,0,0,1,0,0,1
+4,24,2,14,3,4,2,1,3,28,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,60,3,157,1,4,3,4,3,21,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,12,2,15,1,2,2,3,3,34,3,1,2,1,1,0,0,1,0,0,1,0,0,1
+1,42,3,44,1,4,3,2,2,26,1,2,2,2,1,0,0,1,0,0,1,0,0,1
+1,18,2,8,1,1,2,1,1,27,3,1,1,1,1,0,0,1,0,0,1,1,0,0
+2,15,2,13,1,5,3,4,3,38,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+4,15,2,46,2,3,3,2,2,40,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+4,24,4,19,1,4,4,2,3,33,3,2,1,2,1,0,0,0,0,0,1,0,0,1
+1,18,4,19,1,4,4,1,2,32,3,2,1,2,1,0,0,1,0,0,1,0,0,0
+4,36,3,80,5,2,3,4,3,27,3,2,1,2,1,0,0,1,0,1,0,0,0,1
+1,30,0,46,1,3,1,2,1,32,3,2,1,1,1,0,0,0,0,0,1,0,0,1
+4,12,2,14,3,3,2,2,2,26,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+3,24,2,9,1,4,3,3,4,38,1,1,2,1,1,1,0,1,0,0,0,0,0,1
+1,12,2,7,1,3,3,4,3,40,3,1,2,1,1,0,0,1,0,1,0,0,1,0
+1,48,2,75,1,4,3,1,4,50,3,1,1,2,1,0,0,1,0,0,0,0,0,0
+2,12,2,19,1,3,3,2,2,37,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+1,24,2,23,1,5,3,1,1,45,3,1,1,1,1,1,0,0,1,0,1,0,0,1
+2,36,3,81,2,5,3,4,3,42,3,4,1,2,1,1,0,1,0,0,1,0,0,0
+4,24,4,23,1,4,3,3,3,35,3,2,1,2,1,0,1,1,0,0,1,0,0,1
+1,14,2,40,1,1,3,4,4,22,3,1,1,1,1,1,0,1,0,0,0,0,0,1
+2,12,2,9,1,5,3,4,3,41,1,1,2,1,1,1,0,1,0,0,1,0,1,0
+4,48,2,102,5,4,3,3,3,37,2,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,30,0,42,1,3,2,1,3,28,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,18,4,64,1,5,3,1,4,41,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+3,12,2,13,1,3,4,4,1,23,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,12,2,9,5,3,4,2,3,23,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,21,2,22,1,5,3,2,1,50,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,6,3,10,1,1,3,1,2,35,2,2,1,2,1,0,0,1,0,0,1,0,0,0
+3,6,4,10,1,3,2,4,2,50,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,24,4,63,1,1,3,2,4,27,1,2,1,2,1,0,0,0,1,0,1,0,0,0
+2,30,1,35,4,3,3,2,3,34,2,1,2,2,1,0,0,1,0,0,1,0,0,1
+4,48,1,36,1,3,2,1,1,27,2,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,4,48,1,5,3,4,2,43,3,2,1,2,1,1,0,0,1,1,0,0,0,1
+3,30,4,30,1,5,3,4,2,47,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,4,41,2,3,3,3,2,27,3,2,1,2,1,0,0,1,0,0,1,0,1,0
+4,36,2,57,2,4,3,2,3,31,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,60,2,104,1,5,3,4,2,42,3,1,1,2,1,1,0,1,0,0,1,0,0,0
+4,6,4,21,3,3,4,2,3,24,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,21,3,26,3,2,3,2,1,41,1,1,2,1,1,0,0,1,0,0,1,0,1,0
+4,30,4,45,1,4,2,4,3,26,3,1,1,2,1,0,0,1,0,1,0,0,0,0
+4,24,4,52,1,5,3,4,3,33,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,72,2,56,2,3,4,2,3,24,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,2,24,1,5,3,4,1,64,1,1,1,1,1,0,0,1,0,1,0,0,1,0
+4,18,2,15,1,2,2,1,1,26,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,6,2,15,1,2,2,2,4,56,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,2,23,5,3,3,4,4,37,3,1,1,2,1,0,0,1,0,0,0,0,0,1
+4,15,3,15,1,3,4,3,1,33,1,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,4,51,1,2,4,3,4,47,3,3,1,2,1,0,0,1,0,0,0,0,0,1
+2,36,3,99,2,4,3,3,2,31,3,2,2,2,1,0,0,1,0,0,1,0,1,0
+4,60,2,65,5,3,3,4,4,34,3,1,2,2,1,1,0,1,0,0,0,0,0,1
+3,10,4,13,5,4,3,2,2,27,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,36,3,29,2,5,3,3,4,30,3,1,1,1,1,1,0,1,0,0,0,0,0,1
+4,9,2,28,2,5,3,4,3,35,3,1,1,2,1,0,0,0,1,0,1,0,0,1
+1,12,2,37,4,3,3,3,2,31,3,1,2,1,1,1,0,1,0,0,1,0,0,1
+1,15,4,10,1,3,1,3,2,25,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,15,2,26,2,3,2,2,1,25,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,24,2,29,2,2,3,1,3,29,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,6,4,47,5,2,3,3,1,44,3,2,2,1,1,1,0,1,0,0,1,0,1,0
+4,24,2,23,1,4,3,2,3,28,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,6,2,12,3,3,3,4,2,50,3,1,1,1,1,0,1,1,0,1,0,0,0,1
+2,12,2,11,1,4,3,3,1,29,3,2,1,1,2,0,0,0,0,0,1,0,0,1
+4,12,4,9,1,1,2,2,2,38,3,1,1,1,1,1,0,1,0,0,1,1,0,0
+4,18,4,18,1,3,3,2,3,24,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+3,15,2,19,1,5,3,4,3,40,3,1,1,2,1,0,0,1,0,1,0,0,0,0
+4,12,2,11,3,3,2,4,3,29,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+1,48,4,63,1,5,3,4,4,46,3,2,1,2,1,0,1,1,0,0,0,0,0,1
+3,24,2,14,2,5,2,2,4,47,3,1,1,2,1,0,0,1,0,0,0,0,0,1
+2,30,3,25,2,5,3,2,2,41,2,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,27,2,25,1,2,2,1,2,32,3,1,2,2,1,0,0,1,0,0,1,0,0,1
+4,15,2,53,3,5,2,4,4,35,3,1,1,1,1,1,0,1,0,0,0,0,0,1
+2,48,2,66,2,4,3,2,2,24,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+2,12,0,30,1,2,2,3,2,25,3,2,1,1,1,0,0,1,0,1,0,0,0,1
+2,9,2,12,1,5,2,4,1,25,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,9,2,21,1,3,3,2,1,37,3,1,2,1,1,0,0,1,0,0,1,0,1,0
+4,18,4,6,3,5,3,3,2,32,1,2,1,2,1,0,0,1,0,0,1,0,0,0
+1,6,1,12,1,5,2,4,4,35,3,1,1,1,1,0,0,1,0,0,0,0,0,1
+4,21,2,25,5,5,3,4,1,46,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+1,9,4,11,1,3,3,4,1,25,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+2,60,2,140,1,4,3,2,4,27,3,1,1,2,1,1,0,1,0,0,1,0,0,0
+4,30,4,76,5,5,3,4,3,63,3,2,1,1,1,0,1,1,0,0,1,0,0,1
+4,30,4,31,5,5,3,2,3,40,3,2,2,2,1,0,0,1,0,0,1,0,0,1
+4,18,2,15,1,3,3,2,4,32,3,1,1,2,1,0,0,1,0,0,0,0,0,0
+3,24,4,31,5,3,3,2,3,31,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,20,0,61,2,5,4,4,3,31,1,2,1,2,1,0,1,1,0,0,1,0,0,1
+3,9,0,13,1,2,3,2,3,34,3,2,1,2,1,0,0,1,0,0,1,0,0,0
+2,6,1,4,4,2,2,2,2,24,1,1,2,1,1,0,0,1,0,1,0,0,0,1
+1,12,2,12,1,3,2,2,1,24,3,1,1,1,1,1,0,1,0,0,1,0,1,0
+2,9,2,8,3,3,2,3,1,66,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,27,2,26,1,3,2,3,1,21,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+4,6,4,2,4,3,2,2,1,41,1,2,1,1,1,1,0,1,0,0,1,0,1,0
+4,15,4,13,3,3,4,2,2,47,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+1,18,2,19,1,3,2,4,3,25,1,2,1,1,1,0,0,1,0,1,0,0,0,1
+2,48,1,64,1,5,2,3,4,59,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+3,24,4,13,4,3,1,4,1,36,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,24,3,64,1,2,3,2,3,33,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,2,20,1,3,3,4,1,21,3,1,2,1,1,0,0,1,0,1,0,0,1,0
+2,8,2,8,1,4,2,2,1,44,3,1,1,1,1,0,0,0,0,0,1,0,1,0
+4,24,2,26,4,3,2,4,3,28,3,1,1,2,1,0,1,1,0,1,0,0,0,1
+4,4,4,34,1,4,2,1,1,37,3,1,2,1,1,1,0,1,0,0,1,0,0,1
+2,36,1,40,5,2,2,2,4,29,1,1,1,1,1,0,0,1,0,0,1,1,0,0
+2,24,2,116,1,3,2,4,3,23,3,2,1,1,1,0,1,1,0,1,0,0,0,0
+1,18,2,44,2,3,3,4,3,35,3,1,2,2,1,1,0,1,0,0,1,0,1,0
+4,6,4,68,1,4,3,3,4,45,3,2,2,2,1,1,0,1,0,0,1,0,0,0
+2,30,0,43,2,3,2,4,3,26,3,2,1,1,1,0,0,1,0,1,0,0,1,0
+1,24,1,23,2,4,3,3,3,32,1,1,1,1,1,1,0,1,0,0,1,0,0,1
+2,10,1,10,1,3,3,4,1,23,2,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,21,2,32,5,5,3,3,2,41,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,24,1,25,3,3,3,4,1,22,2,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,39,4,142,5,4,3,4,2,30,3,2,1,2,1,0,0,1,0,0,1,0,0,0
+1,13,4,18,1,2,3,1,2,28,1,2,1,1,1,0,0,1,0,0,1,0,1,0
+1,15,2,25,1,1,2,4,3,23,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+1,12,2,13,1,2,2,1,1,37,3,1,1,1,1,1,0,1,0,0,1,0,1,0
+4,21,2,52,5,3,3,3,3,26,3,1,1,1,1,0,1,1,0,0,1,0,0,1
+4,15,2,30,1,4,3,2,3,33,3,1,1,1,1,0,1,1,0,0,1,0,0,1
+1,6,2,4,1,5,2,1,2,49,1,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,18,2,10,1,2,2,2,3,23,3,1,1,1,1,1,0,1,0,0,1,0,1,0
+2,12,2,8,2,4,2,4,1,23,3,1,1,1,1,0,0,1,0,1,0,0,1,0
+4,30,4,58,1,4,2,2,3,25,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,3,16,4,5,3,4,4,55,3,2,2,1,1,0,0,1,0,0,0,0,0,1
+1,24,2,13,5,4,2,4,4,32,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+3,6,4,13,1,3,3,1,1,74,3,3,2,1,2,1,0,1,0,0,1,1,0,0
+3,15,4,13,5,3,3,4,4,39,3,2,1,2,1,0,0,1,0,0,0,0,0,1
+4,24,2,14,1,3,3,2,1,31,3,1,1,2,1,1,0,0,0,0,1,0,0,1
+1,12,4,7,1,5,3,3,2,35,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,15,4,50,5,5,2,4,3,59,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+1,18,4,21,1,3,2,4,1,24,3,2,1,1,1,0,0,1,0,1,0,0,0,1
+1,12,2,22,1,3,3,3,2,24,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,21,4,127,5,5,3,4,4,30,3,1,1,2,1,1,0,1,0,0,0,0,0,0
+4,24,4,25,2,4,4,3,2,27,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+2,12,2,12,1,5,4,3,1,40,1,2,1,1,1,0,0,0,0,0,1,0,1,0
+1,30,2,31,1,2,1,4,2,31,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+4,10,2,29,5,2,2,4,1,31,3,1,1,1,1,0,1,1,0,1,0,0,0,1
+2,12,4,36,1,5,3,4,3,28,3,3,1,2,1,0,0,1,0,1,0,0,0,1
+4,12,4,17,1,5,3,4,1,63,3,2,1,2,1,0,0,1,0,0,1,0,1,0
+1,24,2,28,5,5,2,4,1,26,3,1,1,1,1,0,1,1,0,1,0,0,0,1
+1,36,4,81,1,3,2,2,4,25,3,2,1,2,1,0,0,1,0,0,1,0,0,0
+4,21,4,33,1,5,3,4,3,36,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+4,24,4,22,2,5,3,4,2,52,1,2,1,1,1,0,0,1,0,0,1,0,0,1
+3,12,4,15,3,1,3,4,4,66,1,3,1,1,1,1,0,1,0,0,0,1,0,0
+1,24,2,14,5,3,2,4,1,25,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+4,36,4,35,1,4,3,4,3,37,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+1,18,2,35,1,4,2,1,1,25,3,1,1,1,1,0,0,0,0,0,1,0,0,1
+4,36,4,57,4,5,3,2,3,38,3,2,1,2,1,0,1,1,0,0,1,0,0,0
+2,18,2,39,1,1,2,4,3,67,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,39,4,49,1,4,3,2,1,25,3,2,1,1,1,0,0,0,0,0,1,0,0,1
+4,24,4,19,4,5,3,4,1,60,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+2,12,0,14,1,3,3,2,1,31,3,1,1,2,1,0,0,1,0,0,1,0,1,0
+2,12,2,8,2,2,2,2,2,23,1,1,1,1,1,1,0,1,0,0,1,0,1,0
+2,20,2,65,5,1,1,4,1,60,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+2,18,2,19,4,3,3,2,2,35,3,1,1,2,1,0,0,1,0,0,1,0,1,0
+4,22,2,27,3,5,3,4,3,40,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,48,4,28,5,5,3,3,3,38,3,2,2,2,1,0,1,1,0,0,1,0,0,1
+2,48,3,62,1,5,3,4,4,50,3,1,1,1,1,0,0,1,0,0,0,0,0,1
+1,40,4,60,1,3,3,3,4,27,1,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,21,2,12,1,5,2,4,2,39,3,1,2,1,1,0,0,1,0,0,1,0,0,1
+4,24,2,63,5,5,3,4,3,41,3,1,2,2,1,0,1,1,0,0,1,0,0,0
+4,6,4,12,5,3,4,2,2,27,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+3,24,2,29,1,5,1,4,4,51,3,1,1,1,1,0,0,1,0,0,0,0,0,1
+4,24,2,31,3,5,3,3,4,32,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+4,9,2,23,2,2,2,4,2,22,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,18,2,75,5,5,3,4,2,51,3,1,2,2,1,0,1,1,0,0,0,0,0,1
+4,12,4,13,1,2,2,4,2,22,3,2,1,1,1,0,0,1,0,1,0,0,1,0
+4,24,3,7,5,5,4,4,3,54,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+2,9,2,15,5,2,3,2,1,35,3,1,1,1,1,1,0,1,0,0,1,1,0,0
+4,24,4,16,1,5,3,4,4,54,3,2,2,1,1,0,0,1,0,0,0,0,0,1
+2,18,4,18,1,5,2,4,1,48,1,2,1,2,1,0,0,0,0,1,0,0,1,0
+1,20,4,43,1,5,2,4,2,24,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,4,10,5,5,3,4,3,35,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,12,2,75,5,1,2,2,1,24,3,1,1,1,1,1,0,1,0,1,0,1,0,0
+1,36,2,93,1,4,3,1,3,24,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+2,6,2,6,1,2,4,3,1,26,3,1,1,1,2,0,0,1,0,0,1,0,1,0
+4,12,4,9,5,5,3,4,1,65,3,4,1,1,1,0,0,1,0,0,1,0,0,1
+2,42,1,93,1,1,3,2,4,55,1,1,1,2,1,0,1,1,0,0,0,0,0,0
+2,15,0,18,1,2,2,1,1,26,3,2,1,1,1,1,0,1,0,1,0,1,0,0
+2,8,2,9,1,2,4,2,1,26,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+2,6,2,5,1,4,4,3,1,28,1,1,1,1,1,0,0,0,0,0,1,0,1,0
+1,36,4,96,1,4,3,4,3,24,3,2,1,2,1,0,1,1,0,0,1,0,0,1
+1,48,2,31,1,3,3,4,3,54,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,48,2,39,1,4,3,4,4,46,3,1,2,1,1,1,0,1,0,0,0,0,0,1
+2,36,3,74,1,3,2,2,2,54,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+4,6,2,13,3,3,1,4,1,62,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,6,4,16,1,4,2,2,3,24,3,2,1,2,1,0,0,1,0,1,0,0,0,1
+1,36,2,159,1,1,1,3,3,43,3,1,1,1,1,0,0,0,1,0,1,0,0,0
+1,18,2,13,1,3,4,3,1,26,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,2,11,1,3,4,2,1,27,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+3,12,2,30,1,3,4,1,3,24,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,36,2,27,1,5,3,2,2,41,1,1,2,1,1,0,0,1,0,0,1,0,0,1
+1,8,4,7,1,5,3,4,1,47,3,2,1,1,1,1,0,1,0,0,1,0,1,0
+4,18,4,38,1,2,1,2,3,35,3,2,1,2,1,0,0,1,0,0,1,0,0,0
+1,21,4,16,1,5,4,3,3,30,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+1,18,4,40,1,5,2,4,1,33,1,3,1,2,1,1,0,1,0,1,0,0,0,1
+4,18,0,42,1,3,3,2,3,36,2,2,2,1,1,0,0,1,0,0,1,0,0,1
+1,36,2,83,5,5,3,4,4,47,3,1,1,1,1,0,1,1,0,0,0,0,0,1
+2,48,3,67,5,3,3,4,4,38,3,1,2,2,1,0,0,1,0,0,0,0,0,1
+4,24,3,24,3,3,3,2,3,44,3,2,2,2,1,0,0,1,0,0,1,0,0,1
+1,18,2,12,1,2,2,3,3,23,3,1,1,2,1,1,0,1,0,1,0,0,0,1
+1,45,0,118,1,5,3,4,3,29,3,2,1,1,1,0,0,1,0,1,0,0,0,1
+2,24,2,51,5,5,2,4,3,42,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+3,15,2,23,1,2,2,3,1,25,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+1,12,0,11,1,3,3,4,3,48,1,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,12,2,9,5,3,2,2,3,21,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,4,2,6,1,2,2,3,1,23,3,1,2,1,1,0,0,1,0,1,0,0,1,0
+1,24,4,30,1,5,3,4,2,63,3,2,1,2,1,0,1,1,0,0,1,0,0,1
+4,24,4,26,1,5,4,3,1,46,3,2,1,1,1,0,0,0,1,0,1,0,0,1
+1,36,2,52,1,4,3,2,2,29,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,21,3,30,1,3,3,2,1,28,2,2,1,1,1,0,1,1,0,0,1,0,1,0
+4,18,2,19,1,2,2,4,1,23,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,1,16,1,4,3,4,3,50,1,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,18,2,34,1,5,3,4,2,47,1,3,2,2,1,0,0,1,0,0,1,0,0,1
+2,21,2,40,5,4,3,3,3,35,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,18,2,68,5,3,3,4,3,68,3,2,1,1,1,1,0,1,0,1,0,0,0,1
+4,24,2,12,1,2,4,2,1,28,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+1,9,2,14,1,4,3,4,1,59,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,2,7,1,5,3,4,1,57,2,1,1,1,1,0,0,1,0,0,1,0,1,0
+1,20,4,22,1,3,4,2,2,33,1,2,1,1,2,1,0,0,0,1,0,0,0,1
+4,24,4,40,5,4,3,4,2,43,3,2,1,2,1,0,1,1,0,0,1,0,0,1
+4,15,4,15,1,3,3,4,4,35,3,2,1,2,1,0,0,1,0,0,0,0,0,1
+1,18,1,14,1,4,3,4,4,32,3,2,2,1,1,1,0,1,0,0,0,0,1,0
+4,36,3,109,1,5,3,2,3,45,3,2,2,2,1,1,0,1,0,0,1,0,0,1
+4,24,2,15,2,2,4,3,1,33,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+4,10,2,9,5,4,2,3,2,40,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,15,4,33,1,3,3,2,4,28,3,1,1,2,1,0,0,1,0,0,0,0,0,1
+1,15,2,40,1,3,2,2,2,29,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+4,9,2,36,2,3,3,2,1,26,3,1,2,1,2,1,0,0,0,1,0,0,0,1
+4,24,4,58,4,3,3,2,1,27,3,2,1,1,1,0,1,1,0,0,1,0,0,1
+4,18,3,22,1,3,4,2,3,28,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,24,2,24,1,2,2,4,1,35,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,27,4,45,4,2,3,2,1,32,2,2,2,2,1,0,0,1,0,0,1,0,1,0
+4,10,2,22,1,3,3,2,1,25,1,1,1,1,1,0,0,1,0,1,0,0,1,0
+4,15,2,22,3,3,2,4,3,20,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,18,2,24,1,2,2,1,3,27,2,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,12,4,33,1,5,3,4,2,42,2,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,36,2,74,5,5,3,2,2,37,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,2,7,1,5,2,4,2,24,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+4,36,3,77,3,4,2,4,3,40,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+3,6,4,13,1,5,3,4,1,46,3,2,2,1,2,1,0,1,0,0,1,0,0,1
+1,24,4,14,2,4,3,1,1,26,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,15,2,9,5,2,2,1,1,24,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,12,2,36,1,3,3,2,2,29,3,1,2,1,1,0,0,0,1,0,1,0,1,0
+2,11,4,13,4,3,2,4,3,40,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+1,18,1,19,1,2,3,4,4,36,1,1,1,2,1,0,0,0,1,0,0,0,0,0
+4,36,2,36,1,5,3,2,3,28,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,9,2,14,1,2,3,2,4,27,3,1,1,2,1,1,0,1,0,0,0,0,0,0
+4,30,4,67,5,4,3,3,2,36,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,2,78,1,4,3,3,3,38,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+4,24,2,93,5,3,1,4,4,48,3,1,1,2,1,0,1,1,0,0,0,0,0,1
+2,30,4,22,5,5,3,4,1,36,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,18,4,11,1,1,2,4,3,65,3,2,1,1,1,0,0,1,0,0,1,1,0,0
+2,24,2,41,1,4,1,3,3,43,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,12,2,8,1,2,2,4,2,53,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,24,4,28,5,4,3,3,4,34,3,2,2,2,1,0,0,1,0,0,1,0,0,1
+2,48,2,157,1,3,3,2,3,23,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,36,4,66,1,5,3,4,3,34,3,2,1,2,1,1,0,1,0,0,1,0,0,0
+4,28,1,78,5,2,3,4,1,40,1,2,2,2,1,0,1,0,0,1,0,0,0,1
+1,27,4,24,1,5,3,4,3,43,2,4,2,2,1,0,0,1,0,0,1,0,0,0
+4,15,4,18,1,5,3,4,3,46,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+1,12,4,22,1,3,3,4,2,38,1,2,1,1,2,1,0,1,0,0,1,0,1,0
+2,36,4,58,1,3,3,4,3,34,3,2,1,2,1,0,1,1,0,0,1,0,0,1
+4,18,4,12,5,3,3,3,2,29,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+4,36,3,89,5,4,3,2,3,31,2,1,2,2,1,0,1,1,0,0,1,0,0,0
+1,21,2,26,1,2,2,4,2,28,3,1,1,2,1,0,0,1,0,1,0,0,0,0
+4,12,4,16,4,4,2,2,2,35,3,1,1,1,2,0,0,1,0,0,1,0,0,1
+4,15,2,22,5,4,2,4,1,33,1,1,1,1,1,0,0,1,0,1,0,0,1,0
+1,18,2,42,1,3,3,3,3,42,3,1,1,1,1,0,0,0,1,0,1,0,0,1
+1,16,4,26,1,5,3,4,2,43,1,1,1,2,1,1,0,0,0,1,0,0,0,1
+4,20,4,35,5,2,1,4,1,44,3,2,1,2,1,1,0,1,0,0,1,0,0,1
+4,36,4,105,5,5,3,4,4,42,3,2,1,1,1,0,1,1,0,0,0,0,0,1
+4,15,2,14,5,3,4,2,1,40,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+4,24,2,13,1,5,3,1,1,36,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+1,12,2,11,1,3,3,2,1,20,3,1,2,2,1,0,0,1,0,1,0,0,0,0
+1,21,2,38,5,4,3,2,1,24,3,1,1,1,2,1,0,0,1,0,1,0,1,0
+2,36,2,37,5,3,4,2,3,27,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,15,3,36,1,2,2,2,2,46,3,2,1,1,1,0,1,1,0,0,1,0,1,0
+2,9,2,32,5,3,2,2,1,33,3,1,1,1,1,1,0,1,0,0,1,0,1,0
+4,36,3,45,1,3,2,4,1,34,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,24,4,47,1,2,2,4,3,25,1,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,30,2,30,5,5,2,4,3,25,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,11,2,21,4,5,1,2,1,28,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,24,1,32,1,3,3,2,2,31,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+2,48,0,184,1,3,2,2,2,32,1,1,1,2,2,0,0,1,0,0,1,0,0,0
+4,10,2,28,2,3,3,2,1,32,3,1,2,1,1,0,1,0,1,0,1,0,0,1
+1,6,2,149,1,5,3,4,4,68,1,1,1,2,1,1,0,1,0,0,1,0,0,0
+1,24,2,24,2,1,1,1,2,33,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,2,33,1,5,3,2,2,39,3,1,1,2,1,0,0,1,0,1,0,0,0,0
+4,18,4,18,1,3,2,2,4,28,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,48,3,127,3,4,3,1,3,37,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+1,9,2,14,1,2,2,4,2,22,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+2,12,2,20,1,4,3,4,2,30,3,1,2,2,1,1,0,1,0,1,0,0,0,1
+1,24,1,69,1,2,1,1,2,55,1,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,12,1,7,1,2,3,2,3,46,1,2,1,2,1,1,0,1,0,0,1,0,0,1
+1,18,4,10,1,2,2,4,2,21,3,1,1,1,1,0,0,1,0,1,0,0,0,1
+1,48,2,103,1,4,3,4,4,39,2,3,2,2,1,0,1,1,0,0,0,0,0,1
+4,30,2,19,5,5,3,4,3,58,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+1,12,3,13,1,3,3,2,1,43,3,2,2,1,1,1,0,1,0,0,1,0,1,0
+1,24,2,17,1,2,3,1,2,24,3,1,1,1,2,0,0,0,1,0,1,0,1,0
+2,9,2,17,1,2,2,2,3,22,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,9,4,12,1,3,3,1,1,30,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,12,4,5,3,5,3,4,2,42,3,2,2,2,1,0,0,1,0,0,1,0,0,1
+1,12,2,15,1,3,2,1,3,23,1,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,30,3,19,2,2,3,3,4,30,2,2,1,1,1,0,0,1,0,0,1,0,0,0
+3,9,2,7,1,3,2,2,1,28,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,6,2,21,1,2,4,3,3,30,3,1,1,2,1,0,0,1,0,1,0,0,0,0
+2,60,2,63,1,3,3,4,4,42,3,1,1,1,1,0,0,1,0,0,0,0,0,1
+4,24,4,68,5,3,3,4,2,46,3,2,2,2,1,0,1,1,0,0,1,0,0,0
+4,12,2,35,5,2,3,3,2,45,3,1,2,2,1,1,0,1,0,0,1,0,0,0
+4,10,2,15,1,3,3,2,1,31,3,1,2,1,2,1,0,1,0,0,1,0,1,0
+4,24,2,9,5,4,3,2,3,31,2,1,1,2,1,0,0,1,0,0,1,0,0,1
+4,4,4,15,1,4,3,1,1,42,3,3,2,1,1,1,0,1,0,0,1,0,1,0
+1,15,2,18,1,2,2,1,2,46,3,1,1,1,1,0,0,0,0,1,0,0,0,1
+2,48,0,84,3,2,2,1,3,30,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+1,24,1,33,3,2,3,4,4,30,3,1,2,2,1,0,0,1,0,0,0,0,0,1
+4,12,2,29,5,1,3,4,4,38,3,1,1,2,1,1,0,1,0,0,1,0,0,0
+4,18,2,15,1,2,4,1,2,43,3,1,2,1,1,0,0,0,1,0,1,0,1,0
+4,24,2,36,2,5,3,4,3,31,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+2,18,4,36,1,1,4,3,3,40,3,3,2,2,1,0,0,1,0,0,1,1,0,0
+1,36,3,21,1,4,3,1,3,24,3,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,24,2,41,3,2,2,4,3,28,3,1,1,1,1,0,1,1,0,1,0,0,0,1
+4,36,2,110,1,1,2,2,3,26,3,2,1,2,1,0,0,1,0,0,1,0,0,0
+1,12,2,19,1,3,2,4,2,29,3,1,1,2,1,1,0,0,0,0,1,0,0,1
+1,24,4,12,4,5,2,4,2,57,3,2,1,2,1,0,0,1,0,1,0,0,0,0
+3,30,4,37,5,5,3,4,2,49,2,2,1,1,1,0,0,1,0,0,1,0,1,0
+2,9,4,12,1,5,3,4,1,37,3,3,1,1,1,0,0,1,0,0,1,0,1,0
+1,28,2,40,1,3,3,2,3,45,3,1,1,1,1,1,0,1,0,0,1,0,1,0
+2,24,2,31,2,5,3,4,4,30,3,1,1,1,1,0,0,1,0,0,0,0,0,1
+4,6,4,17,1,5,4,2,1,30,3,2,1,1,1,0,0,1,0,1,0,0,0,1
+2,21,3,24,1,3,1,4,2,47,3,2,1,1,1,1,0,1,0,0,1,0,0,1
+4,15,2,36,5,3,3,2,4,29,3,1,1,1,1,1,0,1,0,0,1,0,0,1
+4,24,2,24,3,5,3,2,3,35,1,2,1,2,1,0,0,1,0,0,1,0,0,1
+2,6,2,5,1,2,4,1,2,22,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,30,2,17,5,3,2,1,3,26,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+2,27,4,25,3,3,3,2,2,23,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+4,15,2,36,1,5,2,2,3,54,1,1,1,2,1,0,0,1,0,1,0,0,0,0
+4,42,2,72,5,4,4,4,2,29,3,1,1,2,1,0,0,1,0,1,0,0,0,1
+1,11,4,39,1,3,3,2,1,40,3,2,2,1,1,1,0,1,0,0,1,0,1,0
+2,15,2,15,2,3,3,2,1,22,3,1,1,1,1,0,0,0,0,0,1,0,0,1
+4,24,2,74,1,3,3,4,2,43,3,1,2,1,1,1,0,1,0,0,1,0,1,0
+1,24,1,12,1,1,2,4,4,29,3,2,1,1,1,1,0,0,1,1,0,1,0,0
+1,60,2,73,1,5,3,4,4,36,3,1,1,1,1,0,0,0,1,1,0,0,0,1
+4,30,4,28,1,3,2,2,3,33,3,1,1,2,1,0,0,1,0,0,1,0,0,1
+3,24,2,13,3,3,2,3,3,57,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+2,6,2,8,1,3,2,3,1,64,3,1,1,1,1,0,0,0,0,0,1,0,0,1
+2,18,3,24,5,5,3,2,2,42,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,24,3,25,1,5,3,4,3,47,3,2,2,1,1,1,0,1,0,0,1,0,1,0
+2,15,1,13,2,3,4,2,2,25,3,1,1,1,1,1,0,1,0,1,0,0,0,1
+2,30,4,84,1,4,3,2,2,49,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+4,48,2,48,1,1,3,2,3,33,1,1,1,2,1,0,0,1,0,1,0,0,0,0
+3,21,2,29,2,3,2,1,3,28,1,1,1,2,1,1,0,1,0,0,1,0,0,0
+1,36,2,82,1,3,3,2,2,26,3,1,2,1,1,0,1,1,0,0,1,0,0,1
+4,24,4,20,1,4,3,2,2,30,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+1,15,4,14,1,3,2,3,2,25,3,2,1,1,1,0,0,1,0,1,0,0,0,1
+3,42,0,63,1,2,1,1,2,33,3,2,1,1,1,0,0,1,0,0,1,0,0,1
+4,13,2,14,2,1,2,4,1,64,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,24,2,66,1,1,3,2,4,29,3,1,1,2,1,0,1,1,0,0,0,0,0,0
+2,24,4,17,1,5,3,2,2,48,3,2,1,1,1,0,0,1,0,0,1,0,1,0
+4,12,4,36,5,2,3,1,2,37,3,2,2,1,1,0,0,1,0,0,1,0,1,0
+4,15,1,16,2,5,3,4,3,34,1,1,2,1,1,0,0,1,0,0,1,0,1,0
+1,18,2,19,5,4,4,4,3,23,3,2,1,1,1,0,0,1,0,1,0,0,1,0
+1,36,2,40,1,1,3,3,2,30,3,1,1,2,1,0,0,1,0,0,1,0,0,0
+4,12,2,24,5,5,3,3,3,50,3,1,1,2,1,1,0,1,0,0,1,0,0,1
+4,12,2,17,1,4,2,4,1,31,3,1,1,1,1,0,0,1,0,0,1,0,1,0
+1,30,2,39,1,3,1,4,2,40,3,1,1,2,1,0,1,1,0,0,1,0,0,0
+4,12,2,8,1,5,3,4,3,38,3,1,1,1,1,0,0,1,0,0,1,0,0,1
+1,45,2,18,1,3,3,4,4,23,3,1,1,2,1,0,0,1,0,0,0,0,0,1
+2,45,4,46,2,1,3,4,3,27,3,1,1,1,1,0,1,1,0,0,1,0,0,1
diff --git a/src/mlpack/tests/nystroem_method_test.cpp b/src/mlpack/tests/nystroem_method_test.cpp
new file mode 100644
index 0000000..55d90f8
--- /dev/null
+++ b/src/mlpack/tests/nystroem_method_test.cpp
@@ -0,0 +1,182 @@
+/**
+ * @file nystroem_method_test.cpp
+ * @author Ryan Curtin
+ *
+ * Test the NystroemMethod class and ensure that the reconstructed kernel matrix
+ * errors are comparable with those in the literature.
+ */
+#include <mlpack/core.hpp>
+
+#include <boost/test/unit_test.hpp>
+#include "old_boost_test_definitions.hpp"
+
+#include <mlpack/methods/nystroem_method/ordered_selection.hpp>
+#include <mlpack/methods/nystroem_method/random_selection.hpp>
+#include <mlpack/methods/nystroem_method/kmeans_selection.hpp>
+#include <mlpack/methods/nystroem_method/nystroem_method.hpp>
+
+using namespace mlpack;
+using namespace mlpack::kernel;
+
+BOOST_AUTO_TEST_SUITE(NystroemMethodTest);
+
+/**
+ * Make sure that if the rank is the same and we do a full-rank approximation,
+ * the result is virtually identical (a little bit of tolerance for floating
+ * point error).
+ */
+BOOST_AUTO_TEST_CASE(FullRankTest)
+{
+  // Run several trials.
+  for (size_t trial = 0; trial < 5; ++trial)
+  {
+    arma::mat data;
+    data.randu(5, trial * 200);
+
+    GaussianKernel gk;
+    NystroemMethod<GaussianKernel, OrderedSelection> nm(data, gk, trial * 200);
+
+    arma::mat g;
+    nm.Apply(g);
+
+    // Construct exact kernel matrix.
+    arma::mat kernel(trial * 200, trial * 200);
+    for (size_t i = 0; i < trial * 200; ++i)
+      for (size_t j = 0; j < trial * 200; ++j)
+        kernel(i, j) = gk.Evaluate(data.col(i), data.col(j));
+
+    // Reconstruct approximation.
+    arma::mat approximation = g * g.t();
+
+    // Check closeness.
+    for (size_t i = 0; i < trial * 200; ++i)
+    {
+      for (size_t j = 0; j < trial * 200; ++j)
+      {
+        if (kernel(i, j) < 1e-5)
+          BOOST_REQUIRE_SMALL(approximation(i, j), 1e-4);
+        else
+          BOOST_REQUIRE_CLOSE(kernel(i, j), approximation(i, j), 1e-5);
+      }
+    }
+  }
+}
+
+/**
+ * Can we accurately represent a rank-10 matrix?
+ */
+BOOST_AUTO_TEST_CASE(Rank10Test)
+{
+  arma::mat data;
+  data.randu(500, 500); // Just so it's square.
+
+  // Use SVD and only keep the first ten singular vectors.
+  arma::mat U;
+  arma::vec s;
+  arma::mat V;
+  arma::svd(U, s, V, data);
+
+  // Don't set completely to 0; the hope is that K is still positive definite.
+  s.subvec(10, s.n_elem - 1).fill(1e-10);
+  arma::mat dataMod = U * arma::diagmat(s) * V.t();
+
+  // Add some noise.
+  dataMod += 1e-5 * arma::randu<arma::mat>(dataMod.n_rows, dataMod.n_cols);
+
+  // Calculate the true kernel matrix.
+  LinearKernel lk;
+  arma::mat kernel = dataMod.t() * dataMod;
+
+  // Now use the linear kernel to get a Nystroem approximation; try this several
+  // times.
+  double normalizedFroAverage = 0.0;
+  for (size_t trial = 0; trial < 20; ++trial)
+  {
+    LinearKernel lk;
+    NystroemMethod<LinearKernel, RandomSelection> nm(dataMod, lk, 10);
+
+    arma::mat g;
+    nm.Apply(g);
+
+    arma::mat approximation = g * g.t();
+
+    // Check the normalized Frobenius norm.
+    const double normalizedFro = arma::norm(kernel - approximation, "fro") /
+        arma::norm(kernel, "fro");
+
+    normalizedFroAverage += normalizedFro;
+  }
+
+  normalizedFroAverage /= 20;
+  BOOST_REQUIRE_SMALL(normalizedFroAverage, 1e-3);
+}
+
+/**
+ * Can we reproduce the results in Zhang, Tsang, and Kwok (2008)?
+ * They provide the following test points (approximately) in their experiments
+ * in Section 4.1, for the german dataset:
+ *
+ *  rank = 0.02n; approximation error: ~27
+ *  rank = 0.04n; approximation error: ~15
+ *  rank = 0.06n; approximation error: ~10
+ *  rank = 0.08n; approximation error: ~7
+ *  rank = 0.10n; approximation error: ~3
+ */
+BOOST_AUTO_TEST_CASE(GermanTest)
+{
+  // Load the dataset.
+  arma::mat dataset;
+  data::Load("german.csv", dataset, true);
+
+  // These are our tolerance bounds.
+  double results[5] = { 32.0, 20.0, 15.0, 12.0, 9.0 };
+
+  // The bandwidth of the kernel is selected to be the half the average
+  // distance between each point and the mean of the dataset.  This isn't
+  // _exactly_ what the paper says, but I've modified what it said because our
+  // formulation of what the Gaussian kernel is is different.
+  GaussianKernel gk(16.461);
+
+  // Calculate the true kernel matrix.
+  arma::mat kernel(dataset.n_cols, dataset.n_cols);
+  for (size_t i = 0; i < dataset.n_cols; ++i)
+    for (size_t j = 0; j < dataset.n_cols; ++j)
+      kernel(i, j) = gk.Evaluate(dataset.col(i), dataset.col(j));
+
+  for (size_t trial = 0; trial < 5; ++trial)
+  {
+    // We will repeat each trial 20 times. 
+    double avgError = 0.0;
+    for (size_t z = 0; z < 20; ++z)
+    {
+      NystroemMethod<GaussianKernel, KMeansSelection<> > nm(dataset, gk,
+          size_t((double((trial + 1) * 2) / 100.0) * dataset.n_cols));
+      arma::mat g;
+      nm.Apply(g);
+
+      // Reconstruct kernel matrix.
+      arma::mat approximation = g * g.t();
+
+      const double error = arma::norm(kernel - approximation, "fro");
+      if (error != error)
+      {
+        // Sometimes K' is singular.  Unlucky.
+        --z;
+        continue;
+      }
+      else
+      {
+        Log::Debug << "Trial " << trial << ": error " << error << ".\n";
+        avgError += arma::norm(kernel - approximation, "fro");
+      }
+    }
+
+    avgError /= 20;
+
+    // Ensure that this is within tolerance, which is at least as good as the
+    // paper's results (plus a little bit for noise).
+    BOOST_REQUIRE_SMALL(avgError, results[trial]);
+  }
+}
+
+BOOST_AUTO_TEST_SUITE_END();

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/mlpack.git



More information about the debian-science-commits mailing list