From: Ben Soares Date: Fri, 2 Jun 2023 08:05:38 +0000 (+0100) Subject: Merge branch 'develop' into task/JAL-4001_migrate_googleanalytics_to_GA4 X-Git-Tag: Release_2_11_4_0~282 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=3176c105e6751e32129840f5bfa410921a9c25e6;hp=570267624a5d5e0192895edbd4c25f25f3ea15f0;p=jalview.git Merge branch 'develop' into task/JAL-4001_migrate_googleanalytics_to_GA4 --- diff --git a/examples/AlphaFold/AF-Q5VSL9-F1-predicted_aligned_error_v4_2023.json b/examples/AlphaFold/AF-Q5VSL9-F1-predicted_aligned_error_v4_2023.json deleted file mode 100644 index 8861037..0000000 --- a/examples/AlphaFold/AF-Q5VSL9-F1-predicted_aligned_error_v4_2023.json +++ /dev/null @@ -1 +0,0 @@ -[{"predicted_aligned_error":[[0,1,3,5,5,6,8,10,13,14,15,17,18,18,20,21,23,22,23,25,24,24,27,26,26,28,28,27,28,27,27,28,27,28,28,28,27,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,28,30,29,29,30,30,30,30,29,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,31,31,30,30,31,30,31,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,30,30,30,30,31,30,30,31,31,30,31,31,30,30,30,30,31,31,30,31,31,30,31,30,31,30,30,31,30,30,30,30,30,31,30,30,30,30,30,31,31,30,31,31,31,30,30,31,31,31,31,31,31,31,30,31,31,30,31,30,30,30,30,31,30,30,31,31,30,30,31,30,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,31,31,30,30,30,31,31,30,31,31,31,30,30,31,31,30,31,30,31,31,31,31,30,30,31,30,30,30,31,30,30,31,30,31,31,31,31,31,31,31,31,31,30,30,31,30,29,30,30,29,29,30,30,30,31,30,30,31,30,30,30,31,29,30,31,30,29,30,29,30,30,31,30,31,30,31,31,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,30,30,30,30,30,30,31,30,30,31,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,31,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,28,29,29,30,30,29,30,30,30,30,30,30,31,31,30,30,31,30,30,30,31,30,29,30,30,29,28,30,31,29,30,31,30,30,30,31,30,30,31,30,30,30,30,30,30,29,30,30,29,30,31,31,30,30,30,30,31,30,31,31,31,30,30,30,30,30,30,31,30,30,31,30,30,31,31,30,31,31,31,30,30,31,31,30,31,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,30,29,30,30,28,29,29,30,30,29,30,31,31,30,31,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,31,30,31,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,31,30,31,31,30,30,30,30,30,30,30,30,30,30,31,30,31,30,31,30,30,30,31,30,30,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,31,30,30,31,31,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,28,30,30,29,29,30,30,29,30,31,29,29,30,30,29,30,30,30,29,30,30,30,29,28,28,27,28,28,27,27,28,28,28,28,28,28,28,28,28,28,27,28,29,28,28,27,27,28,25,26,23,28,28,26,27,26,29,27,28,27,29,28,28,28,29,28,28,29,28,28,28,29,28,27,28,27],[1,0,1,3,4,5,6,7,9,12,13,15,16,17,17,19,20,21,22,23,23,24,25,25,26,27,27,27,27,27,28,28,28,28,29,28,29,29,29,29,29,29,29,29,29,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,30,30,30,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,30,31,31,30,29,30,29,30,30,30,29,30,30,29,29,30,30,30,30,31,31,31,30,30,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,29,30,30,29,29,30,30,30,31,30,30,30,30,30,31,30,29,30,31,30,29,30,29,30,30,30,30,31,30,31,31,30,30,31,31,30,30,31,31,30,30,31,31,30,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,31,31,31,30,31,31,30,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,31,30,31,31,30,30,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,30,31,31,30,30,30,31,31,30,31,31,30,30,30,30,30,30,30,29,29,29,30,30,29,30,30,30,30,30,30,31,31,30,30,31,30,30,30,31,30,29,29,30,29,28,30,30,29,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,29,29,29,29,29,30,30,31,30,30,31,30,31,31,31,31,30,30,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,30,30,30,30,30,30,30,29,29,30,30,30,29,30,31,31,30,31,30,30,31,30,31,31,31,30,31,30,31,30,31,30,31,31,31,31,31,31,31,30,31,31,31,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,30,31,31,30,31,31,30,30,31,30,30,31,31,30,29,31,31,30,30,31,30,30,31,31,30,30,30,30,30,30,30,30,31,31,30,30,30,31,30,30,30,31,31,30,30,31,31,30,31,30,31,31,31,31,31,31,30,31,30,31,30,30,31,30,30,30,31,30,31,30,30,30,31,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,31,30,30,30,30,29,29,27,30,30,29,29,30,30,29,30,30,29,29,30,30,28,30,30,30,29,30,30,30,28,28,27,27,28,28,26,27,28,28,28,28,28,28,28,28,28,28,28,27,27,28,27,27,26,28,25,25,25,27,27,26,27,27,28,26,27,27,28,26,27,26,28,28,27,27,28,28,28,29,28,28,29,28],[2,1,0,1,3,4,5,5,7,10,11,12,14,15,17,18,20,20,21,21,22,23,24,24,26,26,25,26,26,26,27,27,26,27,27,27,27,27,27,27,28,27,28,28,29,29,29,29,29,29,29,29,29,30,29,30,30,30,29,29,30,28,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,31,31,30,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,30,30,31,30,31,31,31,30,31,31,30,30,31,31,31,31,31,30,30,31,31,31,31,31,30,31,31,30,30,30,30,30,30,31,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,29,30,31,30,29,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,31,30,30,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,30,30,30,29,29,29,30,30,30,30,30,30,30,29,30,30,29,30,30,30,28,30,29,30,30,30,30,31,30,31,31,30,30,30,30,30,30,31,30,30,31,31,30,30,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,31,30,30,30,30,31,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,30,29,29,30,30,29,30,30,30,30,30,30,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,30,31,30,31,31,31,30,30,30,30,30,30,30,30,31,31,30,30,31,31,31,31,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,30,30,31,30,30,30,30,29,30,29,29,28,29,30,30,29,30,30,30,30,30,30,31,31,30,30,31,30,30,30,30,29,29,29,30,29,28,30,30,29,30,31,30,30,30,30,29,30,30,30,29,29,29,29,29,28,29,29,29,30,30,30,30,30,30,30,30,31,31,30,30,30,30,31,30,31,31,30,30,31,30,30,30,31,30,30,31,30,30,30,31,30,30,30,31,30,30,30,30,30,30,31,30,30,30,30,30,31,31,30,30,31,30,30,30,30,29,30,30,30,29,30,30,28,29,29,30,30,29,30,31,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,31,30,30,31,31,31,31,30,31,31,31,31,30,31,30,30,30,30,30,30,31,30,30,30,30,30,30,31,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,30,30,31,31,30,30,30,30,30,31,31,29,30,30,30,30,30,30,31,31,30,30,30,30,31,30,31,30,30,31,31,30,30,31,30,31,30,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,27,30,30,28,30,30,30,28,30,30,29,29,30,30,28,30,30,30,29,30,30,30,28,29,28,26,28,27,26,27,29,28,29,28,28,28,28,27,28,28,28,27,28,28,28,27,26,28,24,26,24,28,28,26,26,27,28,27,28,28,28,28,28,28,28,28,29,29,28,29,27,29,28,28,29,28],[3,3,2,0,1,2,4,5,6,7,9,11,13,13,15,16,18,18,19,20,21,22,23,23,26,26,25,26,27,26,28,28,26,27,28,28,27,28,28,28,29,28,28,29,29,30,30,29,29,30,30,30,29,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,31,31,30,31,31,31,30,31,31,31,31,30,30,31,31,31,31,31,31,30,31,31,31,31,31,30,31,30,31,30,31,31,31,31,31,31,30,30,31,31,31,31,31,30,30,31,31,30,31,31,30,31,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,29,30,30,30,31,31,30,30,30,30,30,30,31,30,30,31,30,29,29,29,30,30,31,30,31,30,31,31,30,31,31,31,30,30,31,31,30,31,31,31,30,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,31,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,30,29,30,30,30,30,30,31,31,31,30,30,31,30,30,30,31,30,29,30,30,29,28,30,30,29,30,31,30,30,31,30,29,30,30,30,30,30,30,30,30,29,29,30,29,30,30,31,31,30,30,31,30,30,31,30,31,30,30,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29,31,30,30,29,30,30,28,29,29,30,30,29,30,31,30,30,31,30,30,31,30,30,30,31,30,31,30,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,30,30,31,30,30,31,30,30,31,30,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,30,31,31,31,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,27,30,30,28,29,30,30,28,29,30,30,28,30,30,29,29,30,30,29,29,30,30,29,29,28,26,28,28,27,28,28,29,29,29,28,28,29,28,28,28,28,28,28,28,28,28,25,27,25,27,26,28,28,27,27,28,27,27,29,27,27,28,27,26,27,27,28,27,27,28,27,28,28,27,28,28],[4,4,3,2,0,1,3,4,5,5,6,8,10,11,13,14,17,17,18,19,20,20,22,22,24,24,25,26,26,26,27,27,27,27,28,28,28,28,28,28,29,28,29,29,29,30,29,29,29,30,30,30,30,29,29,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,31,30,31,30,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,30,29,30,29,30,30,29,29,30,30,29,30,31,30,30,30,31,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,30,28,30,29,30,30,30,30,30,30,31,31,30,30,31,31,30,30,31,31,30,31,31,31,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,31,30,30,30,31,30,30,30,30,30,31,30,30,30,29,30,31,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,31,30,31,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,30,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,31,31,31,30,30,31,30,31,30,30,30,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,31,30,31,31,31,30,30,30,30,30,30,30,30,29,29,30,29,28,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,29,29,29,29,29,29,29,29,30,30,31,30,30,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,30,30,30,30,29,30,30,30,30,30,30,29,29,29,30,30,30,30,30,31,30,30,31,30,31,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,31,31,30,31,30,31,31,31,31,30,31,31,30,30,31,30,30,31,30,30,30,31,30,30,31,31,30,30,31,30,30,31,31,30,30,30,30,30,30,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,30,30,30,29,29,27,30,30,28,29,30,30,28,30,31,29,28,30,30,28,29,30,30,29,30,30,30,29,29,27,28,28,28,27,28,29,28,29,29,28,29,29,28,29,28,29,28,29,29,29,28,28,28,26,27,26,28,28,28,29,28,29,29,28,28,29,28,27,27,29,29,28,29,28,29,29,30,29,28,30,29],[4,4,4,3,2,0,1,3,3,5,5,6,8,10,11,13,16,16,18,19,19,21,21,21,24,23,23,26,25,25,26,27,25,26,27,26,28,27,28,27,28,28,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,31,31,31,30,30,31,31,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,29,30,30,30,30,31,30,30,31,30,30,31,30,29,30,30,30,28,29,29,30,30,31,30,31,30,31,31,30,30,31,31,30,30,31,30,30,31,31,31,30,30,31,30,30,30,30,31,30,31,31,31,31,30,30,31,30,30,30,30,31,31,31,30,30,30,30,31,31,31,30,30,30,31,30,31,30,30,30,30,31,30,30,30,30,30,30,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,30,30,30,31,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,31,31,30,30,31,31,30,31,31,30,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,28,29,29,30,29,29,30,29,30,30,30,31,31,31,30,30,30,30,29,30,30,30,29,30,30,29,28,30,30,29,30,31,30,29,31,31,29,30,30,30,30,30,29,29,30,29,28,29,28,30,30,31,31,30,30,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,29,30,30,28,29,29,30,30,29,30,31,31,30,31,31,30,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,31,31,30,31,31,31,30,30,30,31,30,30,31,30,30,30,30,31,30,31,30,30,30,31,29,30,30,30,29,31,30,30,29,30,30,30,30,30,30,31,30,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,30,31,30,31,30,31,30,30,30,30,30,30,30,30,31,31,31,31,30,31,31,30,31,31,31,30,31,31,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,28,27,30,30,27,29,30,30,28,30,30,29,28,30,30,28,29,30,30,29,30,30,30,29,29,27,26,28,28,26,28,29,29,29,28,28,29,29,28,28,29,28,28,29,29,28,28,27,28,26,27,27,29,28,28,28,28,29,28,29,29,29,28,29,28,28,28,29,28,28,29,28,29,29,28,28,29],[5,5,5,4,3,1,0,1,2,3,4,5,6,8,10,11,14,15,16,18,19,19,21,21,23,23,24,26,26,26,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,30,30,29,29,29,29,29,30,29,29,30,30,30,30,29,30,29,30,29,30,30,30,30,30,30,31,30,30,30,31,30,30,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,29,29,30,30,28,29,30,30,30,30,31,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,30,30,30,30,31,30,31,31,30,30,31,31,30,30,31,31,30,31,31,31,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,31,31,30,31,30,30,31,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,31,30,30,31,30,31,31,30,31,31,30,31,31,30,30,30,30,30,30,30,31,31,31,31,31,31,30,31,30,30,31,30,30,31,31,30,30,31,30,30,30,31,30,30,30,30,30,30,29,31,31,31,31,31,30,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,29,30,30,30,30,30,31,31,31,29,30,30,30,30,30,30,30,29,30,30,29,29,29,30,29,30,30,30,30,31,30,29,30,30,30,30,30,29,30,29,29,29,29,29,29,30,30,31,30,30,31,30,31,31,31,30,30,30,31,30,31,31,30,31,31,31,30,31,31,30,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,29,30,30,28,29,29,30,30,29,29,30,30,30,30,30,30,31,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,30,30,30,30,31,30,30,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,29,30,30,29,29,30,30,30,29,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,31,30,30,31,31,30,31,30,31,30,30,31,30,30,30,30,30,30,30,29,29,29,28,28,29,29,28,29,29,30,27,29,30,29,28,29,29,28,29,29,29,29,29,30,29,29,28,28,28,27,29,28,29,29,29,29,29,29,29,29,29,29,29,28,28,28,29,28,28,27,28,25,28,28,29,28,28,29,28,28,28,29,27,28,29,28,27,28,29,29,29,28,29,28,29,29,28,29,29],[8,5,5,4,3,2,1,0,1,2,4,5,5,6,9,10,12,15,15,18,19,19,21,21,23,23,24,25,25,26,27,26,26,27,27,27,27,27,28,27,28,27,28,28,29,29,29,28,29,29,29,29,29,29,29,30,30,30,30,29,30,29,30,29,30,30,30,30,30,30,31,30,31,30,30,30,30,30,31,30,31,31,31,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,29,30,30,29,29,30,29,29,30,29,29,29,29,28,29,30,30,30,29,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,29,30,30,30,30,29,29,30,30,29,30,30,29,30,30,30,28,29,29,30,30,30,30,30,30,30,31,30,30,30,30,30,30,31,30,30,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,30,31,31,31,31,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,31,31,31,30,30,30,29,30,30,30,29,29,29,29,28,28,29,30,29,29,30,30,29,30,30,29,29,30,30,29,30,28,29,29,29,28,28,28,29,30,30,30,30,30,30,30,31,31,31,31,30,30,31,30,31,31,30,31,31,30,30,31,31,30,30,31,30,30,30,31,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,29,30,30,30,29,30,30,29,29,30,29,28,29,28,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,30,30,30,31,30,30,31,30,30,30,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,31,31,31,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,30,31,30,31,30,30,30,30,30,30,30,29,29,26,30,30,28,29,30,29,28,29,30,28,28,29,30,28,29,30,29,29,30,30,29,29,29,28,28,28,28,28,28,29,28,29,29,28,29,29,29,29,29,28,28,28,29,28,29,28,28,26,27,26,28,28,28,28,27,28,29,28,27,29,28,29,27,28,29,29,29,28,29,28,29,29,28,30,29],[9,7,5,5,4,3,3,2,0,1,2,3,4,4,6,7,10,10,12,15,15,17,19,19,21,21,22,23,23,23,25,25,24,26,26,25,26,26,26,26,27,26,27,28,28,29,29,28,28,29,29,29,29,30,29,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,30,30,31,30,31,31,31,30,31,30,30,30,30,30,30,31,31,30,31,31,30,31,31,31,30,31,31,31,30,31,31,30,31,31,30,31,31,30,30,30,31,30,31,31,31,31,31,30,30,31,31,31,30,31,31,31,31,30,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,30,30,30,31,30,30,31,30,29,30,30,30,29,30,29,30,30,29,29,30,29,28,29,30,30,30,29,30,30,31,30,30,31,30,30,30,31,31,30,30,31,30,30,31,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,30,30,29,29,29,30,30,30,29,30,30,29,29,30,30,29,29,30,29,28,29,29,30,29,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,29,29,29,29,30,29,29,30,29,29,30,29,30,29,29,29,30,29,29,29,29,30,29,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,30,31,31,31,31,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,30,29,29,29,29,29,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,28,29,29,28,28,29,28,29,29,29,29,29,29,30,29,30,30,30,31,30,30,30,30,29,29,30,30,29,28,29,30,29,27,29,29,29,30,30,29,29,30,30,29,30,30,30,30,30,28,29,29,28,27,29,27,29,30,30,30,30,30,30,30,31,31,30,30,30,30,31,30,31,31,30,31,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,29,30,30,30,29,30,29,29,30,30,29,30,29,29,28,30,30,28,28,27,29,30,28,29,30,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,31,31,31,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,28,29,30,29,28,30,30,28,28,29,29,30,30,30,30,30,30,30,30,30,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,29,29,29,29,29,28,28,25,29,30,27,27,30,29,27,28,30,28,27,29,29,27,28,30,29,28,29,30,29,28,29,28,26,28,28,27,28,28,28,29,29,28,29,29,29,29,29,28,28,29,29,28,29,28,28,26,27,27,29,28,28,28,27,28,28,28,28,28,28,28,27,28,28,29,28,28,28,28,28,29,28,28,28],[11,9,8,5,5,4,3,2,1,0,1,2,3,4,5,5,10,11,11,15,14,15,19,19,19,21,21,22,23,23,26,25,24,25,26,26,27,26,26,26,27,27,27,27,28,28,28,28,28,29,28,28,29,28,28,29,29,29,29,28,29,29,29,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,31,30,30,31,31,30,30,31,30,30,30,30,31,30,30,31,31,30,30,31,30,30,31,31,30,30,31,30,30,30,31,30,30,31,31,30,31,30,30,30,31,31,31,31,31,30,30,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,30,30,30,31,30,30,30,30,29,30,30,30,29,30,29,29,30,29,29,30,29,28,29,30,30,30,29,30,31,31,30,30,31,30,30,31,31,30,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,29,30,30,30,30,29,29,30,30,29,30,30,28,29,30,30,28,29,29,30,30,30,30,31,30,31,31,30,30,30,30,29,29,31,30,30,30,31,30,30,31,31,30,31,31,30,30,31,31,30,30,30,30,31,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,29,29,29,30,29,29,29,29,29,30,29,29,29,28,29,30,29,29,29,29,29,30,29,30,30,30,29,30,29,29,29,29,30,29,29,29,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,29,30,31,30,29,30,30,29,29,30,30,30,30,30,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,30,30,30,31,30,30,30,29,30,30,29,30,30,30,29,29,29,29,29,30,29,30,30,29,30,29,30,30,30,30,30,30,31,30,29,30,30,29,29,30,30,29,28,29,29,29,27,29,30,28,30,30,29,29,30,30,29,30,30,30,29,30,29,29,29,28,27,29,27,28,29,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,29,30,29,29,30,30,29,29,28,29,29,28,27,29,29,29,28,29,29,26,28,27,29,29,28,29,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,29,29,29,29,29,29,29,29,29,30,29,28,29,28,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,29,29,28,28,28,28,28,26,28,29,27,28,28,29,26,27,29,28,27,28,29,27,28,29,28,28,29,30,29,29,29,28,28,28,29,27,28,28,29,29,30,29,30,29,29,30,29,28,29,28,29,28,28,28,27,26,28,27,27,28,28,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,28,29,28],[14,11,10,9,6,5,5,4,3,1,0,1,3,3,4,4,6,9,10,11,13,13,17,18,17,18,20,21,20,21,23,22,22,24,24,25,25,25,25,25,25,25,27,26,27,28,27,27,28,28,28,28,28,28,27,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,31,30,31,31,30,30,30,30,30,30,30,31,30,31,31,30,30,31,31,30,30,31,30,30,31,31,30,31,31,30,30,31,30,30,30,30,30,30,30,31,30,31,30,30,31,30,31,30,31,31,31,31,31,31,30,31,30,31,30,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,29,30,30,29,28,30,27,29,29,28,28,29,29,27,29,30,28,29,29,30,30,30,30,29,30,30,30,30,31,31,30,30,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,29,29,29,30,30,30,29,29,30,29,29,30,29,28,29,30,29,27,28,29,29,29,30,30,30,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,29,30,30,30,31,31,29,30,31,31,30,30,31,30,30,30,31,30,30,30,30,30,31,30,31,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,29,29,30,30,30,29,29,30,30,30,29,30,29,29,30,30,29,30,30,30,29,30,29,30,29,29,30,29,29,29,30,30,30,30,30,29,30,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,31,30,30,30,30,30,30,31,31,31,30,30,31,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,30,31,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,29,29,30,29,29,30,30,30,29,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,29,28,28,29,28,27,29,29,27,29,30,29,28,30,30,29,29,30,29,30,29,28,29,28,27,27,28,27,28,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,29,29,30,30,28,30,30,28,29,30,29,27,28,26,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,29,29,30,29,29,30,30,28,28,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,31,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,29,29,28,25,29,29,27,29,29,29,27,29,30,28,28,30,29,27,29,30,29,29,30,30,29,29,29,28,28,29,28,28,28,30,30,29,30,29,29,29,29,30,29,29,29,29,29,29,29,29,29,27,28,27,29,29,29,28,29,29,29,28,29,29,28,28,28,29,28,29,29,29,29,29,30,29,29,30,29],[14,13,11,11,10,6,6,5,4,3,1,0,1,3,3,4,5,6,8,11,11,12,16,17,18,20,19,21,22,21,23,23,22,24,24,25,24,25,25,25,25,26,26,26,27,28,28,27,28,29,28,27,28,29,28,29,29,29,29,29,30,29,29,29,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,31,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,31,31,30,30,31,30,31,31,30,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,30,30,30,30,30,30,31,30,29,30,30,29,29,30,29,30,30,28,29,30,29,27,29,30,29,29,29,30,30,31,30,29,30,30,30,30,31,30,29,30,31,30,30,31,31,30,30,31,30,30,30,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,30,30,30,30,30,29,30,30,29,29,29,30,30,30,29,30,30,29,29,30,29,29,29,30,29,28,28,29,30,29,30,30,30,29,30,30,29,29,30,30,29,29,30,30,29,30,30,30,29,31,30,29,31,30,29,30,31,30,30,31,30,30,30,31,30,30,30,30,31,31,30,30,30,30,29,30,31,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,29,29,30,29,29,29,29,30,30,29,29,29,28,29,30,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,30,30,30,30,30,30,30,31,30,31,30,31,30,31,30,30,30,29,30,28,29,31,29,28,30,30,29,29,30,30,30,30,30,30,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,30,30,30,30,30,28,29,30,29,28,30,30,28,29,29,29,28,29,30,27,29,30,29,30,29,29,30,29,30,30,30,30,30,29,30,30,29,30,30,30,29,29,29,29,28,28,29,29,28,29,30,29,29,30,29,29,29,30,29,30,30,28,28,29,27,25,29,27,29,29,29,30,30,30,30,30,30,30,30,29,30,30,30,30,31,30,30,30,30,30,30,30,30,29,30,31,30,29,30,30,29,29,30,30,28,29,30,29,28,30,30,29,29,30,30,29,29,30,30,29,30,28,28,29,29,28,29,29,28,29,29,29,27,28,26,29,29,28,29,30,30,29,30,30,29,30,30,30,30,30,29,30,30,30,30,30,30,31,31,31,30,30,30,31,31,30,31,31,31,30,31,30,30,30,30,30,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,29,30,29,29,29,29,30,28,29,29,28,29,29,28,28,30,29,28,29,29,27,28,28,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,29,30,30,29,30,30,30,28,30,30,29,28,30,29,29,28,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,30,29,29,29,28,28,28,27,27,25,29,29,26,27,28,28,26,28,29,28,27,29,28,27,29,30,28,28,29,30,29,28,29,28,27,29,28,27,28,29,30,29,29,29,29,30,30,30,29,29,29,29,29,29,28,28,28,26,28,27,28,28,28,27,28,29,28,28,28,28,28,28,28,29,27,29,27,28,28,28,29,29,27,29,29],[17,14,14,13,11,9,7,6,5,4,3,1,0,1,3,3,4,6,6,9,10,11,14,15,16,18,19,19,19,20,23,21,22,23,23,25,25,24,25,24,26,26,27,26,27,28,27,26,28,28,27,27,28,28,25,28,29,28,28,28,29,28,28,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,31,30,31,30,30,30,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,30,30,30,29,29,30,28,30,29,28,29,30,29,28,29,30,29,29,29,30,30,31,30,30,30,31,30,31,31,31,30,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,29,30,30,30,30,30,30,30,30,29,29,30,30,27,29,29,29,28,29,29,30,29,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,31,30,30,31,31,30,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,30,31,31,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,29,29,29,30,30,29,29,30,30,30,29,29,29,29,30,30,29,29,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,30,31,29,30,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,30,31,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,30,30,29,30,31,30,29,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,30,30,30,30,29,30,30,30,29,29,29,29,28,28,29,29,27,29,29,29,28,29,29,28,29,29,29,29,29,28,28,28,27,26,28,27,28,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,30,30,31,31,30,30,31,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,30,29,29,29,28,29,29,28,28,29,29,27,29,27,28,29,28,29,30,30,29,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,28,29,30,29,29,30,30,29,29,29,28,29,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,31,30,30,29,30,30,29,29,29,30,30,30,30,30,29,29,31,30,30,30,30,30,30,30,30,30,30,31,31,31,31,30,30,30,30,30,30,30,30,30,29,29,29,28,28,25,29,30,27,28,29,29,27,28,29,28,28,29,29,27,29,30,29,29,30,30,29,29,29,29,28,28,29,29,28,30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,29,29,28,27,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,29],[18,15,13,14,13,11,10,6,5,5,4,3,1,0,1,2,4,4,6,8,8,9,12,13,14,16,17,20,19,19,22,21,20,23,23,24,22,24,24,24,25,24,25,25,26,28,27,27,27,29,28,26,28,29,28,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,31,30,30,30,30,30,31,30,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,30,31,30,30,30,30,30,31,31,30,31,30,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,30,30,31,30,30,30,31,30,30,31,30,29,29,30,28,30,30,29,29,30,29,28,29,30,29,29,29,30,30,31,30,29,31,31,30,30,31,30,29,30,31,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,30,29,30,29,30,30,30,29,30,30,29,29,30,29,29,30,30,29,28,28,29,30,29,30,30,30,29,30,30,30,29,30,30,29,29,31,30,29,30,31,30,30,31,30,30,31,31,29,30,31,30,30,31,31,30,30,31,30,30,31,30,31,31,30,30,31,31,30,30,31,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,29,30,30,30,29,29,29,29,29,30,29,29,30,29,29,30,29,29,30,29,30,29,29,29,29,29,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,31,30,31,30,30,31,30,30,31,30,31,30,30,31,30,31,31,30,30,31,30,30,30,30,30,29,29,30,29,28,30,30,29,29,30,30,29,30,30,30,30,30,29,30,30,29,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,30,30,29,29,30,28,30,30,30,30,30,30,30,30,31,30,31,31,30,30,30,30,29,30,30,30,29,29,29,30,29,28,30,29,28,30,30,29,28,30,30,28,29,30,29,29,29,28,28,29,26,25,28,26,29,29,29,30,29,30,30,30,30,31,31,30,30,30,31,30,31,31,30,31,31,30,30,30,30,30,30,31,30,29,30,30,30,29,30,30,28,29,30,30,29,30,30,30,29,30,30,30,29,30,30,30,30,29,30,30,29,29,30,29,29,29,30,29,27,28,26,29,30,28,29,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,30,30,29,29,30,29,30,30,29,29,30,30,28,30,30,28,28,29,29,29,29,29,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,29,29,29,30,29,29,30,30,30,29,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,29,29,28,27,26,29,29,27,28,29,29,28,29,29,28,28,29,29,28,29,30,29,29,30,30,30,29,30,28,28,29,28,28,29,30,30,30,29,30,29,30,29,30,30,29,30,30,30,29,29,29,29,28,27,29,30,29,28,28,29,28,29,29,29,28,28,29,28,29,28,29,28,29,29,28,29,29,28,29,29],[21,18,16,15,15,13,12,10,6,5,5,4,3,1,0,1,2,4,4,5,7,8,9,11,12,15,16,16,18,19,19,21,21,23,22,24,23,25,25,24,25,25,26,25,27,28,27,26,27,28,26,26,28,28,25,28,29,28,28,28,29,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,30,30,30,30,30,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,30,31,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,29,30,30,29,29,30,29,28,30,30,29,29,29,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,29,30,30,29,29,30,29,28,29,30,29,28,29,29,30,30,30,30,30,30,30,31,30,30,30,30,30,29,31,31,30,31,31,31,30,31,31,30,31,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,28,29,29,30,29,30,30,30,30,30,30,29,29,29,30,29,30,30,30,30,30,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,30,31,29,30,31,30,30,31,31,30,30,30,31,30,30,30,30,30,31,30,30,30,30,31,30,31,31,30,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,29,30,31,30,29,31,31,30,30,30,30,30,30,31,30,31,30,30,30,30,30,31,30,31,30,31,31,30,30,30,30,29,30,30,30,29,29,30,30,29,28,29,29,28,29,29,29,28,30,29,28,29,29,29,29,29,28,28,28,27,25,28,27,29,29,30,30,30,30,30,30,30,31,31,30,30,30,30,30,31,31,30,31,31,30,30,31,31,30,30,31,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,31,30,30,30,29,30,29,29,28,29,28,29,29,29,29,28,28,27,29,29,28,29,29,30,28,30,30,29,30,30,30,30,30,30,30,30,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,30,31,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,30,29,30,29,29,30,30,28,29,29,29,28,29,29,28,29,28,29,29,29,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,29,30,30,30,30,29,31,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,30,30,30,30,30,29,29,30,28,28,28,28,27,26,28,29,26,28,29,28,28,28,29,28,28,30,29,28,30,30,29,29,30,30,30,29,30,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,29,30,28,29,28,30,30,29,29,29,30,29,30,30,30,30,29,29,30,30,30,30,29,30,30,30,29,30,30,30],[20,18,16,15,14,14,13,12,9,7,5,4,4,3,1,0,1,3,5,5,6,7,9,10,10,13,14,15,16,17,19,19,19,21,21,22,21,23,23,23,24,24,25,24,26,27,26,26,26,29,27,26,28,28,27,28,29,29,28,29,29,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,30,30,30,31,30,30,31,30,30,31,31,30,30,31,30,30,31,31,31,30,31,30,30,31,31,30,31,30,30,30,30,30,30,30,30,30,30,31,31,30,31,30,30,30,31,31,30,31,31,30,30,30,31,30,31,31,30,30,31,30,31,31,30,30,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,30,30,30,31,30,30,31,30,29,30,30,29,30,30,29,30,30,29,29,30,29,27,29,30,28,29,29,30,30,30,30,29,30,30,30,30,31,31,29,30,31,31,30,31,31,30,30,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,29,30,29,29,30,30,28,28,28,29,30,29,30,30,30,29,30,30,30,29,30,30,29,30,31,30,30,30,30,31,30,31,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,31,30,30,30,31,31,29,30,31,31,30,30,30,30,30,30,29,30,29,30,29,29,29,29,30,30,30,30,30,29,29,30,29,28,29,29,30,28,30,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,31,30,30,30,29,30,29,29,31,29,28,30,30,29,28,30,30,29,30,30,30,29,30,29,30,29,29,30,30,31,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,30,30,31,30,30,30,30,30,30,29,29,30,30,28,30,30,29,29,30,30,28,29,30,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,29,29,29,30,29,28,29,30,28,29,30,29,28,30,29,28,29,30,29,29,29,28,27,29,25,25,28,26,29,29,29,30,29,30,30,29,30,31,31,30,30,30,30,30,31,31,30,30,30,30,29,30,30,30,30,31,30,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,29,29,29,29,28,29,26,29,30,27,29,30,30,28,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,31,30,30,30,30,30,31,31,31,31,31,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,29,30,29,29,29,29,29,29,29,29,29,30,28,30,30,29,27,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,28,29,29,29,28,29,30,29,28,29,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,29,29,29,29,28,28,28,27,26,29,30,27,28,29,29,27,29,29,28,28,29,29,28,30,29,29,29,30,30,30,29,30,29,28,29,29,29,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,29,29,29,29,28,29,29,30,29,29,28,29,29,29,29,29,29,29,29,29,30,28,29,28,29,29,29,29,29,29,30,29],[22,22,20,18,18,16,16,15,12,9,7,5,5,5,3,2,0,1,3,4,5,5,6,7,9,10,13,13,14,16,16,18,19,19,19,21,21,22,24,23,24,23,25,24,26,27,26,25,26,27,25,26,27,26,24,27,28,27,27,28,28,28,28,28,29,29,29,30,29,29,30,29,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,30,31,30,30,29,30,28,30,30,29,29,30,29,27,29,30,29,28,29,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,29,30,30,30,30,30,29,29,29,30,29,28,29,29,29,28,28,29,30,29,30,29,30,29,30,30,30,29,30,30,29,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,30,31,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,30,29,30,29,29,29,29,29,29,28,29,29,29,29,30,29,29,29,29,29,29,29,29,29,28,29,29,29,30,29,29,29,28,29,30,29,29,29,29,29,30,29,30,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,30,29,29,31,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,31,30,30,30,31,31,30,30,31,31,30,31,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,29,29,29,30,29,28,29,29,28,27,28,29,27,28,28,28,28,29,28,27,28,29,28,29,28,27,27,28,25,24,27,25,28,29,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,29,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,30,29,29,29,30,29,29,30,30,29,30,30,30,29,29,29,29,29,28,28,29,29,28,28,29,29,27,28,27,28,29,27,28,29,29,29,29,29,29,30,29,29,30,30,29,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,29,28,29,29,29,29,28,29,28,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,29,29,29,29,28,28,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,30,28,29,29,30,29,29,28,28,27,27,27,27,26,25,27,28,25,27,29,29,27,28,29,28,27,29,29,27,29,29,29,29,29,29,29,29,29,28,29,28,29,29,28,30,30,30,30,29,30,30,30,30,30,29,30,29,30,29,29,29,29,27,29,29,30,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,28,29,30,30,30,29,30,30],[22,20,19,18,17,16,16,14,13,12,8,7,5,4,3,2,1,0,1,2,4,4,4,5,6,8,9,10,13,14,14,16,17,18,19,19,19,21,21,21,22,22,23,23,24,25,25,24,25,26,25,25,27,27,25,28,28,27,27,28,29,28,29,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,29,30,30,29,30,29,30,30,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,30,30,31,30,30,30,30,30,30,31,31,30,31,31,30,30,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,30,30,31,30,30,29,30,29,29,29,29,28,29,28,27,29,30,28,28,28,29,30,30,29,29,30,30,30,30,31,30,30,30,31,31,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,29,28,30,28,28,26,27,28,29,28,29,29,30,28,29,30,29,29,30,30,29,29,31,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,30,31,31,30,31,31,31,30,30,30,30,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,28,29,29,29,29,29,29,28,29,30,29,28,29,29,28,28,29,29,28,29,29,29,28,27,28,29,28,28,28,28,28,28,28,28,29,29,29,28,28,29,29,29,29,29,29,29,29,30,30,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,30,30,30,29,30,31,30,29,30,30,29,29,30,30,29,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,30,30,30,30,30,30,30,30,29,29,29,29,28,27,29,29,27,28,29,29,27,29,29,27,28,28,28,28,27,27,26,26,24,23,26,25,28,28,29,29,29,29,29,29,30,30,30,30,30,29,30,29,30,30,29,30,30,30,29,30,30,29,29,30,29,28,29,30,29,28,30,30,28,29,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,28,28,29,29,26,27,25,29,29,27,28,29,29,27,29,29,28,29,29,30,30,29,29,30,30,29,30,29,30,30,30,31,30,30,31,31,31,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,30,29,29,30,30,29,28,30,30,29,29,30,29,29,29,29,28,29,29,27,29,30,27,26,28,28,29,29,28,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,28,28,29,28,28,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,28,28,28,27,25,24,29,28,25,28,29,28,27,29,29,28,29,30,29,28,30,30,29,30,30,30,30,30,30,29,29,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,29,28,30,29,29,29,29,29,29,28,29,29,28,29,29,29,28,29,29,29,29,29,30,29,29,30,30],[22,21,20,20,19,17,17,16,14,14,11,9,7,5,5,4,3,2,0,1,2,3,4,4,5,7,8,8,11,12,13,15,16,17,17,19,17,20,21,20,21,21,22,23,24,25,25,24,24,27,25,24,26,27,25,26,28,27,26,27,28,27,28,29,29,30,30,29,30,29,30,28,30,29,29,29,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,31,30,30,30,30,30,30,30,29,30,31,30,30,30,30,30,30,31,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,30,30,31,31,30,30,31,31,30,31,31,30,30,31,30,31,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,29,30,30,29,29,30,29,27,30,30,28,28,29,30,30,30,29,29,30,30,30,29,30,30,29,30,31,30,30,31,31,30,30,30,30,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,29,30,30,29,29,30,29,29,28,27,29,30,28,29,30,30,29,30,30,30,29,30,29,29,29,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,29,29,30,30,29,30,30,30,30,29,28,29,29,28,28,28,27,29,28,28,27,29,29,28,28,29,28,28,28,29,28,27,28,28,28,28,28,28,26,27,27,28,27,27,28,28,27,28,28,28,28,27,28,27,27,27,27,28,28,28,28,28,28,28,29,28,28,29,29,29,29,28,29,29,30,30,29,29,30,30,30,29,30,30,30,30,29,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,28,28,30,29,27,29,30,29,28,29,30,29,29,30,29,29,29,29,30,29,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,29,30,29,29,30,30,28,30,30,29,29,30,30,28,29,30,29,29,30,30,30,30,29,30,29,31,29,30,31,30,30,30,30,29,30,30,29,29,29,29,29,28,28,29,29,28,29,29,29,28,29,28,27,28,29,28,28,28,27,25,27,23,24,27,26,28,28,28,29,29,29,30,29,29,30,30,29,30,29,30,29,30,30,30,30,31,30,29,30,30,29,29,30,30,29,30,30,29,28,30,30,29,29,30,30,29,29,30,29,29,30,30,29,30,30,29,30,29,29,29,29,29,27,29,29,29,28,29,29,27,28,26,29,29,26,28,29,29,28,29,29,28,29,30,29,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,28,29,29,29,28,29,29,28,29,28,28,28,28,27,28,28,29,28,29,28,28,27,28,29,29,28,28,29,29,29,29,29,30,30,30,29,30,30,30,29,30,29,29,29,30,28,29,29,29,28,29,28,28,27,27,27,27,28,29,28,28,28,30,29,29,29,29,29,29,30,29,29,29,30,30,29,30,29,28,28,28,29,29,27,27,27,26,26,27,27,26,25,25,28,25,26,28,28,26,27,29,27,27,29,28,27,29,29,29,29,30,29,29,29,29,29,28,28,29,29,29,29,29,29,30,29,30,30,30,29,30,30,30,29,30,29,29,29,30,29,28,28,30,29,29,29,29,29,29,30,30,29,29,30,29,30,28,29,28,29,29,29,29,29,30,29,30],[22,21,21,20,20,19,18,17,15,14,13,11,9,6,4,4,3,2,1,0,1,2,3,4,4,5,7,8,10,10,11,13,15,16,16,18,18,19,21,21,21,21,23,22,23,24,23,23,23,24,23,23,25,25,23,26,26,25,25,26,27,26,27,28,28,30,29,29,29,29,30,29,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,31,31,31,31,31,30,30,30,30,30,30,31,31,31,31,30,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,29,29,30,29,28,29,28,26,28,30,27,28,29,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,30,31,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,28,30,29,29,27,28,29,30,29,30,29,30,29,30,30,29,29,30,30,29,29,31,30,30,30,31,31,30,30,30,30,30,30,30,30,30,31,30,31,31,30,31,31,31,31,31,30,31,30,30,30,30,30,29,30,30,30,29,30,30,30,30,29,29,29,28,29,29,28,26,28,28,28,27,28,29,28,28,29,29,28,28,29,29,28,29,29,29,29,29,29,28,28,28,29,28,28,28,28,28,29,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,30,29,29,29,29,30,30,29,29,29,30,30,29,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,30,31,29,29,31,30,28,30,31,30,29,30,30,30,30,30,30,30,30,29,31,30,30,31,30,31,31,30,30,30,30,30,30,30,30,31,31,30,31,31,31,30,31,31,31,31,30,31,30,31,29,30,31,30,29,30,31,29,30,31,30,30,30,31,30,30,30,30,31,30,30,31,30,31,31,31,31,30,30,30,30,29,30,30,29,29,29,29,29,28,27,28,29,28,29,28,29,28,29,28,26,28,29,28,29,26,26,25,27,24,23,25,25,27,28,29,29,29,29,30,29,30,30,30,29,30,29,30,29,30,30,29,30,31,30,29,30,30,29,29,30,29,29,29,30,29,28,30,30,29,29,30,29,29,29,30,29,29,30,30,29,29,31,30,30,29,29,29,29,29,28,29,29,28,28,29,29,27,28,27,29,29,27,28,29,29,27,29,28,28,29,29,29,29,29,29,29,29,30,30,29,30,31,30,31,31,30,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,27,28,28,27,28,29,29,28,28,28,29,28,29,29,29,29,29,29,29,29,30,30,30,30,30,29,30,30,29,30,30,30,29,29,29,28,29,29,29,29,27,28,28,28,28,29,28,28,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,31,30,29,29,29,29,29,28,27,28,26,27,27,27,25,24,27,28,25,28,28,28,27,28,28,28,28,29,28,27,30,30,29,29,30,30,29,29,30,29,29,29,30,30,30,30,30,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,29,29,29,30,29,30,29,29,30,29,29,30,30,29,30,30,30,29,30,30,29,30,29,30,30,30,30,30],[22,21,21,20,21,20,19,17,16,15,12,13,10,8,6,5,4,2,2,1,0,1,2,3,3,4,5,6,8,8,10,12,14,15,16,16,16,18,19,19,20,20,21,22,23,24,23,21,22,24,22,22,25,25,21,25,27,24,25,26,28,26,27,27,28,30,29,30,29,29,30,28,30,30,29,29,30,30,30,29,30,30,29,29,30,30,29,29,29,30,30,29,30,30,31,30,30,31,30,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,30,30,31,30,30,30,30,30,29,30,31,30,30,30,30,30,31,31,30,31,31,31,30,31,31,30,31,30,31,30,31,30,31,31,30,30,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,29,29,30,28,28,29,28,28,28,28,26,28,29,26,28,29,29,30,29,29,29,30,30,29,29,30,30,29,30,31,30,29,30,31,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,30,30,30,30,30,30,30,29,29,29,29,28,28,29,28,28,27,27,29,29,27,29,29,30,28,28,30,29,28,30,30,29,28,30,30,30,30,30,30,30,30,30,29,30,31,29,30,31,30,30,30,31,30,30,31,31,30,30,30,30,31,30,30,30,31,30,30,30,30,29,30,30,29,30,29,29,30,29,28,29,28,26,28,29,28,27,29,29,28,27,29,28,27,28,29,28,27,28,28,28,28,28,28,28,27,28,28,27,28,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,30,29,29,29,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,29,30,29,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,31,31,31,31,30,30,30,30,29,30,30,30,29,29,29,30,28,27,29,29,27,28,29,29,27,29,28,27,27,28,28,28,27,27,24,27,22,22,26,25,28,28,28,29,28,29,29,28,30,29,29,29,29,28,29,28,29,29,29,29,30,29,29,29,30,29,29,30,29,28,29,30,28,28,30,30,28,29,30,29,28,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,29,28,30,29,27,28,29,28,26,27,27,28,28,27,27,29,29,27,28,29,28,29,29,29,30,29,28,30,29,29,30,29,30,30,30,30,30,30,30,31,30,30,31,31,31,30,30,30,29,30,30,29,29,30,29,29,30,30,30,30,30,30,29,30,30,29,29,30,29,29,29,30,29,28,29,29,29,28,29,29,29,28,29,29,29,29,27,28,29,28,26,29,29,27,25,27,28,28,28,27,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,29,30,30,28,29,30,29,28,29,29,29,28,27,28,28,28,29,29,29,29,29,30,29,30,29,30,30,29,30,30,30,30,30,30,30,30,29,30,29,29,29,29,28,29,28,28,28,26,23,23,28,28,24,27,28,27,27,29,29,28,29,30,29,29,30,30,29,30,30,30,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,29,30,30,29,29,29,29,30,29,30,29,29,30,29,30,29,30,29,30,30,30,30,30,30,30,30],[23,21,21,21,21,21,21,19,17,16,14,12,12,8,8,5,5,3,2,2,1,0,1,2,3,4,4,5,7,8,8,11,12,14,15,17,16,18,19,19,20,20,20,21,22,23,23,21,22,24,23,21,24,25,21,25,26,24,24,26,27,26,27,27,27,29,29,29,29,29,30,28,29,30,29,29,30,29,30,29,30,30,29,29,30,29,28,29,29,29,30,29,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,29,29,30,30,29,30,30,30,29,30,30,29,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,31,30,30,31,30,30,29,30,30,29,30,30,30,29,29,30,29,30,29,29,29,30,29,28,29,29,27,27,29,30,30,30,29,29,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,30,31,30,30,30,31,30,30,30,31,30,29,30,30,30,30,30,30,30,29,30,30,30,30,29,29,29,29,30,29,29,30,29,28,28,27,29,30,28,29,30,30,28,30,30,29,29,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,28,30,30,30,29,29,29,29,29,29,28,29,28,27,27,27,25,28,27,27,26,28,28,27,27,29,28,27,28,28,27,27,28,27,27,27,27,27,26,26,26,27,25,26,27,27,26,28,27,28,27,27,27,27,26,26,26,26,27,26,26,27,27,28,28,27,27,28,28,29,28,28,28,28,29,29,28,29,29,29,29,29,29,29,30,29,29,30,29,29,30,29,30,29,29,30,29,30,30,30,29,30,30,29,29,30,30,28,28,30,29,27,29,30,29,28,29,30,29,29,29,29,28,29,29,30,30,30,30,30,30,30,30,30,29,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,29,30,29,29,30,30,29,30,30,29,29,30,30,29,29,30,30,30,30,30,30,30,30,30,29,31,30,30,31,30,30,30,30,29,30,30,30,29,29,29,30,28,27,29,29,28,29,29,29,28,29,29,28,28,29,29,28,27,27,23,26,22,22,26,25,28,27,29,29,29,29,29,28,30,30,30,28,30,29,30,29,30,30,29,29,30,30,29,30,30,29,28,30,29,28,29,30,29,28,30,30,28,29,30,29,29,30,30,29,29,30,30,29,30,30,30,30,30,29,30,30,29,29,29,29,28,28,29,28,25,28,25,29,29,25,29,29,29,27,29,29,27,28,29,29,29,29,28,30,29,29,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,30,30,30,30,29,30,29,30,29,30,30,29,29,30,30,28,29,29,29,28,29,29,29,28,28,28,29,29,27,28,29,26,26,28,28,26,25,26,28,29,27,28,29,29,29,29,29,29,30,29,29,30,30,29,29,29,29,29,29,29,28,29,29,29,28,29,28,28,27,27,27,26,28,28,28,28,28,29,28,29,28,29,29,29,29,28,28,29,29,29,29,30,29,28,29,28,29,28,27,27,27,25,25,27,25,25,22,26,27,24,26,28,27,27,28,29,28,28,30,29,28,29,29,29,29,29,29,29,29,30,29,28,29,29,30,29,29,30,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,29,29,30,30,29,29,29,30,29,29,30,29,29,30,29,30,28,30,29,30,29,29,30,30,30,30,30],[23,22,21,21,21,20,20,20,18,16,16,13,13,9,9,6,5,4,3,2,2,1,0,1,2,3,4,4,6,7,7,10,11,12,13,16,16,18,20,20,20,20,20,21,22,23,22,20,22,23,20,20,24,24,20,24,25,23,24,25,26,25,25,26,27,29,28,29,29,29,30,28,30,29,29,29,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,31,30,30,31,31,30,30,31,30,30,30,30,30,30,31,31,30,30,30,30,30,31,30,30,31,31,30,30,31,31,30,31,31,30,31,31,31,30,30,30,30,30,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,30,29,30,30,29,28,29,29,27,28,29,27,28,29,29,30,30,29,29,30,31,30,30,31,31,30,30,31,31,30,31,31,30,31,31,31,30,31,30,31,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,30,30,30,31,30,30,30,30,30,30,30,30,29,29,30,29,28,28,27,29,30,28,29,29,30,29,30,30,30,29,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,31,31,30,30,30,31,31,30,30,30,30,29,30,30,30,29,29,29,29,29,29,28,29,28,28,28,27,25,27,27,27,27,28,28,27,27,28,28,27,28,28,28,27,28,28,28,28,28,28,27,27,27,28,27,27,28,27,27,28,28,29,28,28,28,28,28,28,28,28,28,29,28,28,29,29,29,29,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,30,29,30,30,29,30,30,29,29,29,29,29,29,30,29,30,30,30,29,30,30,30,30,30,31,29,29,31,30,28,30,31,30,29,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,31,31,30,31,30,31,29,30,31,30,29,30,31,29,30,31,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,30,30,31,30,29,30,30,30,29,29,29,29,29,28,29,29,27,29,28,28,27,29,28,26,28,29,27,29,25,25,23,26,22,22,25,25,28,28,29,29,29,29,30,29,30,30,30,29,30,28,30,29,30,30,29,30,30,29,29,30,30,29,29,30,29,28,29,30,29,28,29,30,28,29,30,29,29,28,29,29,28,29,30,29,29,30,30,30,29,29,29,29,28,28,29,28,28,28,29,28,25,28,26,28,28,26,28,28,28,27,28,28,27,29,29,28,29,29,28,29,29,29,30,29,30,30,30,31,30,30,31,31,31,30,31,31,31,31,30,30,30,30,30,29,30,30,30,29,30,29,29,30,30,30,29,30,30,30,29,30,30,29,29,29,29,29,29,28,29,28,28,28,28,28,28,28,27,28,28,28,27,26,27,28,28,27,27,27,28,27,28,28,28,29,28,28,29,28,30,29,30,30,30,29,30,29,29,30,29,29,28,29,29,27,28,28,27,28,27,26,28,27,28,28,28,28,28,29,28,28,29,29,29,29,29,29,29,29,30,30,29,30,30,28,29,28,29,29,27,26,27,25,26,26,27,26,24,27,27,26,27,28,28,27,28,28,27,28,29,28,28,29,29,29,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[23,22,22,21,21,21,21,20,18,18,15,15,13,11,10,8,7,4,4,3,2,2,1,0,1,2,3,4,4,6,7,8,10,12,13,16,15,17,18,18,19,19,20,21,21,23,22,21,21,23,21,21,24,25,20,24,26,23,24,25,27,25,26,27,27,29,29,30,29,29,30,29,30,30,29,29,30,30,30,30,30,31,30,29,30,30,28,29,29,30,30,29,29,30,30,30,30,31,30,30,31,31,30,31,31,30,30,31,31,30,30,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,31,31,30,30,31,31,30,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,29,30,30,28,29,29,28,28,28,28,26,28,29,26,28,29,29,29,30,29,29,30,30,30,29,30,31,30,30,31,31,29,31,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,30,30,31,30,30,30,30,30,29,29,29,29,28,29,29,27,28,27,29,29,27,29,29,30,28,28,30,29,29,30,30,29,29,31,30,30,30,30,31,30,31,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,30,31,31,30,30,30,30,29,29,30,29,30,29,29,29,29,28,29,27,26,27,28,28,27,28,29,27,26,29,28,27,28,29,27,27,28,28,28,29,28,28,28,27,28,28,28,28,28,28,28,28,29,28,28,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,29,29,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,30,31,30,30,31,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,29,30,30,30,31,30,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,31,30,30,31,30,30,31,31,31,31,30,31,31,31,31,31,30,31,30,30,30,30,30,29,30,29,30,29,27,29,29,27,29,29,28,27,28,28,26,27,28,28,28,26,26,23,25,22,22,24,26,28,28,28,29,28,29,29,29,30,29,29,28,29,28,29,28,29,29,29,29,30,29,28,29,30,29,29,30,29,28,29,30,28,28,30,30,28,29,30,29,29,29,30,29,29,30,30,29,30,30,30,31,30,30,30,30,30,29,29,30,29,28,29,28,26,28,26,29,28,27,27,29,29,27,28,29,28,28,29,29,29,29,27,30,29,29,30,29,30,30,30,30,30,30,30,31,31,30,31,31,31,30,30,30,29,30,29,28,29,30,29,28,30,29,30,30,30,30,29,30,30,29,29,30,30,29,29,30,29,28,29,29,29,28,29,30,29,29,29,29,30,29,29,29,29,28,26,29,29,26,25,27,28,29,27,28,29,29,28,29,30,29,30,30,30,30,30,29,30,30,29,29,30,30,28,29,30,29,29,29,30,29,28,28,29,28,29,29,29,29,28,30,30,28,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,28,30,29,29,29,29,28,28,28,26,24,23,29,29,25,29,29,28,28,30,30,29,29,30,30,29,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,31,31,31,30,30,31,31,30,30,31,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,29,31,30,30,30,30,30,31,30,31,31],[23,22,22,23,21,22,22,21,21,20,17,16,15,12,13,9,9,6,5,4,3,2,2,1,0,1,2,3,5,5,6,8,9,11,13,15,14,17,17,18,19,19,19,20,21,22,22,20,21,23,22,20,23,24,20,23,24,24,24,25,26,25,26,26,26,29,29,29,29,29,30,28,29,30,29,29,30,30,30,29,30,30,29,28,29,29,28,29,29,29,30,29,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,31,30,29,30,30,29,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,31,30,30,30,31,30,30,30,30,29,30,31,30,30,30,30,30,29,29,29,29,29,29,28,28,30,26,27,29,29,29,30,29,29,30,30,30,29,30,30,29,29,30,30,29,30,31,30,30,30,30,30,30,30,31,31,31,30,31,31,31,30,31,31,31,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,28,29,27,29,30,28,29,29,30,28,29,30,29,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,31,30,30,30,30,31,30,30,30,30,29,29,30,30,29,29,29,29,29,29,28,28,28,28,27,26,25,26,27,26,26,27,28,27,26,28,28,27,28,28,28,27,28,28,28,28,27,28,26,26,26,27,26,27,27,27,26,28,28,28,28,28,27,27,27,27,27,27,27,27,27,27,28,28,28,28,27,28,28,29,29,28,29,28,29,29,28,29,29,29,29,29,30,29,30,29,29,30,29,29,30,29,30,29,29,30,29,30,30,30,30,29,30,30,29,30,30,29,29,30,30,29,29,30,29,29,29,30,29,28,29,29,28,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,31,30,31,31,30,30,30,30,29,30,30,30,30,30,30,30,29,28,30,30,28,30,30,29,27,30,29,27,27,29,28,27,26,26,22,25,21,22,25,25,28,27,29,29,29,29,29,28,30,30,30,28,29,29,29,28,30,30,28,28,30,29,27,30,30,28,28,30,29,28,29,30,29,27,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,27,28,25,29,29,25,28,29,29,27,29,29,27,28,28,29,29,28,28,30,29,28,30,28,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,28,29,30,29,28,29,29,30,30,30,30,29,30,29,30,29,30,30,29,29,30,30,28,29,30,29,28,29,30,29,28,29,29,29,29,29,29,29,28,27,29,29,27,25,25,28,29,27,28,29,29,28,29,29,29,29,29,30,30,30,29,29,29,30,29,29,29,29,29,29,29,28,29,29,28,27,27,28,27,28,29,28,28,28,29,28,28,29,28,29,29,28,29,29,29,29,29,30,29,29,29,29,29,28,28,28,27,28,27,27,27,25,26,25,28,28,26,28,29,28,28,29,29,28,29,30,30,29,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,29,29,30,30,29,30,30,29,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30],[25,24,24,23,22,23,22,21,20,20,18,17,17,13,12,10,11,9,6,5,4,3,3,2,1,0,1,2,4,5,4,7,9,10,12,14,13,16,17,17,19,19,19,20,20,22,21,20,20,22,20,19,23,24,18,23,25,22,22,24,26,24,25,26,26,29,28,30,28,29,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,28,30,30,30,30,30,30,30,31,30,30,31,30,30,31,31,30,30,30,30,30,30,30,30,30,31,31,30,31,31,30,30,31,31,30,31,31,30,30,31,31,30,31,31,30,30,30,30,30,30,30,30,30,31,31,30,31,31,30,30,31,31,30,31,31,31,30,31,31,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,31,30,30,30,30,30,30,30,30,29,30,29,28,29,29,27,27,29,30,30,30,29,30,30,31,30,30,31,31,30,30,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,29,29,30,30,28,29,28,30,30,29,30,30,30,29,30,30,30,29,30,30,30,29,30,31,30,30,30,31,30,30,30,30,30,31,30,30,31,31,30,30,31,31,30,31,31,31,30,31,30,31,30,30,30,30,29,30,30,30,29,29,30,30,29,29,28,29,28,28,28,27,25,27,27,26,27,28,27,27,27,28,27,27,27,28,27,27,27,28,28,28,27,28,26,26,27,28,26,26,28,27,28,29,27,28,28,28,28,27,27,28,27,28,28,28,28,28,28,28,28,28,28,29,29,29,28,28,28,28,29,28,28,29,29,29,29,29,30,29,30,29,29,30,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,31,30,29,31,30,28,30,31,30,29,30,30,30,29,30,30,29,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,30,31,30,31,30,31,30,30,31,30,30,31,31,30,30,31,31,30,30,30,30,30,30,30,31,30,30,31,30,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,28,29,29,29,27,30,28,27,28,29,28,28,26,27,22,26,22,22,25,26,28,28,29,29,29,30,30,28,30,30,30,29,29,29,29,28,30,30,28,29,30,30,29,30,30,29,29,30,29,28,29,30,29,28,30,30,29,29,30,30,29,28,30,29,29,29,30,30,29,30,30,30,29,29,30,30,29,29,29,28,28,29,30,28,27,29,26,29,29,26,29,29,28,27,29,28,27,29,29,29,29,29,28,30,29,29,30,29,30,30,30,30,30,30,30,31,31,30,30,30,31,31,30,31,30,30,29,29,30,30,30,29,30,29,29,30,30,29,29,30,30,30,29,30,30,29,29,29,29,29,29,29,29,29,28,29,29,29,28,28,28,28,28,29,28,27,28,29,28,27,27,26,28,28,27,27,28,28,28,29,29,29,30,29,29,30,30,30,30,29,29,29,29,29,29,29,29,28,29,29,27,29,28,27,28,27,28,28,28,28,28,29,28,28,29,28,29,29,29,29,29,29,30,30,30,30,30,28,29,29,29,28,28,27,28,25,26,27,27,27,26,27,28,28,28,28,28,28,29,29,28,29,29,29,29,30,29,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,31,30,30,30,31,30,31,31,31,30,30,30,30,30,30,30,30,31,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,31,31,31],[26,25,25,25,24,24,24,23,22,21,20,18,17,15,13,13,12,11,8,6,5,4,4,4,3,2,0,1,3,4,4,5,7,9,11,12,13,15,16,16,18,18,19,20,21,22,21,20,21,22,20,20,23,23,19,24,25,23,23,25,27,25,26,27,27,29,28,29,30,29,30,30,30,30,30,30,30,31,31,30,31,31,30,30,30,30,29,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,29,29,29,28,29,30,26,27,29,29,30,30,29,30,30,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,29,30,29,29,29,28,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,30,30,29,29,29,29,29,27,25,26,29,28,26,29,29,28,26,28,28,28,28,29,27,27,29,28,28,29,28,29,28,28,29,28,28,29,29,28,29,29,29,30,29,29,30,29,29,29,30,30,30,30,30,29,30,30,30,29,29,30,30,30,30,29,29,29,30,29,29,30,29,30,30,30,30,29,30,30,29,30,29,29,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,30,31,30,30,30,30,30,31,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,29,30,30,28,29,30,29,28,29,29,27,28,29,28,28,26,26,24,25,23,22,26,27,29,29,29,29,29,29,29,28,30,30,29,29,29,28,30,28,29,30,29,29,30,29,29,30,30,29,29,30,29,28,29,30,29,29,30,30,29,29,30,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,28,29,27,30,30,27,29,29,29,27,29,29,28,28,29,29,29,29,28,30,29,29,30,29,30,30,30,30,31,30,31,31,31,30,31,31,31,31,30,30,30,30,30,29,29,30,29,28,30,29,29,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,29,27,27,29,30,28,28,29,29,28,29,30,29,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,29,28,30,29,29,30,29,29,29,30,30,29,30,30,30,30,30,30,31,30,31,31,31,31,31,30,30,30,30,30,30,30,30,28,28,29,28,27,27,29,30,28,30,30,29,29,30,30,30,30,31,30,30,31,31,30,30,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,30,30,31,31,30,30,31,31,30,31,31,30,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31],[26,24,24,25,23,26,24,23,24,22,21,22,19,17,17,14,14,12,12,10,7,6,5,4,4,3,2,0,1,3,4,5,5,7,10,12,13,15,15,16,18,18,18,19,21,21,21,19,21,23,21,19,23,23,20,24,25,24,23,26,27,25,26,28,27,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,30,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,30,30,30,30,30,29,29,29,30,26,27,29,29,30,30,30,30,30,31,30,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,30,30,29,30,28,30,30,28,30,30,30,30,30,30,30,30,30,31,30,29,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,30,30,30,30,30,29,29,29,28,28,28,26,24,24,28,28,25,28,29,28,25,29,29,28,28,29,28,27,29,28,28,29,28,28,27,26,28,28,28,28,28,28,28,29,29,29,29,29,29,28,29,29,29,28,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,29,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,31,31,30,30,31,31,29,30,31,30,30,30,31,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,31,30,30,31,31,31,30,31,31,31,31,31,31,30,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,31,30,29,30,30,29,30,30,29,28,30,29,28,28,30,29,28,26,27,24,25,22,23,27,27,30,28,30,29,29,30,30,28,30,30,30,28,30,28,30,28,30,30,28,28,30,30,28,30,30,29,29,30,30,28,29,30,30,29,30,30,30,29,30,31,30,30,31,30,30,30,30,30,30,31,31,31,31,30,30,30,30,30,31,30,30,30,30,30,28,29,27,30,30,27,29,30,29,27,30,30,27,28,29,29,30,28,29,30,30,29,30,30,31,30,30,30,31,30,31,31,30,30,30,31,31,31,30,30,30,30,29,29,30,30,30,29,30,29,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,29,29,30,30,30,30,29,30,30,29,30,30,29,29,30,30,28,27,26,29,30,27,28,29,29,28,29,30,29,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,28,29,30,29,28,29,29,29,29,29,29,28,29,30,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,29,30,29,29,29,29,28,29,28,28,28,27,28,27,29,30,28,29,30,29,29,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,31,30,31,31,30,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31],[27,26,26,26,25,26,25,23,24,24,22,22,21,18,18,16,15,15,12,12,10,6,6,6,4,4,3,2,0,1,2,4,5,5,7,10,10,14,15,15,16,17,18,19,20,21,21,20,20,22,20,19,22,23,18,23,25,22,21,24,26,24,25,26,26,29,29,30,29,29,30,29,30,30,30,30,30,30,30,30,31,31,30,29,30,30,29,30,30,30,30,30,30,31,31,30,30,31,30,30,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,30,30,30,29,29,30,27,27,30,29,30,30,30,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,29,30,28,30,31,29,30,30,31,30,30,31,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,30,30,30,29,29,28,29,28,27,28,26,25,26,27,27,27,28,28,28,26,28,28,27,26,28,27,26,28,28,28,28,28,28,27,26,28,28,27,27,28,28,28,29,28,29,29,29,29,28,29,29,28,29,29,28,28,28,29,29,29,28,29,29,29,29,29,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,29,29,30,29,30,30,30,30,30,30,31,31,31,31,31,31,30,30,31,31,30,31,31,31,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,30,30,30,30,30,30,29,30,30,29,28,30,29,27,29,29,28,28,26,27,23,26,22,23,27,28,29,28,30,29,29,30,30,29,30,30,30,28,30,29,29,27,30,30,28,29,31,30,28,30,30,29,29,31,30,29,29,30,30,29,30,30,29,29,30,30,30,29,30,30,30,30,31,30,30,31,31,31,31,30,31,30,30,30,30,30,30,29,29,29,28,29,28,30,30,27,29,29,29,28,30,28,28,28,29,29,29,29,29,30,29,29,30,29,30,30,30,31,31,30,31,31,31,30,31,31,31,31,30,31,30,30,29,28,30,30,29,27,30,29,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,30,30,29,29,30,29,29,29,30,30,30,29,30,29,29,29,30,29,29,29,28,29,29,27,29,28,28,28,29,29,29,30,29,29,30,30,30,29,30,29,30,29,30,29,29,29,29,29,29,29,30,28,29,29,28,29,29,29,29,29,30,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,28,29,28,28,28,28,30,29,28,30,30,29,29,30,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[27,27,27,26,26,26,25,26,24,24,23,22,22,20,19,17,16,15,14,13,11,10,8,6,5,5,4,3,2,0,1,3,3,4,5,7,9,13,14,15,16,17,18,19,20,20,20,19,20,22,21,20,22,22,21,23,24,23,23,25,26,25,25,26,27,29,28,29,29,29,30,29,30,30,30,29,30,30,30,29,31,31,30,29,30,30,28,29,29,30,30,29,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,30,30,29,30,29,28,29,30,26,27,29,29,29,30,30,30,30,31,30,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,29,30,29,29,30,28,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,30,30,30,30,29,29,28,28,29,27,24,24,28,28,25,26,29,28,27,28,28,28,27,29,28,26,28,28,29,29,29,29,28,28,28,29,28,29,28,29,28,29,29,30,29,29,30,29,29,29,29,30,29,29,29,29,29,29,30,29,29,29,30,30,30,29,29,29,30,30,29,30,29,30,29,29,30,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,31,30,30,30,31,29,29,30,29,28,29,29,26,27,28,28,27,26,26,25,26,24,24,27,27,29,29,29,29,29,29,29,29,29,30,29,29,29,28,29,27,29,30,28,28,30,29,28,29,30,29,29,30,29,28,29,30,29,29,30,30,29,29,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,30,31,31,30,29,30,30,30,29,30,30,29,29,28,30,30,28,29,30,29,27,29,30,28,28,29,29,29,28,28,30,29,28,30,29,30,30,30,30,30,30,30,31,30,30,30,31,31,30,30,30,29,29,29,27,29,29,29,27,29,29,29,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,30,30,29,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,28,28,29,29,27,28,29,29,27,29,29,29,30,30,30,30,30,30,30,30,29,29,30,30,29,30,30,30,29,30,30,30,29,29,30,29,29,30,30,28,29,31,30,29,30,30,30,31,30,31,30,30,30,30,31,31,31,30,30,30,30,30,30,30,30,28,28,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31],[27,26,27,27,25,27,26,25,25,25,23,24,22,21,21,20,19,17,16,15,13,11,10,7,6,5,4,3,3,1,0,1,3,4,6,6,10,11,13,14,16,17,17,19,19,20,20,20,20,21,21,19,22,22,20,23,24,23,23,24,25,25,25,26,26,29,29,29,29,29,30,28,30,30,29,29,30,30,30,29,30,30,29,29,30,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,30,31,31,31,30,31,31,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,30,31,31,30,30,31,31,30,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,30,31,30,30,30,30,29,30,29,29,29,30,27,27,30,29,29,30,30,29,30,31,30,30,30,30,30,30,31,31,30,31,31,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,30,28,30,30,29,30,29,30,29,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,29,30,30,30,29,30,30,29,29,28,29,28,27,29,27,26,25,24,27,28,26,26,28,28,25,28,28,28,26,29,29,27,29,29,29,28,28,28,27,26,27,28,27,28,28,28,28,29,29,29,29,29,28,29,28,29,28,28,29,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,30,29,30,30,29,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,31,31,30,31,31,30,30,31,31,30,31,31,31,30,31,30,30,31,31,30,31,31,30,31,31,31,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,29,28,30,29,27,27,29,29,27,26,26,23,25,22,24,27,28,30,28,30,28,30,30,29,28,30,30,30,28,29,29,30,27,30,30,28,28,30,29,27,29,30,28,28,30,29,28,29,30,30,28,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,31,31,30,31,30,30,30,30,30,30,29,30,30,29,29,28,30,30,28,28,30,29,27,29,29,27,27,28,29,29,28,29,30,29,28,29,29,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,28,29,30,29,26,29,28,29,29,30,29,29,30,30,30,28,29,29,29,28,30,29,28,29,30,30,28,29,30,30,29,30,30,30,30,29,30,30,30,29,29,29,29,28,27,29,29,27,28,29,30,28,29,29,28,29,29,29,30,30,29,29,29,29,29,29,30,29,29,29,30,29,29,29,29,28,29,29,28,29,29,29,28,29,29,29,28,29,28,29,30,29,29,29,30,30,30,30,30,30,29,30,29,29,29,29,28,29,28,29,29,28,28,28,29,29,28,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31],[29,28,28,28,27,28,27,26,26,26,24,24,23,22,22,20,21,18,16,17,15,13,12,11,7,6,5,4,3,3,1,0,1,3,4,5,6,7,11,12,15,15,16,18,19,19,19,18,19,20,19,18,21,21,19,21,23,21,22,22,24,23,23,25,25,28,28,29,29,28,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,31,30,30,30,30,31,30,31,31,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,29,30,28,28,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,29,30,31,30,30,30,31,30,30,31,31,30,30,31,30,30,31,31,31,30,31,31,31,31,30,30,30,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,30,30,30,29,29,30,29,29,29,28,28,28,28,28,27,25,26,26,26,27,27,27,28,26,28,28,27,27,28,27,26,28,28,28,28,28,28,26,27,28,28,27,27,28,28,28,29,28,30,28,29,29,28,29,29,29,28,29,29,29,29,29,29,29,28,29,29,29,29,29,28,29,28,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,28,29,30,29,29,29,29,29,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,30,31,31,29,31,31,30,30,31,31,30,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,28,29,30,29,28,25,28,24,27,24,24,28,28,30,29,30,29,30,30,30,29,30,30,29,28,29,28,29,27,30,30,28,29,30,30,28,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,31,30,30,30,31,31,31,30,31,30,30,30,30,30,30,30,30,30,29,30,29,30,30,28,29,30,29,27,29,29,27,29,28,29,28,28,29,30,29,29,30,29,30,30,30,30,30,30,30,31,31,30,30,31,31,31,30,30,29,30,29,28,29,30,29,26,29,29,29,30,29,29,29,30,30,30,29,29,30,30,29,30,29,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,29,29,30,30,29,29,29,28,29,29,28,29,29,29,28,29,29,28,30,29,30,30,30,29,29,29,29,30,29,30,29,30,29,29,30,30,29,30,29,29,29,28,28,29,29,28,28,29,28,29,29,28,29,30,29,29,29,30,30,30,30,30,30,29,30,29,30,29,29,29,29,28,29,29,28,28,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,30,30,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[29,28,28,28,28,28,28,27,26,26,25,24,25,22,23,22,21,19,19,17,16,15,13,12,9,8,6,5,4,3,3,1,0,1,3,4,6,6,7,10,13,14,15,17,18,19,19,19,20,20,19,20,22,22,20,22,24,23,23,24,25,24,25,26,27,29,28,29,29,29,30,30,30,31,30,30,30,31,30,30,31,31,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,29,30,27,28,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,29,30,31,30,30,30,31,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,30,30,30,30,30,29,28,29,29,27,26,26,29,28,26,28,29,28,26,29,29,28,27,29,27,27,29,29,28,30,29,29,29,28,29,29,29,29,29,29,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,28,29,29,29,28,26,27,23,27,23,25,28,29,30,29,30,29,30,30,30,29,30,30,29,29,29,28,29,27,29,30,28,28,30,30,28,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,29,30,31,29,30,30,30,28,30,30,28,29,29,30,29,28,29,30,29,29,29,29,30,30,30,30,31,30,31,31,31,30,31,31,31,31,30,30,29,30,29,28,29,29,29,27,29,29,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,31,31,30,31,31,30,30,30,31,30,29,28,30,30,28,29,30,30,28,30,30,29,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,30,31,31,30,30,30,30,29,30,30,30,29,29,30,30,30,30,30,30,31,30,30,30,31,31,31,31,31,31,30,31,30,31,30,30,30,30,30,30,30,29,29,30,30,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[28,28,28,28,27,29,28,27,27,27,26,26,25,24,24,23,22,20,19,19,17,16,14,12,12,10,8,6,5,5,4,3,2,0,1,3,4,5,5,7,10,12,13,15,17,18,18,18,19,20,19,20,21,22,20,22,23,22,23,24,25,25,25,26,27,29,29,29,30,29,30,30,30,30,30,30,30,30,31,30,31,31,30,30,31,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,29,29,30,28,28,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,30,30,30,30,30,29,28,29,29,28,26,26,29,28,26,28,29,28,26,29,29,28,27,29,28,27,29,28,29,29,28,29,28,28,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,29,30,30,29,30,29,30,29,29,30,29,30,30,30,30,29,29,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,29,31,30,29,29,30,29,29,27,28,25,28,25,26,28,29,30,29,31,29,30,30,30,29,30,30,30,29,29,29,30,27,30,30,29,28,31,30,29,30,30,30,30,31,30,30,30,31,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,31,29,30,30,30,28,30,30,29,29,29,30,30,29,29,30,30,29,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,28,29,30,30,27,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,30,31,30,30,31,30,31,31,30,31,31,30,30,30,30,30,30,29,30,30,28,29,30,30,28,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,30,30,31,31,30,31,30,30,30,30,30,29,30,31,30,29,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,30,31,30,31,30,30,30,30,29,29,30,29,29,30,30,31,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[29,29,29,30,29,30,28,28,28,28,26,27,26,26,26,25,24,22,22,22,21,18,17,16,14,14,13,10,7,6,5,4,3,2,0,1,3,4,5,5,7,10,12,14,16,17,18,18,19,20,20,20,21,22,20,22,23,22,22,23,24,24,24,25,26,28,29,29,29,29,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,30,30,30,30,31,30,30,31,31,31,30,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,28,29,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,30,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,29,29,29,28,28,28,27,26,26,28,27,26,28,28,28,26,29,28,27,26,28,28,26,28,27,29,28,28,28,27,27,28,29,27,28,28,28,28,29,28,30,29,29,29,29,29,29,29,28,28,28,28,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,29,30,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,30,31,30,29,30,30,29,29,28,29,26,28,26,26,29,30,30,29,30,30,30,30,30,29,30,30,30,29,29,29,30,27,30,30,28,29,31,30,29,30,31,30,30,31,30,29,30,31,31,30,30,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,29,30,31,29,30,30,30,29,30,30,29,29,29,30,29,29,29,30,29,29,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,30,30,29,30,29,29,29,30,29,28,30,29,30,30,30,30,30,30,30,31,29,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,31,30,31,30,30,30,30,30,30,30,29,30,30,29,30,30,30,29,30,30,29,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,29,30,30,29,30,30,30,29,29,30,29,30,30,29,30,30,30,30,30,31,31,30,31,31,31,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[29,29,29,29,28,29,28,27,28,27,26,26,26,25,26,24,24,23,21,22,20,19,19,17,16,15,14,12,9,8,6,4,4,2,1,0,1,3,4,4,5,6,9,12,14,15,16,18,19,19,18,19,21,22,20,22,23,22,23,23,24,24,24,26,26,29,29,29,29,30,30,30,30,30,30,30,30,31,30,30,31,31,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,28,28,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,31,31,30,31,31,31,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,30,30,30,29,29,29,28,29,28,27,26,25,28,28,26,27,29,28,26,28,29,28,27,29,28,26,28,28,29,29,28,29,28,28,28,29,28,28,29,29,29,29,29,30,29,30,30,29,29,30,29,29,29,29,29,29,30,29,29,29,29,30,29,30,29,29,29,29,30,29,29,29,29,30,29,29,30,29,30,30,29,30,30,29,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,30,30,31,30,29,30,30,29,30,28,28,25,28,25,27,28,29,30,30,30,30,30,30,30,29,30,30,29,29,29,29,30,27,30,30,29,28,30,30,28,31,31,30,30,31,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,31,29,30,30,30,29,30,30,29,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,30,30,30,29,30,29,28,29,30,29,28,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,31,31,30,30,31,30,30,30,30,30,30,29,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,29,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,30,30,30,30,31,30,30,30,31,30,30,30,30,30,29,30,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,29,29,29,29,30,29,29,29,29,28,28,28,28,28,26,25,25,24,23,23,22,22,19,17,17,16,14,12,10,9,6,5,4,3,2,0,1,3,4,5,5,7,10,13,15,16,17,17,17,18,19,19,21,20,21,22,22,22,23,24,24,24,25,26,29,29,29,30,30,30,30,30,31,30,30,30,31,30,30,31,31,30,30,31,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,28,28,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,29,29,28,29,28,27,26,24,28,28,26,26,29,28,25,28,29,28,25,29,27,26,28,28,28,29,28,29,28,28,29,29,28,29,29,29,29,29,30,31,29,29,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,30,29,30,29,29,29,28,30,29,29,29,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,29,29,30,30,28,28,28,27,28,26,28,29,30,31,30,31,29,30,30,30,29,30,30,30,30,29,29,29,27,29,30,29,29,31,30,29,30,30,30,30,31,30,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,29,31,31,29,30,29,30,30,28,30,30,30,29,30,30,30,30,30,30,31,30,31,31,30,30,31,31,30,30,30,30,29,30,29,28,29,29,29,27,29,29,29,30,30,30,30,30,31,31,30,31,31,30,30,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,29,30,31,29,30,30,30,29,30,30,29,30,30,30,31,31,30,30,31,31,30,31,31,31,30,31,31,30,31,31,31,30,30,31,30,30,31,30,30,30,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,29,30,29,30,28,28,29,28,28,28,27,27,28,27,26,25,24,23,22,22,22,20,18,18,17,15,14,12,8,7,6,5,4,3,2,0,1,3,4,5,5,7,10,13,14,16,16,17,17,18,19,21,19,21,22,22,22,22,23,23,24,25,26,28,29,29,29,30,30,30,30,30,31,30,30,31,30,30,31,31,30,30,31,31,30,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,29,29,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,30,31,31,30,31,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,31,30,30,30,30,30,29,29,29,28,28,27,27,26,26,28,27,26,27,28,28,26,28,28,27,26,29,28,26,28,28,28,29,28,28,28,27,28,29,28,28,28,29,29,29,28,30,29,30,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,29,29,29,29,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,30,31,30,30,30,30,29,29,28,28,26,29,26,28,29,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,27,30,30,29,28,31,30,29,30,31,30,30,31,31,30,30,31,31,30,30,31,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,29,30,30,30,29,30,30,30,30,29,30,30,28,30,30,30,29,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,30,30,30,29,30,30,28,28,30,29,27,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,31,30,31,31,30,30,30,30,30,30,29,30,30,29,30,30,30,29,30,30,29,30,30,30,30,31,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,29,30,31,30,30,30,31,31,31,31,31,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,29,30,29,29,29,29,29,29,28,28,28,28,27,26,26,25,24,23,23,22,20,20,19,17,16,15,11,10,7,5,5,4,3,2,0,1,3,4,5,5,7,11,13,15,15,16,17,19,19,20,20,22,22,22,23,23,23,24,24,25,26,28,29,29,30,30,31,30,31,31,31,30,31,31,31,30,31,31,30,31,31,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,29,29,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,30,29,28,29,28,27,27,25,28,28,27,26,29,28,26,28,28,28,27,29,28,27,28,28,29,29,28,29,28,29,29,29,28,29,29,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,30,29,29,29,28,30,29,29,30,29,29,30,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,29,30,30,29,29,29,28,26,29,27,29,29,30,31,30,31,29,30,30,30,29,30,30,30,29,29,28,29,27,29,29,29,28,31,30,29,30,31,30,30,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,29,31,31,30,30,29,30,30,28,30,30,30,29,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,30,30,30,29,30,30,27,28,29,29,27,29,30,30,30,30,30,30,31,31,31,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,29,30,31,30,29,30,31,29,30,30,31,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,30,30,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,29,29,30,29,28,29,28,28,28,28,27,27,26,25,24,24,24,23,20,21,20,18,18,16,13,13,10,7,5,5,5,3,2,0,1,3,4,5,5,8,12,14,14,15,17,18,18,19,19,21,21,22,22,22,23,23,23,24,26,28,29,29,29,30,30,30,31,31,31,30,30,31,31,30,31,31,31,31,31,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,29,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,29,28,29,28,27,27,25,28,28,27,27,29,29,26,28,29,28,27,29,28,27,28,27,29,29,29,29,28,28,29,29,28,29,29,29,29,30,29,30,30,30,29,30,30,30,30,29,29,29,29,30,29,29,29,29,29,29,29,29,30,29,29,29,30,29,29,29,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,29,30,30,29,29,29,29,27,29,27,29,29,30,31,30,31,29,30,30,30,29,30,30,30,29,29,29,30,27,29,30,28,28,30,30,28,30,31,30,30,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,31,30,30,30,29,30,30,27,30,30,29,29,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,30,30,29,30,29,28,28,29,29,26,29,29,30,29,30,30,30,31,31,31,30,30,30,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,30,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,29,30,31,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,29,30,29,29,29,29,29,29,28,27,27,26,26,25,24,24,23,22,22,21,19,19,17,14,14,12,9,6,5,5,5,3,2,0,1,3,4,5,6,8,12,13,13,15,16,17,18,19,21,21,21,23,23,23,23,23,25,25,28,29,29,30,29,30,30,30,30,31,30,30,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,28,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,29,29,28,29,28,28,27,24,28,28,27,27,29,28,26,28,29,28,27,29,28,27,28,27,29,29,28,29,28,28,29,29,28,29,29,29,29,29,29,30,29,30,30,29,29,30,29,29,29,29,29,30,29,29,29,29,29,30,29,30,29,29,29,28,30,29,29,29,28,29,29,28,30,29,29,29,29,29,29,29,30,30,29,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,29,29,28,29,28,29,29,30,31,30,31,29,30,30,30,29,30,30,30,29,29,29,29,27,29,29,29,28,31,30,29,30,30,30,30,31,30,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,30,29,30,30,27,30,30,30,29,30,30,30,30,30,30,31,30,31,31,30,30,31,31,30,30,30,30,29,30,29,27,28,29,29,26,29,29,29,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,31,29,30,30,30,28,30,30,29,30,30,30,31,30,30,30,31,30,30,31,31,31,31,31,31,30,31,31,31,30,30,31,30,30,31,30,30,30,31,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,29,30,29,29,29,29,28,28,28,28,27,26,26,24,24,24,23,22,23,22,20,20,18,15,16,16,13,9,7,6,5,6,3,2,0,1,3,4,5,6,9,11,13,14,14,15,17,17,19,20,20,21,22,23,22,22,25,25,28,28,29,30,30,30,30,30,30,31,30,30,31,30,30,31,31,30,31,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,29,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,30,30,30,30,30,29,29,28,28,28,27,27,24,26,28,26,26,28,28,25,27,28,27,25,28,27,26,27,27,28,28,28,29,28,28,29,29,28,28,29,29,29,30,29,30,30,30,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,29,29,30,29,29,29,29,30,30,30,30,30,30,30,30,29,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,29,29,29,29,27,29,28,29,30,30,31,30,31,30,31,30,30,29,30,31,30,29,29,29,30,27,30,30,29,28,30,30,29,30,30,30,30,31,30,30,30,31,31,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,28,30,30,28,30,30,30,29,30,30,30,30,30,30,31,31,31,31,31,30,31,31,31,30,30,30,29,30,29,28,28,30,29,26,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,28,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,30,30,30,29,30,31,30,29,29,30,30,30,30,30,30,31,31,30,30,31,31,31,31,31,31,30,31,30,30,30,30,30,31,30,30,30,30,30,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,31,30,30,30,30,29,29,29,29,29,29,28,28,27,26,26,25,26,25,23,24,24,21,21,20,17,18,19,16,14,11,8,6,6,6,4,2,0,1,3,5,6,9,9,11,13,14,14,16,17,20,19,20,23,24,24,24,25,25,26,28,29,29,30,30,30,30,30,30,31,30,30,31,30,30,31,31,30,30,31,30,29,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,29,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,29,30,29,28,29,28,27,28,25,28,28,27,26,28,28,26,27,28,28,26,27,27,27,27,27,29,29,29,29,29,28,29,29,28,30,29,29,29,30,30,30,29,30,30,30,29,29,29,30,30,30,30,29,30,30,30,29,29,30,29,30,29,29,29,29,30,29,29,30,29,30,30,29,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,29,29,28,29,29,30,29,30,31,30,30,30,30,30,30,29,30,30,30,29,29,29,29,26,29,29,28,27,30,30,28,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,28,30,30,27,30,30,29,29,30,30,30,30,30,30,30,30,31,31,30,30,31,31,30,30,30,30,29,30,29,27,27,29,29,25,28,29,30,30,30,30,30,30,30,31,30,30,30,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,31,30,30,30,31,31,30,31,31,31,31,31,31,30,30,30,30,30,31,30,30,30,31,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,28,28,27,27,26,25,26,25,23,24,23,21,23,21,17,19,19,18,15,14,10,7,6,5,5,3,1,0,1,3,6,7,7,9,11,12,13,15,16,17,18,19,21,20,23,22,23,24,25,28,28,29,29,30,30,30,30,30,31,30,30,31,30,30,31,31,30,30,30,30,30,29,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,29,29,29,28,28,28,27,27,27,23,26,27,27,25,27,27,25,26,27,27,25,27,26,26,27,27,27,27,27,28,28,27,28,28,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,27,29,28,29,29,28,29,29,28,29,29,29,29,29,29,29,29,29,30,29,29,30,29,29,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,29,29,27,28,28,29,30,30,31,29,30,29,31,30,30,29,30,31,30,29,29,29,29,27,29,29,28,27,30,29,28,30,30,30,29,30,30,30,30,30,30,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,29,30,30,29,30,27,29,28,26,30,30,29,29,30,30,30,30,30,30,30,30,31,31,30,30,31,31,30,31,30,30,29,29,29,27,27,29,28,24,29,29,30,29,30,29,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,29,30,30,29,30,30,30,28,30,29,27,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,30,30,29,29,30,29,30,30,29,30,31,30,30,30,31,30,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,28,27,27,26,25,26,25,23,24,24,22,23,22,18,20,20,19,16,15,13,10,7,6,6,5,3,2,0,1,3,4,5,6,9,10,9,13,14,17,16,17,20,20,22,22,23,24,24,28,28,28,29,29,30,30,30,31,31,30,30,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,29,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,29,29,29,29,27,28,27,26,27,24,26,27,27,25,27,27,26,26,27,27,26,27,26,26,27,26,28,28,27,28,28,28,28,28,28,29,29,29,29,29,29,30,29,29,30,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,27,29,28,29,29,28,29,29,27,29,29,29,29,29,29,29,29,29,30,29,30,29,29,29,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,29,29,27,28,28,29,29,30,31,30,31,29,30,30,30,29,30,30,30,28,28,29,29,26,28,29,28,27,29,29,28,29,30,30,29,30,30,29,29,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,29,27,30,29,25,29,30,29,28,29,30,30,29,30,30,30,30,31,31,30,30,31,31,30,30,30,29,29,29,29,27,27,28,28,24,28,29,29,29,29,29,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,29,30,30,28,30,30,29,27,29,30,27,29,29,30,30,30,30,30,30,30,29,30,30,30,30,31,31,30,31,30,31,30,30,30,29,30,30,30,29,29,30,29,30,30,30,29,31,30,30,30,31,30,31,31,31,31,30,31,30,31,30,30,30,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,28,28,28,27,26,26,25,25,25,23,23,24,22,23,23,19,20,21,20,17,16,14,13,11,8,7,7,6,3,2,0,1,3,4,4,7,9,9,9,12,15,15,14,17,20,22,21,23,24,23,28,27,28,28,29,30,30,30,30,30,29,30,31,30,29,30,31,29,30,30,30,30,29,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,29,30,30,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,31,31,30,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,29,29,29,28,26,27,26,25,26,23,26,27,26,25,27,27,26,26,27,26,25,27,26,25,26,26,27,26,27,27,27,27,28,28,27,28,29,28,28,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,28,29,28,29,28,28,28,26,29,28,28,29,27,28,29,27,28,28,29,28,29,29,29,29,29,30,29,30,29,29,29,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,29,30,29,28,28,29,27,28,28,29,29,30,30,29,30,29,30,30,30,29,30,30,29,28,28,28,28,26,28,29,27,27,29,29,28,29,29,29,28,30,30,29,29,30,30,29,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,29,30,29,29,29,27,29,28,25,29,29,28,28,29,29,30,29,30,29,30,30,30,31,30,30,30,30,30,30,29,29,28,29,29,26,27,29,28,24,28,28,29,28,29,29,30,29,30,30,29,29,30,30,29,30,30,30,30,30,31,30,30,31,30,30,31,30,31,31,30,30,31,30,30,30,30,30,29,29,30,30,28,29,29,29,26,28,29,26,28,29,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,28,29,30,28,29,30,29,29,30,30,30,30,30,30,30,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,28,28,27,26,26,25,26,25,23,24,24,22,24,23,18,22,21,21,19,18,16,16,15,12,9,8,7,6,4,2,0,1,3,4,4,5,7,7,8,11,12,13,15,16,19,19,21,22,23,26,27,28,29,29,30,29,30,30,30,29,30,30,30,29,30,31,30,29,30,30,30,29,30,30,30,30,31,30,30,31,30,30,31,30,31,30,31,31,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,30,31,30,30,31,31,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,31,30,31,31,29,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,29,30,30,30,30,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,31,31,30,31,31,30,31,30,31,31,30,30,31,31,29,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,29,30,30,29,29,28,28,28,25,26,25,24,25,21,24,25,24,23,25,24,23,24,26,25,23,25,25,25,25,25,26,26,26,26,26,26,28,27,26,28,28,28,28,28,28,29,29,29,29,28,29,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,27,28,28,28,28,27,28,28,27,27,28,28,28,28,29,28,29,29,29,29,28,29,29,29,29,30,29,30,30,30,30,31,31,31,31,30,31,31,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,30,29,29,29,28,28,29,26,29,27,29,30,30,31,29,30,29,30,30,29,29,30,30,30,29,29,29,29,26,29,29,28,27,29,29,28,29,29,30,29,29,29,29,29,30,30,29,29,30,30,29,30,31,30,29,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,30,30,30,30,30,29,29,29,29,29,25,29,27,25,28,29,28,28,28,29,29,29,29,29,30,29,30,31,30,29,30,31,30,30,29,29,28,29,29,26,25,27,28,23,27,28,28,28,29,29,30,29,30,30,28,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,31,31,31,30,30,30,30,30,30,30,30,29,29,29,29,27,29,29,28,26,28,28,26,28,28,29,29,29,29,29,29,29,29,30,30,29,29,30,30,29,30,30,30,29,29,30,28,30,29,28,28,28,29,28,28,29,29,28,30,30,29,29,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,31,30,30,30,30,30,30,29,29,30,29,28,28,27,28,27,25,27,25,21,24,24,21,24,22,19,22,22,22,20,20,19,18,17,14,12,9,8,7,5,4,2,0,1,3,4,3,6,6,6,7,10,10,13,14,16,18,20,21,22,25,26,27,27,28,29,29,30,30,30,29,29,30,30,29,30,30,30,28,30,30,29,29,29,30,29,29,30,30,30,30,31,30,30,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,30,30,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,29,30,30,30,30,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,31,31,30,30,31,31,30,30,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,29,30,29,29,28,28,27,27,25,27,26,23,24,21,23,25,25,22,25,25,22,24,26,26,25,26,25,25,26,26,27,27,27,27,26,27,28,27,27,28,28,28,29,29,29,30,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,28,29,28,28,29,27,28,28,28,28,27,28,29,27,27,28,29,27,29,28,28,28,29,29,28,29,29,29,28,29,30,29,30,30,30,30,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,31,31,31,31,30,30,30,30,29,29,29,29,28,28,28,29,26,28,28,29,30,30,31,30,30,29,30,30,29,28,30,30,29,28,28,29,28,26,27,28,27,26,29,28,27,29,29,29,28,29,29,29,28,30,30,28,29,30,30,29,30,31,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,29,29,30,29,30,29,29,28,29,25,28,27,24,28,29,27,27,28,28,29,29,29,29,30,29,30,30,30,30,30,30,30,29,29,28,28,28,28,26,25,27,27,24,27,28,28,27,28,28,28,29,29,30,28,29,29,29,28,29,29,29,29,30,30,29,30,30,30,30,30,30,31,31,30,31,30,30,30,29,30,29,29,29,28,29,28,28,29,28,27,28,28,26,27,28,29,29,29,28,29,29,29,28,29,30,29,29,30,30,29,30,30,30,29,29,30,29,29,30,29,28,28,30,28,28,29,29,28,29,29,28,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,28,28,27,27,27,26,26,25,23,25,24,22,24,24,20,23,22,22,20,20,18,18,18,16,15,12,9,7,6,5,4,1,0,1,3,3,4,5,5,6,7,10,11,12,16,16,19,21,20,26,26,26,27,28,29,29,30,30,30,29,30,30,29,29,30,30,29,29,30,30,29,29,29,30,29,29,30,30,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,30,31,30,30,29,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,29,28,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,31,31,30,31,31,30,31,29,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,29,30,29,29,28,26,27,26,23,26,25,22,24,21,23,25,25,22,25,24,23,23,24,24,23,25,23,24,25,25,25,26,25,26,26,26,27,27,26,28,28,28,28,29,28,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,28,27,28,27,26,28,26,27,28,26,27,28,26,27,27,28,27,28,28,28,28,29,28,29,28,28,29,28,29,30,29,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,29,29,28,28,28,28,27,28,27,27,28,28,29,30,30,29,30,28,30,30,29,28,29,30,29,28,27,28,28,25,27,28,26,26,28,27,27,28,28,29,28,29,29,29,28,29,30,28,29,30,30,29,30,31,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,29,29,30,29,29,29,28,28,28,25,28,27,24,27,28,26,26,28,28,29,28,29,28,29,29,30,30,30,29,30,30,29,30,29,28,28,27,28,25,27,26,26,23,26,26,28,27,28,27,28,28,29,29,28,28,29,29,28,30,29,29,29,30,30,30,30,30,30,30,31,31,31,31,30,31,30,30,30,30,30,30,29,28,29,29,27,28,29,27,26,27,28,26,27,27,29,29,29,29,28,29,29,28,29,29,29,29,30,30,29,29,30,30,29,29,29,28,29,29,28,28,27,29,27,28,29,28,28,30,29,28,29,30,30,30,31,31,31,30,30,30,30,30,30,30,31,29,30,30,30,30,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,29,30,30,28,29,29,29,28,28,28,28,27,27,26,26,25,25,24,24,25,23,24,24,20,23,23,23,20,20,19,18,18,17,16,13,11,8,7,5,5,3,1,0,1,3,4,3,5,5,6,6,10,11,14,14,17,20,20,24,25,25,27,28,29,28,29,30,29,28,30,30,29,29,30,30,29,29,30,30,29,28,29,30,29,29,30,30,29,30,30,30,30,30,30,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,31,30,30,31,31,30,31,31,30,30,30,30,30,31,30,30,30,31,30,30,31,30,30,31,31,30,30,31,30,30,30,30,29,30,30,30,30,30,29,30,30,29,30,30,30,30,30,31,31,30,31,31,30,31,31,31,31,30,31,30,31,31,31,31,31,30,31,31,30,31,30,31,30,30,30,30,31,31,29,30,30,30,30,28,30,30,29,30,30,30,30,31,30,30,30,31,30,30,31,31,30,30,31,31,30,30,31,30,30,31,31,30,30,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,30,30,30,30,31,30,30,30,30,30,31,31,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,28,30,31,30,29,30,30,29,30,31,31,30,31,31,30,31,30,29,30,31,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,29,29,29,28,29,28,28,27,26,26,25,22,24,23,21,23,20,22,23,23,21,24,24,23,24,25,25,23,26,24,24,25,25,25,25,25,26,25,24,26,27,26,27,27,27,27,28,28,29,28,29,28,29,28,28,28,28,28,28,28,28,28,28,28,28,27,28,27,27,27,27,27,25,28,27,27,27,25,26,27,25,26,27,26,26,27,27,27,27,28,27,27,28,28,28,27,28,29,28,29,29,30,30,31,30,31,30,30,31,31,30,31,30,31,29,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,30,31,31,30,30,31,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,31,30,30,30,30,29,30,29,28,28,29,28,27,27,28,27,28,27,28,29,29,30,29,30,28,30,30,29,29,29,30,30,29,28,29,29,27,28,29,28,27,29,29,28,28,29,29,28,28,29,29,28,29,29,28,29,30,30,29,29,30,30,29,30,30,30,30,30,31,30,30,30,30,31,30,31,30,30,30,31,30,30,30,30,30,30,30,29,30,30,29,28,29,28,29,29,29,28,28,24,27,25,25,27,28,26,27,28,28,28,29,29,28,29,29,30,30,29,29,30,30,29,29,28,28,28,28,28,27,26,27,28,23,28,28,28,27,27,26,28,27,29,29,27,28,29,29,27,29,29,29,29,29,30,29,29,30,30,29,30,30,30,30,30,30,29,30,29,29,29,29,29,28,28,28,26,28,28,27,26,27,28,26,27,26,27,28,28,28,28,28,29,28,29,29,29,28,29,29,29,29,29,29,28,28,29,27,28,29,27,27,27,28,26,27,28,28,27,29,29,27,28,29,30,29,30,30,30,29,29,29,29,29,29,29,30,29,29,29,29,29,30,30,30,30,30,31,30,30,31,30,31,30,30,31,30,31,31,31,30,30,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,29,30,30,29,30,29,29,29,29,28,28,28,27,27,25,27,26,21,24,25,21,23,23,19,22,23,23,21,20,19,18,18,17,16,15,13,11,9,6,5,4,3,1,0,1,3,3,3,4,5,5,7,10,13,14,16,18,19,22,23,26,27,28,29,28,29,29,30,29,29,30,30,29,29,30,29,28,30,30,28,28,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,31,30,30,30,31,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,29,29,30,30,30,30,31,30,30,30,30,30,30,30,31,29,30,30,30,29,31,31,30,30,30,31,30,31,30,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,31,31,30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,28,28,27,25,25,24,22,24,23,22,22,20,22,22,23,20,22,23,21,23,24,24,22,25,24,24,24,24,26,25,24,25,25,25,27,27,25,28,28,27,28,29,29,29,28,29,29,28,29,29,29,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,28,25,28,28,27,27,27,27,27,26,26,27,28,27,28,27,27,27,28,28,28,27,28,28,27,28,29,29,30,29,29,30,30,31,31,30,30,30,31,30,30,30,31,30,30,31,30,30,30,30,31,30,31,31,31,31,31,31,31,31,30,31,31,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,31,31,31,30,31,31,31,31,30,30,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,28,28,27,28,27,26,28,27,29,29,30,30,28,29,29,29,29,28,28,29,30,29,28,28,29,29,26,28,28,27,26,28,28,28,28,28,29,28,29,29,28,27,29,29,28,29,30,29,28,29,30,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,29,28,28,28,28,26,27,22,27,25,24,27,28,26,26,26,27,29,28,29,29,29,29,29,30,30,30,30,30,30,30,29,28,28,28,28,26,25,28,26,23,26,27,27,27,28,26,27,28,29,29,27,27,29,28,28,28,28,28,28,29,29,28,29,30,30,30,30,30,30,30,29,30,30,30,30,28,30,30,29,29,28,28,27,28,28,27,26,27,27,24,27,26,27,28,28,27,27,28,28,27,28,29,28,28,28,29,28,29,29,29,29,29,29,28,29,29,28,28,27,28,26,27,28,27,27,29,28,27,28,29,29,29,30,30,30,29,29,29,28,29,29,30,30,29,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,30,30,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,31,30,30,30,30,30,29,30,29,30,29,29,29,28,28,27,25,28,25,20,26,25,22,25,23,20,23,24,24,22,22,21,20,20,19,18,16,14,12,10,8,6,4,5,3,1,0,2,2,4,4,6,5,7,9,12,14,17,18,18,22,24,26,26,27,28,28,29,30,29,28,29,30,29,28,29,30,29,28,30,30,29,28,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,31,30,30,30,31,30,30,30,30,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,31,30,31,30,31,30,31,31,30,30,30,31,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,28,30,30,30,30,30,30,31,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,30,30,30,31,30,30,31,31,31,30,30,31,31,31,31,31,30,31,31,31,30,30,31,30,30,30,30,30,30,30,31,31,31,31,31,30,31,31,31,30,31,31,30,30,30,30,30,30,30,30,31,30,31,30,30,31,30,30,31,30,29,31,31,31,30,31,31,30,31,30,30,30,30,30,30,30,31,31,30,30,31,31,31,31,30,31,31,31,30,30,30,30,30,29,29,29,29,28,29,28,28,27,26,26,25,23,25,23,21,23,20,21,24,24,20,23,23,22,22,24,25,23,25,25,25,25,26,26,26,26,26,27,26,27,27,26,28,28,27,29,29,29,30,29,29,29,30,29,30,29,29,29,29,29,29,28,28,28,29,29,29,28,29,27,28,28,25,29,27,27,28,26,27,27,25,26,27,27,27,28,27,28,27,29,28,28,28,28,29,28,29,29,28,30,30,30,30,31,31,31,31,30,31,31,30,31,31,31,30,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,31,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,31,30,31,30,30,31,30,30,31,31,31,30,30,30,30,30,29,28,29,28,28,28,27,28,26,27,28,29,29,30,30,29,29,28,30,30,29,29,29,30,29,28,28,29,28,25,26,28,27,26,28,28,27,28,28,28,28,29,29,29,27,29,30,27,29,30,30,29,30,31,30,29,30,30,30,30,31,31,31,31,30,31,31,30,31,31,31,30,31,30,30,30,30,30,30,30,29,30,30,29,30,29,28,28,29,29,27,28,24,27,25,24,26,27,25,26,27,28,28,28,28,27,29,29,29,30,29,29,30,30,29,29,29,27,27,27,27,26,25,26,26,23,26,27,26,26,26,26,27,27,29,29,27,27,29,28,27,29,28,29,28,29,30,29,29,30,30,30,30,30,31,31,30,30,30,30,30,29,29,29,29,28,29,28,28,28,28,27,26,27,27,25,26,26,28,28,29,27,27,29,29,28,28,29,29,29,29,30,29,29,29,29,29,29,29,29,28,29,28,28,28,29,27,27,28,28,27,29,29,28,28,29,29,30,30,30,31,30,30,29,29,29,29,30,30,29,30,30,30,30,31,30,30,30,30,31,30,31,31,30,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,30,30,30,30,29,29,28,29,28,29,28,28,27,27,26,27,25,25,25,25,23,25,25,21,24,24,24,22,22,20,20,19,18,18,16,14,13,11,8,6,5,4,4,4,1,0,1,3,3,4,5,6,7,10,11,15,17,16,22,23,25,27,27,28,28,29,30,30,28,30,30,29,28,30,30,29,28,30,30,28,28,29,30,29,29,30,29,29,30,30,30,30,30,31,30,31,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,31,31,30,30,31,30,30,31,31,31,30,31,30,31,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,28,30,30,30,30,30,31,30,31,31,31,30,31,31,31,31,31,30,30,31,31,30,30,31,31,31,31,31,31,31,30,31,30,30,31,31,30,30,31,30,29,30,30,30,29,28,30,29,29,30,30,30,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,31,30,30,30,30,31,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,31,30,30,30,31,31,31,31,30,31,30,31,30,30,30,29,29,30,30,30,30,29,30,30,30,30,29,31,31,30,30,30,30,29,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,28,28,27,24,26,24,22,24,23,20,22,19,22,23,23,21,24,24,23,22,23,24,23,24,23,24,24,24,25,26,25,25,25,24,27,27,25,27,27,28,28,29,28,30,28,29,29,28,29,29,29,29,29,29,28,28,28,28,28,28,28,28,28,28,27,27,27,24,27,26,26,27,25,27,25,24,26,26,26,27,27,28,28,27,28,27,28,28,27,28,27,28,28,27,30,30,29,30,30,31,31,30,30,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,31,30,30,30,30,29,30,30,30,29,31,31,30,30,31,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,30,31,30,30,30,31,30,30,30,30,29,30,29,27,27,28,27,28,27,27,26,27,27,28,29,29,30,28,29,28,30,30,28,28,29,30,29,28,27,28,28,26,27,28,27,27,28,28,27,28,28,28,28,29,29,28,27,28,29,27,29,30,30,29,30,30,30,29,30,30,30,30,30,31,30,30,30,31,31,30,31,30,30,30,31,30,31,30,30,30,30,30,28,29,29,28,28,29,28,28,28,28,27,28,22,26,24,23,25,26,26,26,27,28,28,28,29,28,28,29,30,30,29,29,30,30,29,29,29,28,27,27,28,26,27,28,27,24,27,27,28,26,27,25,27,27,29,29,27,27,29,28,27,28,28,28,27,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,27,29,28,26,27,28,26,25,26,27,23,26,26,27,28,29,27,27,28,28,27,28,29,29,28,29,29,29,29,29,29,28,28,28,27,28,28,27,27,27,28,26,27,28,27,26,29,28,27,28,29,29,29,30,30,30,30,30,29,29,28,29,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,31,31,30,30,30,31,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,29,30,30,29,30,29,29,29,29,29,28,28,28,27,26,27,26,24,26,26,23,26,25,20,24,25,25,22,22,21,21,20,19,19,17,15,15,13,11,7,6,5,4,4,4,1,0,1,3,4,4,6,8,11,10,13,16,16,21,23,25,26,27,28,28,29,29,29,28,30,30,29,28,29,30,29,28,30,30,29,29,29,30,29,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,30,29,30,30,30,30,30,28,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,31,30,30,30,29,30,31,30,30,30,30,29,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,28,30,29,29,30,30,30,30,30,30,29,30,30,30,30,30,31,29,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,30,31,31,30,30,31,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,28,30,30,29,29,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,31,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,29,29,28,29,29,27,28,27,27,27,25,25,24,22,24,22,20,22,18,21,22,22,20,22,22,22,22,23,24,22,24,24,24,24,25,25,25,24,25,26,25,26,27,26,28,28,27,28,29,28,30,29,29,29,28,29,29,29,29,28,28,28,29,28,28,28,28,28,28,27,28,26,27,28,25,28,27,26,27,26,26,26,25,26,27,27,26,25,27,27,27,28,27,28,28,27,28,27,28,28,27,29,29,29,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,31,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,31,30,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,28,28,28,28,27,28,29,28,28,28,29,29,30,30,29,29,29,30,29,28,29,29,30,30,29,28,29,29,27,28,28,29,27,28,29,28,29,28,29,29,28,29,29,28,28,29,28,29,30,30,28,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,29,29,29,29,29,29,29,29,28,28,27,27,22,26,24,23,26,26,25,26,26,28,28,29,28,28,29,28,30,30,29,29,30,30,30,30,28,27,28,28,28,26,25,26,26,23,25,27,26,26,26,25,27,28,28,29,28,27,28,28,28,28,28,29,28,28,30,29,28,30,30,29,30,30,30,30,30,30,29,30,30,29,29,28,28,28,28,28,26,28,28,26,25,27,27,23,26,25,26,28,28,27,27,28,28,28,28,28,29,28,28,29,28,29,29,29,28,28,28,27,28,28,27,27,27,27,26,26,27,26,26,28,28,28,27,28,28,28,29,29,30,29,29,28,28,28,29,29,29,29,29,29,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,29,29,27,29,28,25,28,27,23,26,25,22,24,25,21,25,25,25,22,23,22,22,22,20,20,18,17,16,15,13,11,9,8,6,4,4,4,1,0,2,3,4,5,6,9,9,13,15,15,20,20,23,24,26,27,27,28,28,28,28,29,29,29,27,29,29,28,28,29,29,28,28,28,29,29,28,29,28,29,29,29,29,29,29,30,29,30,30,30,29,30,30,29,29,29,29,30,30,30,29,29,29,30,30,30,30,30,30,29,30,30,30,29,30,30,30,29,29,29,30,30,30,30,30,31,30,30,30,30,30,30,30,29,29,30,30,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,31,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,28,29,29,29,29,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,31,29,30,30,29,29,30,30,29,30,29,29,29,30,30,29,30,30,29,30,30,29,29,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,28,29,29,27,28,27,26,26,24,24,23,22,24,22,20,21,19,20,23,22,20,24,23,21,22,25,25,23,26,26,25,24,26,27,26,26,25,26,26,27,28,26,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28,27,27,28,26,27,28,27,28,27,27,27,25,26,27,26,26,27,27,27,26,27,28,27,27,26,28,27,27,29,26,29,29,29,29,30,30,30,30,29,30,30,29,29,30,30,29,30,31,30,29,30,30,30,30,30,30,30,31,31,30,30,31,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,29,29,30,30,30,30,30,29,30,30,31,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,30,29,30,30,30,29,30,30,30,30,29,30,30,30,30,30,30,29,29,30,28,28,28,27,27,27,28,27,27,27,28,29,28,30,30,28,29,28,29,29,28,28,29,29,29,29,27,28,29,27,27,28,28,26,28,28,27,27,29,28,28,29,28,28,27,29,29,27,28,29,29,28,30,30,29,29,30,30,29,29,30,29,29,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,30,30,28,30,29,28,29,28,27,28,27,26,27,26,22,26,23,23,26,25,24,26,27,27,28,27,27,27,28,28,29,29,28,28,28,29,28,28,28,27,27,27,26,26,24,26,26,23,24,26,26,25,26,25,26,27,28,28,27,27,27,27,27,28,28,28,27,29,29,28,28,30,29,29,30,30,30,30,30,30,30,30,30,28,29,29,28,29,27,28,27,27,27,26,26,26,26,23,24,24,25,27,28,27,26,28,27,27,28,28,28,28,28,29,28,29,28,28,29,27,29,28,28,28,27,27,27,28,26,26,28,26,26,28,28,27,27,28,29,28,29,29,29,29,29,28,28,29,29,29,29,29,30,30,30,29,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,31,30,30,30,31,30,30,30,30,30,30,30,30,29,29,29,29,28,29,27,27,28,27,24,27,26,23,27,25,21,25,26,26,23,24,23,22,23,22,21,19,18,17,16,14,13,9,8,7,6,4,4,4,2,0,2,3,4,5,6,8,11,14,14,19,20,22,24,25,27,26,28,29,29,27,28,29,28,27,29,29,28,27,29,29,28,28,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,30,30,30,30,30,30,30,30,29,30,30,30,30,30,28,29,30,30,30,30,30,30,30,30,31,30,31,30,31,31,30,30,30,30,31,30,31,31,31,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,28,30,29,29,30,30,30,30,31,31,30,31,31,30,30,31,31,30,30,31,31,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,30,31,31,31,30,30,31,30,30,30,30,30,30,31,31,30,30,31,30,30,30,30,31,30,30,30,30,29,30,30,30,30,29,30,30,30,30,28,30,30,30,30,30,30,29,30,30,31,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,31,31,31,30,30,30,31,31,30,30,30,30,29,30,28,29,29,29,27,28,27,26,26,23,25,23,20,23,22,18,20,16,20,22,21,18,22,22,21,20,22,24,21,24,24,24,24,26,26,27,26,26,27,25,27,27,26,28,27,27,28,28,28,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,28,27,25,28,27,27,28,25,28,26,24,27,27,26,26,27,27,27,27,28,27,28,27,27,28,26,28,28,27,29,29,29,30,30,31,30,30,29,31,31,30,30,30,30,29,30,31,30,29,30,30,30,30,30,30,31,30,31,30,31,31,30,31,30,30,30,30,29,30,30,30,30,31,31,30,30,31,30,30,31,30,31,30,30,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,30,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,31,30,30,30,29,29,30,28,28,28,27,26,26,27,27,26,26,27,28,28,29,30,28,29,27,29,29,28,28,29,29,29,28,26,28,28,27,27,28,27,26,27,28,27,27,28,28,27,28,28,27,25,28,29,27,28,30,30,28,29,30,30,29,30,30,30,30,31,30,30,30,30,30,31,31,31,30,30,30,31,30,30,30,30,30,30,30,28,30,30,28,29,28,28,27,28,26,26,27,23,25,23,22,25,24,24,25,27,26,27,26,27,28,28,28,29,30,29,29,29,29,29,29,28,27,27,27,27,26,26,25,25,23,26,26,25,24,25,24,25,26,28,28,25,25,28,27,26,28,28,28,27,29,30,28,28,30,30,29,30,30,30,30,30,30,30,30,30,29,29,29,28,28,28,27,26,27,27,26,24,25,26,22,24,23,25,27,28,25,26,28,28,27,27,28,28,27,28,29,29,28,29,29,28,29,28,28,28,28,27,27,26,28,25,26,27,27,26,28,28,27,27,29,29,29,30,30,30,29,29,28,28,29,29,29,30,29,30,30,30,29,30,30,30,30,30,30,29,30,30,30,31,30,31,31,30,31,31,31,30,30,30,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,28,27,28,27,27,27,26,26,26,26,25,26,25,23,25,25,25,23,23,22,22,22,21,21,19,18,17,16,14,13,12,11,8,7,6,4,4,4,2,0,1,3,4,6,6,11,13,12,18,20,22,25,25,27,26,28,29,29,28,28,29,29,28,29,29,29,28,29,30,28,28,29,29,29,28,29,29,29,29,29,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,27,29,30,29,29,30,30,29,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,28,29,29,29,29,30,30,30,30,30,29,30,30,30,29,30,31,29,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,30,30,29,30,30,29,30,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,29,29,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,29,29,29,28,28,28,28,26,27,26,26,26,23,24,22,20,22,20,18,19,17,19,20,21,18,21,21,21,20,22,23,21,24,23,24,23,24,26,25,24,25,24,24,25,26,25,27,26,27,27,29,28,29,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,28,28,27,27,27,26,26,26,24,26,25,25,26,25,25,24,24,26,25,25,25,25,26,26,26,27,26,27,27,27,28,26,27,28,26,29,29,29,29,30,30,30,30,29,30,30,29,30,30,30,29,30,31,30,30,30,30,30,30,30,30,30,31,31,30,30,31,30,31,30,30,30,30,29,30,30,29,30,30,30,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,28,28,28,28,27,28,27,27,27,27,27,28,28,29,29,28,29,28,29,29,28,29,29,30,29,29,28,29,29,28,28,29,27,28,28,28,28,28,29,28,28,29,29,28,27,29,29,28,29,29,30,29,29,30,30,28,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,30,28,29,29,28,28,28,27,27,27,26,27,27,21,24,22,23,24,24,24,27,27,28,28,28,28,28,29,28,30,30,29,29,30,30,29,29,29,28,28,28,28,27,27,27,27,24,27,28,27,25,26,24,25,26,28,28,26,25,28,27,27,27,28,27,26,28,29,28,28,30,30,29,29,29,30,29,29,30,29,29,29,28,28,28,27,27,27,27,25,26,27,24,23,24,24,20,23,22,24,26,27,26,25,27,27,26,27,28,28,27,28,28,28,28,27,28,27,28,28,26,28,27,26,26,25,27,23,25,26,25,25,27,27,26,25,28,28,28,29,29,29,29,28,28,28,28,28,28,29,28,28,29,29,28,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,29,30,30,29,30,29,28,29,28,26,27,27,25,27,27,23,26,27,26,24,25,24,24,23,22,22,21,20,18,17,17,15,13,12,10,8,7,7,5,5,4,1,0,1,3,5,6,10,11,13,17,20,20,24,25,27,26,28,29,28,27,29,29,29,28,29,29,29,28,29,29,29,28,29,29,29,29,29,29,29,30,29,29,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,28,29,30,29,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,29,30,29,29,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,29,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,29,29,29,30,30,29,29,30,30,30,30,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,27,28,28,29,27,27,27,25,24,22,23,20,18,20,18,18,20,17,18,21,21,17,21,21,20,20,22,24,21,23,25,24,23,25,27,26,26,26,26,25,26,27,26,27,28,27,28,29,28,29,28,29,29,29,29,29,29,29,29,29,28,29,29,29,28,29,28,28,28,28,28,27,28,26,28,27,27,27,26,26,26,25,26,27,25,26,26,27,27,27,27,27,27,27,26,28,26,27,27,26,29,29,28,30,30,30,30,30,29,30,30,29,30,30,30,29,30,31,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,29,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,28,30,30,30,30,30,30,29,30,30,30,29,30,30,30,28,28,29,28,28,26,28,27,28,28,29,29,29,30,30,29,29,28,30,30,28,29,29,30,30,29,28,29,29,28,28,29,29,27,29,29,28,28,29,29,29,28,29,28,27,29,29,28,28,29,30,28,29,30,29,29,29,29,29,29,30,30,30,29,29,30,30,30,30,29,30,30,30,29,30,29,29,30,30,30,29,29,29,28,28,28,28,28,28,27,27,26,20,24,20,20,25,25,23,25,25,28,27,29,27,29,29,28,29,30,29,29,29,30,29,29,29,28,29,28,28,28,25,27,27,24,26,27,26,24,26,22,26,26,27,28,27,25,27,27,27,26,28,28,27,28,29,28,28,29,30,29,29,29,30,30,30,30,29,30,30,28,29,29,28,29,28,27,26,26,26,25,24,24,24,20,23,21,23,26,26,25,24,27,26,27,27,28,27,27,28,29,27,27,28,28,27,28,28,27,27,27,26,25,25,26,22,24,26,25,25,27,27,26,27,28,29,28,29,29,29,28,28,28,27,28,29,28,29,28,29,29,30,28,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,29,30,29,29,29,28,27,29,28,26,28,27,24,27,27,24,27,27,27,25,26,24,25,25,24,25,22,22,20,20,18,17,15,16,15,12,11,9,8,7,6,4,2,0,1,3,5,8,10,12,16,17,20,22,24,27,26,28,28,28,26,28,29,28,27,29,29,28,28,29,29,28,28,30,29,30,29,30,29,29,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,31,31,31,30,30,30,31,30,30,30,30,30,30,30,31,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,31,30,30,31,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,31,31,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,31,31,30,30,31,31,31,31,31,31,31,31,30,30,31,30,31,30,30,31,30,31,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,31,30,30,31,31,30,31,30,31,31,30,30,30,30,30,30,29,28,29,29,27,28,27,27,24,21,23,18,18,20,18,16,18,17,17,20,22,18,21,22,23,21,23,25,22,24,25,25,25,26,26,28,27,28,27,26,28,27,27,28,28,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,28,29,29,29,29,28,27,28,27,27,28,26,27,26,25,27,26,25,27,26,27,27,25,27,27,26,26,25,28,27,27,27,27,29,29,29,30,30,31,31,30,29,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,31,31,31,31,31,30,31,30,30,31,30,30,30,31,30,30,30,30,30,31,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,31,30,30,30,30,30,30,30,29,30,30,28,28,29,27,27,27,27,28,27,27,28,28,28,30,30,29,29,28,30,30,29,29,30,30,30,29,29,29,28,27,27,29,28,25,28,28,27,26,28,29,27,29,29,28,26,29,30,28,27,30,30,28,29,30,30,28,30,30,30,30,30,30,30,30,30,31,31,31,31,30,30,30,31,30,30,30,30,30,30,30,29,30,29,29,29,28,28,28,28,27,26,27,22,25,21,22,25,23,23,25,26,27,27,27,27,27,29,28,29,29,29,29,29,29,29,29,29,28,28,27,27,26,24,26,26,23,25,25,25,24,25,22,23,26,27,28,26,24,27,27,27,26,28,28,27,29,29,28,27,30,30,29,30,30,30,30,30,31,30,30,30,29,29,29,29,28,28,27,27,27,26,25,24,24,23,20,21,20,23,25,26,25,24,27,27,26,26,28,28,26,28,29,28,28,28,29,28,29,28,28,26,27,27,27,23,27,22,24,26,24,25,27,28,27,26,28,30,28,30,29,30,29,29,28,28,28,29,29,30,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,31,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,29,30,29,28,29,28,27,28,28,26,27,27,26,28,26,25,26,27,27,25,26,25,25,24,24,24,23,22,21,21,19,18,17,16,15,14,13,10,10,9,7,6,5,2,0,1,3,5,7,9,13,16,18,21,22,25,25,27,28,28,27,28,28,28,27,29,29,28,27,29,29,28,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,31,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,30,30,28,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,30,28,29,29,29,29,29,30,30,30,30,30,31,30,30,30,30,30,30,30,29,28,29,29,27,27,28,28,25,27,26,25,23,19,22,18,16,19,19,17,20,16,18,21,22,17,22,23,22,22,23,23,24,24,24,25,25,27,26,27,27,26,27,25,26,27,27,27,27,28,29,29,29,30,29,30,30,29,29,30,30,30,30,30,30,29,29,30,29,28,29,28,29,29,28,28,26,26,27,26,27,27,26,27,24,25,27,25,24,26,25,27,27,26,27,26,25,26,24,27,26,27,26,25,29,29,28,30,30,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,31,30,30,30,30,31,31,31,30,30,30,30,30,30,30,30,29,30,30,31,31,30,31,30,31,31,30,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,28,28,29,28,26,26,26,28,27,27,28,29,29,29,30,29,29,27,29,30,28,29,29,30,30,29,29,29,29,28,28,29,28,26,29,29,27,27,29,29,26,28,29,28,26,29,29,27,28,30,30,28,29,30,29,28,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,28,29,29,28,28,28,27,27,26,25,26,25,22,22,20,21,24,22,22,25,26,27,27,28,27,28,28,28,29,29,29,29,30,29,28,29,29,28,29,28,28,27,27,27,26,25,27,26,25,24,25,21,22,25,27,28,25,23,27,27,25,26,28,28,26,28,29,28,27,29,29,29,29,29,30,29,29,30,29,30,30,28,28,29,28,27,28,27,25,26,25,24,23,23,22,18,20,17,21,24,26,23,22,26,27,25,25,28,27,25,28,28,27,27,28,29,26,28,28,26,27,27,26,26,24,26,21,25,26,25,24,26,26,25,26,27,29,27,29,29,29,28,28,27,27,28,29,29,29,28,30,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,29,29,29,28,29,28,27,28,28,26,28,28,25,28,28,28,27,28,26,26,26,25,26,24,23,23,23,22,20,18,18,17,16,15,12,11,10,9,8,6,4,2,0,1,3,5,7,11,13,16,21,21,24,24,26,27,27,24,26,27,27,25,27,28,28,26,28,28,27,28,29,28,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,29,30,30,29,30,30,30,29,29,27,29,30,29,28,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,28,29,30,29,28,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,29,28,29,30,29,29,29,29,27,29,30,30,28,29,30,29,29,28,26,28,28,29,28,29,30,29,29,30,30,30,30,30,30,30,30,29,29,28,28,27,28,26,26,27,27,23,26,25,25,21,17,20,15,15,18,17,15,20,16,17,21,22,18,22,22,23,23,23,24,24,25,25,26,26,27,26,27,27,27,26,26,26,27,27,28,28,28,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,29,29,28,28,26,27,28,26,27,28,27,27,25,25,27,25,25,26,25,27,27,25,26,26,26,26,24,26,26,27,25,25,27,28,28,29,29,30,30,30,29,30,30,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,30,30,28,30,30,29,28,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,27,28,29,27,26,26,27,28,28,28,29,29,28,29,30,29,29,29,30,29,28,29,30,29,29,29,29,29,29,29,29,30,29,28,29,29,28,27,29,29,27,28,29,28,25,29,29,26,26,29,29,27,27,29,29,26,29,29,29,28,30,30,29,29,30,30,30,30,30,29,30,30,30,29,30,30,28,29,29,30,28,29,29,28,28,26,26,27,25,24,26,26,21,22,18,21,24,21,20,25,26,26,26,28,27,28,29,28,29,29,29,29,30,29,29,29,29,29,29,29,29,28,27,27,27,26,27,27,26,24,23,19,20,25,25,26,24,20,25,26,22,24,26,26,23,27,28,27,26,29,29,28,28,28,29,29,29,30,29,29,29,27,28,29,28,27,27,26,24,25,24,22,21,21,20,16,18,13,18,22,23,19,19,24,25,22,23,27,26,24,27,28,27,27,28,29,26,29,28,27,26,26,26,26,23,25,20,23,25,23,22,25,26,25,24,26,28,27,29,29,29,28,28,27,27,28,29,28,29,29,30,29,30,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,29,30,30,28,30,29,28,29,29,27,29,28,26,28,28,28,27,27,27,27,27,26,26,25,24,24,24,23,21,20,19,20,18,16,15,13,12,11,10,9,7,5,2,0,1,3,6,9,13,15,18,20,24,22,25,26,27,24,27,27,26,25,26,28,27,26,28,28,28,28,29,28,28,29,29,28,29,29,29,29,29,29,30,29,29,30,29,29,29,29,29,29,29,29,29,30,29,29,29,30,29,30,30,29,30,30,29,30,30,30,29,30,30,30,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,29,28,29,29,29,28,28,29,29,27,28,30,28,29,29,29,29,30,29,30,29,30,29,30,30,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,30,29,30,29,29,30,30,29,30,30,30,29,30,30,29,29,30,29,28,29,29,29,27,29,29,28,28,28,29,28,29,28,29,29,30,29,29,30,30,29,29,30,30,29,30,30,29,30,30,30,29,30,30,30,30,29,29,28,30,30,29,28,30,30,28,29,30,29,29,30,30,30,29,29,29,29,29,29,28,29,29,28,28,29,28,27,29,29,28,28,29,29,28,29,28,26,28,28,28,27,28,29,28,28,29,29,29,29,30,29,30,29,29,28,27,27,27,27,26,26,27,26,23,25,25,24,19,17,17,16,15,18,18,18,22,16,17,22,23,19,21,22,24,24,23,24,25,26,26,26,26,28,27,28,28,27,27,26,27,28,27,28,28,28,29,29,29,30,29,30,29,30,29,30,30,30,30,30,30,30,29,30,29,29,29,28,29,29,28,28,28,27,28,27,27,28,27,26,25,25,25,25,25,25,24,26,25,25,26,25,26,26,24,26,26,28,26,26,28,28,27,28,29,29,30,29,28,29,29,28,29,29,29,28,29,30,29,29,29,30,29,29,29,30,30,29,30,29,30,30,29,30,30,28,29,29,29,29,29,29,29,30,29,28,28,29,28,27,29,28,29,29,29,29,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,29,29,29,29,29,29,30,29,28,28,30,30,27,28,29,27,26,26,27,28,29,28,29,29,29,29,30,29,29,29,29,29,29,29,29,30,30,29,29,29,30,29,29,29,29,27,29,29,28,27,28,29,27,27,29,28,25,28,29,27,27,28,29,26,27,28,28,26,28,28,28,28,29,29,28,29,29,29,29,30,30,28,29,30,29,28,29,29,28,29,30,29,29,29,28,29,29,26,27,28,26,24,26,25,21,22,18,21,22,20,19,24,24,26,25,27,26,28,28,27,28,28,28,29,29,29,28,28,29,28,28,28,28,28,27,27,26,26,27,25,24,22,22,17,20,24,24,26,24,20,25,25,23,22,26,26,24,27,28,27,26,29,29,28,28,29,29,29,30,30,28,29,29,27,28,29,29,28,26,26,27,27,23,24,23,21,19,16,18,14,18,21,23,20,20,24,25,23,23,27,26,25,27,28,27,27,28,29,27,28,28,28,27,26,27,26,24,25,21,23,25,22,23,25,26,24,24,26,28,27,28,28,28,27,28,27,26,28,28,28,29,28,30,29,30,29,30,29,28,30,30,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30],[31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,29,30,29,28,29,29,27,29,28,27,28,28,28,28,28,27,27,27,27,27,26,26,26,26,25,23,22,22,21,19,18,17,15,14,12,11,10,10,8,5,2,0,1,4,7,10,13,14,16,21,21,23,25,25,23,25,27,25,24,26,28,27,26,28,29,27,29,29,28,29,29,29,28,29,30,29,29,30,30,30,30,30,30,30,29,29,30,29,29,30,30,30,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,29,30,29,29,29,29,28,28,29,29,27,29,29,29,29,29,30,29,29,30,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,29,30,29,29,29,30,29,30,30,30,29,30,30,29,28,30,30,28,29,29,29,27,29,29,28,28,28,29,28,29,29,29,29,30,29,29,30,30,29,29,30,30,29,30,30,29,30,30,30,29,30,30,30,30,29,29,28,30,30,29,28,30,29,28,29,30,29,29,29,30,30,29,29,29,29,29,29,28,29,29,28,27,29,28,27,28,29,29,27,28,28,28,28,27,25,26,27,27,27,28,29,28,28,28,29,29,29,29,29,29,28,29,28,27,26,26,26,24,25,25,25,22,24,23,22,17,14,16,14,14,16,16,15,20,16,17,20,22,19,22,23,23,23,24,24,24,24,25,25,25,26,26,27,27,27,27,26,26,28,27,28,27,28,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,29,28,28,27,27,27,27,27,27,26,26,25,25,27,25,25,26,24,26,26,24,26,25,24,25,23,25,25,25,24,23,27,26,27,27,28,29,29,29,28,29,29,28,28,29,29,29,29,30,29,29,29,29,29,30,30,30,30,30,30,29,29,30,29,30,30,29,29,29,29,29,29,29,29,30,29,28,29,29,28,26,28,28,29,28,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,29,30,29,30,30,29,29,30,30,29,30,30,29,29,29,29,29,28,29,29,28,28,29,29,27,28,28,26,25,25,26,27,28,27,29,28,28,29,29,28,28,29,29,29,28,29,29,29,29,30,29,29,29,29,29,29,29,27,29,29,27,26,28,29,25,27,28,27,24,27,28,25,25,27,28,26,26,28,28,26,27,28,28,27,28,28,28,28,28,29,29,30,29,28,29,29,29,28,29,29,28,28,29,28,28,28,28,27,28,26,26,27,24,22,25,25,20,20,18,20,22,19,19,24,23,25,25,27,26,28,28,27,29,29,28,29,29,29,29,29,29,29,28,28,28,27,27,27,26,25,26,25,23,21,19,16,18,23,22,25,21,19,23,24,20,20,24,25,22,25,27,26,24,28,28,28,27,28,28,28,29,29,28,29,29,27,28,28,28,27,26,25,24,23,22,21,21,20,17,15,16,10,16,18,21,18,17,22,24,21,21,25,25,23,26,27,27,26,27,28,26,28,27,26,27,26,26,24,22,24,19,22,24,21,20,24,24,22,21,24,27,26,27,27,27,27,28,27,26,28,28,27,28,28,29,28,30,29,29,29,28,29,29,29,29,29,29,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30],[31,31,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,28,28,29,28,29,28,27,28,28,28,27,28,27,27,27,27,27,26,26,26,25,25,23,23,22,21,20,20,19,18,17,15,14,12,10,9,7,5,2,0,1,4,7,8,11,12,15,17,20,21,20,17,18,21,21,18,21,22,21,20,23,24,22,22,24,24,25,25,26,24,25,27,26,27,28,28,28,28,28,29,28,28,28,28,28,27,28,28,27,28,26,28,28,28,28,29,29,27,29,28,28,28,29,29,28,29,28,29,28,28,28,28,28,28,29,29,29,29,29,29,28,28,29,28,26,27,27,26,25,27,26,24,27,25,25,25,25,21,24,25,23,23,25,27,24,25,26,26,26,27,28,27,27,28,28,29,27,27,28,28,28,29,28,29,27,28,29,28,29,28,28,28,28,28,27,28,28,28,28,28,28,27,27,26,26,26,27,28,27,27,28,27,27,27,27,26,24,27,26,24,24,26,25,24,24,25,22,23,25,25,25,26,26,26,27,28,27,26,28,28,26,27,28,27,26,28,28,26,27,28,28,27,27,28,28,28,27,26,26,28,27,26,25,28,27,24,27,27,27,26,27,27,27,27,26,27,26,25,25,23,25,25,24,22,24,24,23,25,25,25,23,24,26,24,25,24,22,23,24,24,23,25,26,26,25,26,27,28,27,28,28,28,27,27,26,25,24,24,24,21,23,22,23,17,20,19,18,15,13,16,13,13,16,16,16,20,18,16,19,21,18,19,21,21,20,21,22,21,22,23,25,24,26,25,27,28,26,27,25,25,28,27,28,27,28,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,28,29,29,29,29,28,27,26,27,28,26,27,27,25,27,25,25,27,24,23,24,24,25,24,22,25,24,23,23,22,22,23,23,23,21,25,25,25,26,27,27,28,28,27,28,28,27,27,28,28,27,27,29,28,29,28,28,28,28,28,28,28,28,29,27,28,28,28,28,29,28,28,28,27,28,28,28,27,29,28,26,27,28,27,25,26,27,27,27,26,26,29,28,28,29,28,29,29,29,29,29,28,29,28,28,28,28,28,29,29,30,29,29,28,29,27,27,26,29,28,26,27,29,29,26,28,28,27,26,26,27,26,24,27,26,24,25,26,26,23,25,26,23,22,20,23,23,24,24,25,25,26,25,26,25,25,24,26,25,24,26,25,27,27,27,24,26,25,25,24,25,25,23,23,26,24,22,24,25,22,22,24,24,20,22,25,21,20,24,25,21,23,25,24,23,23,24,24,24,25,25,25,26,26,27,27,28,27,25,26,27,26,25,27,26,24,26,26,26,24,25,25,24,25,22,23,25,22,20,22,21,19,17,16,18,18,15,15,19,17,20,19,22,20,23,23,21,24,23,23,24,25,25,24,24,24,24,24,24,23,24,23,21,22,21,21,18,17,16,15,12,13,16,18,20,17,16,20,19,17,18,21,22,20,22,24,23,22,25,26,25,25,26,26,26,26,27,25,27,27,24,26,27,26,26,23,24,22,22,20,20,19,19,18,15,13,9,13,15,16,16,17,19,20,19,19,22,22,21,24,25,25,23,26,27,24,26,26,25,25,24,24,23,20,20,18,19,22,20,20,22,22,20,20,21,25,24,26,26,26,26,27,25,23,26,27,26,27,26,28,27,28,26,28,28,26,27,29,28,28,28,28,27,28,28,28,28,28,29,29,28,28,29,28,29,29,28,28,27,28,28,28,29,29,29,29,30,30,30,30,30,30,31,30,30,30,30,31,30,30,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30],[30,30,30,30,30,31,30,30,30,30,30,29,30,29,29,29,29,29,29,29,29,28,29,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,27,27,27,26,26,26,26,25,24,24,23,22,22,20,20,19,17,16,15,14,11,10,9,7,5,2,0,1,4,6,8,10,12,13,15,18,18,15,16,19,19,17,19,21,19,19,22,22,21,22,24,23,25,25,25,24,24,25,23,24,25,25,26,25,25,26,25,25,25,26,25,24,24,25,24,25,24,23,24,24,25,26,26,25,26,26,26,26,26,27,25,26,27,26,25,25,25,25,26,27,26,26,27,26,26,26,26,26,25,25,23,24,24,23,22,25,23,23,25,23,23,22,22,20,20,23,22,19,22,25,22,23,24,24,23,25,25,25,24,25,25,26,25,24,25,26,26,25,26,26,24,25,26,25,25,27,26,26,25,26,26,26,25,24,26,26,26,26,25,25,24,24,25,27,24,25,27,26,26,25,25,23,22,25,24,22,21,24,22,20,21,23,21,20,22,22,20,23,24,24,25,25,25,24,25,26,24,25,25,25,23,25,25,24,25,25,26,24,26,25,25,26,25,25,23,25,25,23,23,26,24,22,24,26,25,25,25,26,26,25,25,25,24,24,23,22,22,23,22,21,22,22,22,21,22,23,21,21,23,21,23,20,19,18,21,21,21,21,23,22,22,24,25,25,25,24,25,25,25,25,23,21,22,20,19,18,18,18,17,12,13,13,12,11,10,12,12,13,14,14,15,16,16,15,17,19,16,16,18,18,18,19,20,21,20,22,24,24,25,23,26,25,25,26,23,24,25,26,27,26,27,28,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,27,28,28,28,28,27,27,26,26,25,26,26,25,24,26,24,24,25,23,22,23,22,23,22,20,22,20,20,21,20,21,19,19,18,15,20,21,22,22,23,24,25,24,23,25,25,24,24,26,25,24,25,27,25,25,26,26,26,26,27,26,27,26,26,26,26,26,26,26,27,26,26,25,25,26,25,24,23,26,24,23,24,24,24,22,24,24,25,24,24,23,26,26,26,25,26,26,26,26,26,26,26,26,26,27,26,26,27,26,26,27,26,26,26,26,24,25,24,25,26,24,24,25,26,22,25,26,25,24,25,25,23,23,24,24,22,23,24,23,21,21,23,20,18,20,19,20,22,21,22,22,24,24,25,23,23,24,24,24,22,25,25,26,25,25,24,24,24,24,23,24,25,22,22,23,22,20,22,22,18,18,22,20,16,21,22,17,17,21,22,18,20,22,22,20,21,21,23,22,22,23,23,23,23,24,25,25,24,23,24,24,23,23,24,23,22,24,24,24,23,23,23,22,21,17,19,20,18,17,18,20,15,16,11,16,16,13,13,16,16,17,17,20,17,21,22,20,22,22,22,23,23,23,23,22,22,23,23,22,20,21,21,19,20,19,17,17,15,15,13,9,11,15,14,18,15,13,16,16,14,14,15,17,15,16,21,18,17,22,23,23,23,24,24,24,24,25,23,24,24,22,23,24,23,22,18,19,19,18,16,15,17,16,14,11,11,6,9,10,12,13,13,14,14,15,15,17,17,17,20,21,21,20,22,24,20,22,22,20,22,20,19,19,17,18,15,15,18,16,16,16,17,16,15,16,22,21,23,23,23,21,23,23,21,22,23,24,24,25,26,24,26,25,27,25,24,25,26,26,25,26,26,24,26,26,25,25,26,26,26,25,26,26,26,26,27,26,26,26,26,26,28,27,28,27,28,29,28,29,28,30,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29],[30,30,30,29,29,30,30,30,29,29,29,28,28,28,28,28,28,28,28,28,28,27,28,28,27,28,28,27,27,27,27,27,28,27,26,28,27,27,27,26,26,25,25,25,24,24,23,22,23,22,20,21,20,19,17,17,16,15,13,11,8,8,6,3,1,0,1,3,4,6,8,10,10,13,14,11,11,14,14,12,13,15,14,15,15,16,15,15,18,18,18,21,20,18,21,22,20,21,23,22,22,22,23,23,23,22,22,23,22,20,22,22,21,22,20,22,21,21,22,23,23,22,23,22,23,22,22,23,22,23,23,24,22,21,22,22,24,23,22,24,24,24,24,23,22,23,22,22,18,20,21,20,18,19,20,17,21,19,18,19,18,15,16,19,18,16,18,20,17,18,19,20,19,20,21,21,19,21,22,23,21,19,21,22,21,22,22,23,21,22,22,22,23,22,22,21,22,23,22,22,23,22,22,22,24,23,22,21,20,19,21,22,21,22,22,22,20,21,20,20,16,20,19,17,17,19,18,15,16,18,16,14,18,16,17,19,19,20,20,21,19,19,21,21,19,19,21,19,18,20,20,19,20,21,21,21,22,22,21,22,19,20,17,21,21,19,18,21,21,18,21,21,19,20,21,22,22,22,20,21,20,18,19,17,18,19,18,15,18,18,16,17,18,18,16,17,17,17,17,15,15,14,16,17,16,16,17,17,17,18,19,20,19,20,20,20,18,18,17,16,16,15,15,13,12,13,11,9,9,11,9,9,7,8,9,10,12,12,13,14,15,13,15,17,15,15,18,18,18,20,21,21,21,22,23,23,25,23,26,24,24,24,23,23,24,25,24,25,24,26,27,27,28,26,28,28,28,27,28,29,28,29,29,28,28,29,29,29,27,28,27,27,28,26,26,24,25,26,25,26,25,24,26,22,24,24,23,22,23,21,21,22,20,21,21,19,18,17,17,16,16,15,12,18,17,17,17,18,18,19,19,19,19,21,20,18,21,21,21,21,23,21,21,22,23,22,23,22,23,23,22,22,21,21,23,21,23,23,22,22,22,21,21,21,20,18,22,20,20,19,20,19,18,18,18,19,18,19,19,20,20,21,21,21,22,22,21,22,22,22,22,22,22,23,23,23,23,23,22,21,23,20,22,19,19,18,21,21,19,20,22,23,18,21,21,20,19,19,20,19,18,20,19,18,19,19,18,17,18,18,16,16,16,17,15,17,18,18,18,19,18,19,19,19,19,19,19,18,20,21,21,21,21,19,20,19,19,18,20,18,16,17,18,16,17,17,17,15,15,17,17,13,14,17,16,15,15,17,15,13,16,17,14,15,17,18,16,17,18,19,18,18,19,20,20,20,18,19,19,19,18,19,18,17,19,19,18,18,18,18,17,17,16,17,17,15,14,16,16,14,12,11,13,15,10,12,13,13,12,11,14,12,14,15,14,16,17,15,17,17,18,17,18,18,16,17,16,15,15,14,13,13,14,14,14,11,11,10,7,8,10,10,11,11,10,9,12,11,11,13,14,12,13,15,17,15,17,18,17,16,18,18,18,18,20,18,19,18,16,18,17,17,17,16,16,16,16,13,14,13,11,10,9,8,4,5,6,8,8,8,10,11,13,11,14,15,14,16,16,17,16,16,17,16,17,17,16,16,16,15,16,14,15,14,12,15,14,14,13,15,14,11,13,15,16,17,18,17,17,17,16,16,16,17,18,18,18,20,19,19,19,21,20,18,20,21,19,20,22,21,20,21,22,21,22,21,22,22,22,22,22,22,23,23,23,22,23,23,24,24,24,25,25,26,26,26,27,26,27,27,28,28,28,27,27,28,28,27,29,28,28,28,29,28,28,28,29,29,28,29,28,29,29,28,29,28,28,29,29,28,28,29,29,28,28,28,28],[30,29,29,29,30,30,29,29,29,29,29,28,29,28,28,28,28,28,28,28,28,27,28,28,28,28,28,27,27,27,26,27,28,28,27,27,27,26,27,26,27,26,26,25,26,25,23,23,23,23,21,21,21,20,18,19,18,17,16,14,11,10,8,5,3,1,0,1,3,4,5,7,8,10,9,6,7,10,9,7,10,10,10,9,10,11,11,11,12,12,14,14,14,13,14,17,15,15,17,16,16,16,17,16,18,17,17,18,18,17,18,18,16,17,16,16,17,17,16,18,17,16,18,17,18,16,17,18,17,18,17,17,17,15,16,16,17,17,16,17,17,17,18,18,15,16,16,15,13,15,15,13,12,15,14,12,15,13,13,13,13,10,12,13,12,11,13,15,13,13,14,14,13,14,15,15,14,16,16,16,15,13,16,15,15,15,16,17,14,15,16,15,16,16,16,16,17,17,16,16,16,16,17,17,18,17,16,16,15,13,16,16,14,15,15,15,13,15,14,13,12,14,13,13,12,13,12,10,12,13,11,9,12,11,13,15,14,14,14,16,13,15,16,16,15,14,16,13,13,15,14,12,14,15,15,15,16,15,15,14,14,13,13,15,15,13,12,15,15,14,14,15,14,13,14,16,15,15,14,15,14,13,14,11,11,12,12,10,12,12,12,11,11,12,12,12,11,12,11,13,11,12,12,13,13,11,13,14,12,13,15,16,15,16,15,17,16,16,14,14,12,10,10,9,8,9,10,7,7,7,6,6,4,8,6,8,12,11,13,15,15,13,13,17,15,14,18,18,16,18,21,20,20,22,24,23,26,24,27,25,24,26,25,24,26,26,26,25,26,27,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28,28,27,28,25,26,27,25,26,25,24,27,24,23,25,23,22,22,23,21,21,20,19,19,17,16,15,13,12,12,10,11,12,12,12,15,16,17,17,17,18,17,18,17,18,18,18,19,18,18,18,19,19,19,18,19,20,18,16,17,17,18,17,17,19,18,19,19,19,19,18,18,17,17,17,18,17,16,16,15,14,13,14,14,15,15,16,15,17,16,16,17,19,17,16,18,18,17,17,18,17,16,17,17,19,18,17,18,17,17,16,17,16,13,14,15,16,14,13,16,16,13,14,15,13,12,13,13,12,13,13,12,12,13,12,13,11,12,13,11,11,10,11,10,13,14,14,15,14,14,14,14,12,14,14,12,13,14,13,15,15,15,13,15,14,14,14,13,13,13,12,13,13,12,12,12,12,9,12,12,8,10,11,10,8,10,12,10,10,12,12,12,12,12,12,12,13,12,14,13,12,14,16,14,13,15,13,13,14,14,13,12,13,14,13,13,12,13,12,13,14,12,12,12,10,9,11,10,8,9,7,8,9,7,7,7,7,8,7,10,9,10,11,9,11,11,11,12,13,12,13,12,12,13,12,12,12,12,12,11,10,11,11,8,7,8,5,5,5,6,5,6,6,5,7,7,7,9,9,9,10,8,12,11,9,14,14,13,13,15,12,15,13,13,13,15,15,13,13,13,12,13,13,13,11,9,9,9,11,10,7,5,4,3,3,5,7,6,5,7,8,9,9,10,10,10,11,13,14,12,13,14,12,13,14,13,13,12,12,11,10,11,10,10,11,10,9,10,10,9,8,10,10,12,14,13,15,14,14,14,12,13,14,14,15,16,18,16,16,15,16,17,15,15,17,16,14,16,17,15,15,17,16,15,15,17,16,14,15,18,16,15,16,17,16,18,18,20,19,20,21,20,23,24,24,26,24,26,25,27,26,26,25,26,27,28,27,29,27,27,28,28,27,29,28,29,28,29,29,28,28,28,28,29,28,28,28,28,28,27,28,28,27,27,27,26],[30,30,29,29,30,30,30,29,29,29,29,28,29,28,29,28,29,29,28,29,28,28,28,29,28,28,28,27,28,28,27,28,28,28,27,28,27,28,27,27,27,26,26,26,26,25,24,23,24,23,22,22,22,21,20,20,19,18,17,16,12,10,9,7,5,3,1,0,1,3,3,4,6,6,6,6,5,7,8,8,7,8,8,9,9,9,9,9,12,12,11,12,12,11,12,15,14,12,14,15,14,14,14,14,14,13,14,14,14,14,14,14,14,15,15,14,14,15,14,14,14,13,15,14,13,14,13,15,14,14,14,15,13,14,13,14,14,16,14,14,14,14,13,15,13,13,13,13,12,11,12,12,11,13,11,12,12,12,12,12,11,9,10,12,12,9,11,11,12,12,11,12,13,11,12,13,12,14,14,13,14,12,14,14,13,13,14,14,13,14,13,14,14,15,15,15,15,15,14,15,15,15,15,15,16,15,15,15,15,14,14,15,14,14,13,13,12,12,12,12,11,11,12,11,10,11,11,9,10,11,8,8,10,10,11,12,12,12,13,13,12,11,13,13,12,11,13,11,12,13,12,11,13,13,13,13,14,15,14,13,12,11,12,12,12,12,12,13,13,12,12,13,14,13,13,15,14,13,14,13,12,12,12,10,10,11,10,10,11,10,10,8,11,10,10,9,10,10,10,9,7,8,10,9,9,10,11,11,12,12,13,13,14,14,14,14,14,13,14,12,11,11,8,7,7,7,7,6,6,6,6,6,6,7,7,7,9,10,12,12,15,13,12,17,16,14,17,19,17,18,20,21,21,22,23,23,24,23,26,24,24,25,22,22,25,26,26,25,26,27,27,27,28,28,28,28,29,28,29,29,29,29,29,29,28,29,28,29,27,28,27,28,28,27,27,25,26,26,25,26,25,24,25,23,22,23,23,21,21,22,21,21,19,19,18,16,16,14,13,11,11,8,8,9,11,10,12,12,13,15,14,15,15,16,15,14,16,17,15,17,18,17,16,17,18,17,17,18,16,17,16,16,17,17,17,17,16,18,18,17,16,15,17,15,15,12,16,14,13,13,14,13,12,13,12,14,14,14,13,15,15,13,16,16,15,15,17,17,15,16,16,16,16,16,16,18,16,16,17,15,16,15,15,13,12,12,13,14,12,13,14,14,13,12,14,12,13,12,12,12,12,13,12,10,11,10,11,10,10,11,8,8,7,9,9,11,11,12,13,13,12,14,13,12,12,13,12,11,14,13,13,14,14,13,14,12,12,13,11,12,11,9,10,10,8,9,9,10,9,9,8,9,10,8,9,8,7,8,9,9,9,9,9,9,10,10,9,10,11,12,12,12,13,15,12,13,13,13,12,13,13,12,11,11,13,11,12,10,11,11,10,9,10,8,8,8,9,8,7,7,6,3,6,8,4,5,7,6,7,7,7,8,9,9,7,10,9,9,10,10,11,11,10,10,11,10,11,11,11,10,9,8,8,9,8,7,7,6,3,3,7,4,6,7,4,5,8,6,6,8,7,8,7,11,9,9,9,11,11,11,13,13,13,12,12,12,12,12,12,11,10,10,10,8,8,7,7,6,7,9,6,4,4,4,3,3,5,6,5,6,6,7,7,7,8,7,8,9,11,11,10,10,11,10,11,10,10,11,9,8,9,7,8,7,8,9,7,8,9,7,6,8,8,9,10,12,12,11,11,11,11,11,10,12,12,12,13,15,14,14,14,15,15,13,14,15,15,14,15,15,13,13,15,14,15,15,16,15,14,15,16,15,14,15,16,15,17,17,20,19,20,18,20,20,22,23,25,23,25,25,26,25,25,26,25,27,26,27,27,27,28,28,28,27,28,28,28,28,28,28,27,28,28,27,27,28,29,27,29,28,27,28,28,27,26,27,27],[29,28,29,29,29,29,29,29,29,28,27,28,28,27,28,27,28,28,27,28,27,27,28,28,27,27,28,27,27,27,26,27,27,28,26,27,26,27,27,26,27,25,26,26,26,25,24,22,23,23,21,21,22,20,19,20,19,18,16,16,14,11,9,7,6,3,3,1,0,1,2,4,4,5,5,5,5,8,8,8,7,8,8,7,8,10,10,10,12,12,12,13,13,12,14,14,12,13,16,14,14,15,16,15,14,15,15,15,15,15,15,15,14,14,12,15,14,15,13,16,14,14,14,16,14,12,15,16,13,13,15,15,12,13,14,14,15,14,15,15,15,13,16,15,14,13,13,13,11,13,13,12,11,12,12,11,14,13,10,11,10,9,9,12,10,9,11,12,11,9,12,13,10,11,12,12,12,13,13,12,12,10,11,13,12,12,13,14,12,12,14,13,14,14,14,14,14,14,15,14,15,14,15,15,15,15,14,13,13,12,14,14,13,13,13,13,13,12,12,11,11,12,11,12,10,11,10,8,9,10,8,7,9,8,9,10,10,12,11,12,11,10,11,11,11,11,11,11,10,11,12,11,12,11,12,12,13,13,13,11,11,11,11,12,12,12,12,12,13,12,12,12,13,13,12,13,13,13,12,13,12,11,12,10,10,11,11,10,11,11,10,8,10,9,8,9,10,10,10,8,6,7,9,9,8,9,11,10,10,10,12,13,12,12,11,13,12,12,11,11,10,9,8,8,7,7,8,7,5,6,8,6,8,9,9,10,9,11,11,15,14,13,15,16,16,16,17,18,17,18,20,19,21,21,22,23,25,22,25,23,24,25,23,21,25,24,25,24,25,26,27,26,28,26,28,28,28,28,28,28,28,29,29,29,28,29,29,28,27,27,27,28,28,26,27,24,25,25,24,25,24,23,25,22,23,24,22,19,21,20,19,20,18,17,17,14,15,14,13,11,11,10,8,12,11,11,12,12,13,14,14,14,14,15,15,14,16,16,16,15,17,16,15,16,16,17,16,16,16,15,16,16,15,16,15,16,18,17,16,17,16,14,16,15,15,13,15,14,14,13,12,13,12,12,12,12,13,13,13,14,13,14,14,15,15,14,16,16,16,15,15,15,14,15,15,15,15,15,14,14,13,13,13,11,12,12,11,12,12,13,13,13,12,13,12,12,12,11,11,12,12,12,12,11,12,10,12,10,11,12,10,10,9,9,9,11,13,12,13,12,12,12,12,11,12,13,12,12,14,13,13,14,14,13,14,13,12,12,13,12,10,11,12,10,10,10,11,9,8,10,9,9,8,9,8,6,9,9,9,8,9,9,8,9,11,10,10,10,11,11,11,11,11,14,13,12,13,12,12,14,12,12,12,12,13,11,13,10,11,11,10,11,10,9,9,10,9,7,8,7,7,6,6,8,7,6,8,7,8,7,9,8,10,10,8,10,9,8,10,11,10,10,11,11,10,11,11,10,10,10,9,8,9,9,11,8,8,7,5,5,5,4,5,6,6,5,6,7,6,5,7,8,8,9,10,10,11,12,11,11,14,12,12,12,13,12,12,13,11,11,11,11,9,9,9,7,10,9,9,7,8,7,6,6,4,4,6,5,6,7,8,8,8,9,10,10,11,11,12,11,10,11,12,11,12,12,12,11,10,10,9,9,10,9,10,10,9,8,11,10,8,8,10,11,11,13,12,12,12,12,11,11,12,12,12,13,12,15,12,13,12,15,15,13,14,15,14,14,14,15,13,14,15,14,13,13,15,14,13,14,15,14,14,14,15,15,16,17,18,18,19,18,19,21,22,23,24,24,24,24,25,24,25,24,24,27,25,26,27,25,27,27,28,26,27,26,27,28,27,29,27,28,28,27,27,27,27,27,28,27,27,27,27,26,25,27,26],[29,29,29,29,29,30,29,29,29,28,28,27,28,27,27,27,28,28,27,28,28,26,27,28,27,27,28,27,27,27,27,27,28,28,27,28,27,27,28,27,27,26,26,26,26,25,24,23,23,23,22,22,22,21,20,21,20,19,19,19,16,13,11,8,7,5,3,4,1,0,1,2,2,3,4,2,3,5,5,4,4,5,5,4,5,5,6,6,7,7,7,8,8,8,8,8,9,9,9,9,9,9,9,9,9,10,9,10,10,10,11,10,10,9,9,10,10,10,9,10,10,8,9,10,9,9,8,10,9,9,9,9,9,9,9,10,9,10,9,9,8,9,8,8,8,8,8,8,8,8,8,8,8,8,7,8,8,8,8,9,8,6,8,8,7,6,7,7,7,7,7,7,8,7,7,8,8,8,8,8,8,7,7,8,9,8,8,8,8,8,9,8,8,9,9,10,10,10,9,10,10,11,10,10,10,10,10,9,9,9,8,8,9,8,7,7,7,7,6,7,7,7,7,6,6,7,5,5,6,6,4,5,5,7,8,8,7,8,8,7,7,7,7,7,7,6,7,7,6,6,6,6,7,7,8,8,9,9,9,8,7,7,6,7,6,6,6,7,8,7,7,7,8,8,8,8,9,8,8,7,8,7,7,6,6,7,6,5,6,5,6,5,5,5,5,5,6,5,5,4,4,4,4,4,4,5,5,6,6,6,7,7,8,7,8,8,8,8,8,7,8,7,5,5,5,5,5,4,4,5,5,5,6,7,9,9,10,12,12,14,16,15,15,17,18,16,16,18,18,16,18,19,20,20,22,23,24,23,24,22,23,24,22,21,24,25,25,23,25,26,27,27,28,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,27,27,25,27,27,25,26,24,25,26,23,23,23,22,22,21,21,20,20,19,19,17,15,15,14,11,10,9,7,7,6,8,8,8,9,9,10,9,10,10,11,11,10,12,11,11,12,13,13,13,13,13,12,13,13,12,12,12,12,12,12,12,13,12,14,13,12,13,12,12,11,10,10,10,10,9,9,9,8,8,8,8,8,8,7,8,8,8,8,8,10,9,8,9,10,9,10,10,11,11,11,11,11,11,11,10,9,8,8,8,6,7,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,6,6,6,6,5,6,7,6,5,6,6,7,8,9,9,9,9,8,8,7,7,7,8,7,7,8,8,8,8,9,9,8,8,7,8,7,7,7,6,6,6,6,5,6,5,6,5,5,6,6,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,6,6,6,7,6,8,7,7,6,7,6,6,6,7,6,6,6,6,7,6,6,6,6,6,6,5,5,6,6,5,5,5,6,4,5,6,4,4,5,5,5,5,5,6,6,6,5,6,6,6,7,7,7,7,7,7,8,7,7,8,7,8,7,6,7,7,7,7,6,6,3,3,5,2,4,5,2,2,5,4,2,6,5,4,4,7,5,6,5,6,6,7,8,7,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,5,8,6,7,4,5,5,5,2,3,3,3,4,4,4,6,6,6,6,7,7,6,7,8,7,7,7,7,8,7,8,7,7,7,7,7,7,7,7,6,6,7,7,6,5,6,6,7,8,8,8,8,8,8,8,8,9,9,8,10,9,9,9,10,9,9,8,9,9,9,8,8,8,8,7,8,7,9,8,9,8,8,9,9,8,8,10,11,11,13,13,14,15,15,15,16,17,18,19,21,20,23,24,23,21,23,23,22,25,23,24,26,23,27,26,27,26,27,26,27,27,27,27,26,27,28,25,25,27,27,26,27,26,25,26,27,25,23,26,25],[28,28,28,28,28,28,28,28,28,27,26,26,27,26,26,26,27,27,26,27,26,26,27,27,26,26,27,26,27,27,26,26,27,27,26,26,26,27,27,26,27,25,25,25,26,25,24,23,23,23,21,21,21,21,19,20,19,18,17,17,15,13,11,7,7,5,4,3,2,1,0,1,2,2,3,4,4,5,5,5,4,5,5,5,6,7,7,7,7,8,8,8,9,8,9,9,9,9,10,9,11,10,11,10,11,10,10,11,10,11,11,10,9,10,8,10,10,11,10,10,11,10,10,10,10,10,9,11,10,9,10,10,9,9,10,11,10,11,10,10,10,9,10,9,9,9,9,9,9,9,9,8,7,7,8,8,8,8,8,7,7,7,6,7,7,6,7,8,7,6,7,8,7,6,8,9,7,8,8,8,8,7,7,8,9,8,8,9,9,8,9,9,8,9,9,10,11,9,9,10,11,9,10,10,11,10,10,9,9,10,9,9,9,9,8,8,8,8,8,7,7,8,7,7,7,6,6,6,6,5,4,5,5,6,7,7,7,7,7,8,7,6,7,7,6,6,7,6,6,7,7,6,6,6,7,8,9,9,8,7,6,7,5,7,7,7,6,7,8,7,7,7,9,9,8,8,8,8,8,8,8,8,7,7,6,7,6,5,6,5,5,5,5,5,5,5,5,5,4,4,3,3,4,4,5,5,5,5,6,7,6,7,7,7,7,8,7,8,8,7,8,7,6,5,4,4,5,4,4,5,6,5,5,7,9,9,12,14,14,16,16,15,17,17,17,17,18,18,18,19,20,20,21,22,23,23,24,23,25,23,24,24,22,21,23,23,25,23,24,26,26,25,27,25,26,27,27,27,28,28,28,28,28,28,27,28,28,28,27,27,27,28,28,27,27,25,26,26,24,26,24,23,25,22,23,23,22,20,21,20,18,19,17,17,16,15,14,13,11,10,9,7,6,7,8,7,8,8,8,9,9,10,10,10,10,10,11,11,11,11,13,13,11,12,14,13,13,13,13,12,12,11,11,12,13,13,13,12,13,13,13,11,11,11,12,10,10,10,10,9,9,9,8,8,7,7,7,7,7,8,8,9,8,9,9,9,9,9,9,9,10,11,10,11,11,11,11,10,9,8,8,7,7,6,6,6,6,6,6,7,6,7,7,7,7,7,7,6,7,7,6,6,7,6,6,6,7,5,7,6,6,6,5,7,7,8,9,9,10,9,8,8,7,7,9,8,8,8,9,9,9,9,9,9,10,9,8,9,9,8,7,7,8,7,6,6,7,6,5,6,5,5,5,5,4,4,4,4,3,3,4,5,4,4,5,5,4,4,5,6,6,6,6,7,7,7,6,7,7,6,6,6,6,6,7,6,7,6,6,6,6,6,6,6,6,6,6,5,6,6,5,4,5,5,4,4,4,4,5,5,6,5,6,6,6,7,7,6,7,7,7,7,8,8,7,8,8,7,7,8,7,7,7,7,7,6,5,4,4,3,3,3,3,3,3,3,3,3,3,2,4,4,4,4,5,5,5,6,6,6,7,8,7,7,7,7,8,8,7,8,8,8,7,7,7,6,7,6,6,6,6,6,5,4,4,3,4,3,3,4,5,5,5,6,6,6,7,7,7,8,7,8,8,9,9,9,9,9,8,8,8,7,8,7,7,8,7,7,7,7,6,5,6,7,7,8,8,8,8,9,8,8,9,9,9,9,9,10,9,9,9,11,9,9,8,9,9,8,8,8,8,8,8,8,8,8,9,9,8,8,8,8,8,8,10,10,12,13,14,14,14,14,15,17,18,18,19,20,21,21,23,20,22,21,21,24,22,23,25,23,25,25,24,24,25,23,26,26,26,26,25,25,26,24,25,25,24,24,25,24,24,25,25,24,22,23,25],[29,29,29,29,29,29,29,28,28,28,28,27,27,27,27,27,27,28,27,27,27,27,26,27,27,27,27,27,27,27,27,27,28,28,27,27,27,27,28,27,27,26,26,26,26,25,24,24,24,25,23,22,23,22,21,21,21,19,20,20,17,13,11,7,7,5,3,3,2,2,1,0,1,1,1,2,2,3,4,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,8,8,7,6,6,6,7,6,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,7,6,7,7,7,6,7,7,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,5,4,4,4,4,3,3,3,3,3,3,4,4,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,5,5,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,3,2,3,3,4,3,3,4,4,4,5,5,5,5,5,5,5,5,5,4,4,3,3,3,3,3,3,4,4,4,4,6,7,8,9,13,13,16,17,16,16,17,18,18,18,19,19,18,19,20,21,22,23,24,25,24,25,23,24,24,22,21,24,25,25,24,25,25,26,26,26,26,27,27,28,28,28,27,28,27,28,28,27,27,27,27,27,27,27,28,28,27,27,26,27,27,26,27,26,26,26,24,24,24,23,22,21,20,19,19,18,17,17,15,14,13,11,8,7,5,4,4,5,5,5,5,5,6,6,6,6,7,7,8,8,8,8,9,10,9,9,10,10,10,10,10,10,9,9,9,9,9,9,10,10,11,10,10,10,9,9,8,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,7,7,8,8,9,9,8,7,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,5,5,6,7,7,8,7,6,5,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,2,3,3,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,6,6,5,6,6,6,6,6,6,6,6,5,6,6,5,6,5,4,4,3,3,2,2,2,2,1,2,2,2,2,3,3,2,3,3,3,3,4,4,4,4,4,5,5,5,4,5,5,4,5,5,5,4,4,4,4,4,4,4,4,5,3,4,4,3,3,2,2,2,3,3,2,4,4,3,4,5,4,4,4,5,5,5,5,5,6,6,6,5,5,5,5,5,5,4,5,4,4,5,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,6,7,8,9,10,11,12,13,12,13,15,15,17,18,19,22,22,21,19,20,21,21,24,21,23,24,22,26,26,26,24,25,25,26,26,25,26,25,25,25,23,24,26,26,24,26,24,24,25,26,23,22,24,24],[28,28,28,27,28,28,28,28,27,27,26,26,27,26,26,25,26,27,26,26,27,26,27,26,26,26,26,26,26,26,26,26,26,26,25,25,25,26,26,26,26,24,24,25,25,24,23,23,22,23,22,21,21,20,19,19,19,18,18,18,16,13,11,9,6,5,4,3,3,2,1,1,0,1,1,2,2,3,3,3,3,4,4,4,3,5,4,5,5,6,6,5,6,5,6,6,6,7,7,7,7,7,7,7,8,7,8,8,8,8,8,8,7,7,6,7,7,6,7,7,6,6,6,6,7,6,6,7,7,6,6,7,6,6,7,8,7,7,6,6,6,6,6,6,5,6,6,6,5,6,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,6,5,5,5,6,5,5,6,7,7,7,6,7,7,7,7,8,8,8,7,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,4,4,5,6,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,5,5,6,5,5,5,4,4,3,4,4,4,4,5,5,4,4,5,6,6,5,6,5,6,5,5,5,5,4,4,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,2,2,3,3,3,3,4,4,4,4,5,5,5,6,5,6,6,6,6,6,5,6,5,4,4,4,4,4,4,4,4,4,5,5,6,8,10,13,13,14,15,15,16,16,17,17,17,16,18,19,19,20,21,21,21,22,23,24,22,24,23,22,23,21,20,23,23,23,22,23,24,25,25,26,25,25,26,26,26,26,26,25,26,25,26,25,26,26,26,26,26,27,26,27,26,26,25,25,25,24,25,24,23,24,22,23,23,22,21,20,19,18,19,17,16,16,14,13,11,9,8,8,6,5,5,6,6,6,7,7,8,7,8,8,8,8,9,9,9,9,9,11,10,10,11,12,11,11,11,11,10,9,9,10,9,9,10,10,11,10,11,10,9,9,8,8,8,8,8,7,7,7,6,6,7,6,6,6,6,6,6,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,7,7,6,6,5,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,4,4,5,5,5,4,4,4,5,4,5,5,4,5,5,5,6,6,8,8,8,7,6,6,5,5,6,6,5,5,6,6,6,6,7,7,7,7,6,7,6,5,6,6,6,5,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,2,3,4,3,3,4,5,4,4,5,5,6,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,5,4,5,4,4,4,4,5,3,4,4,4,4,4,5,4,5,5,4,4,5,4,5,5,5,5,5,6,6,6,7,6,6,7,6,6,6,6,6,6,5,5,4,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,4,4,4,5,5,5,6,6,6,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,3,2,3,2,3,3,3,4,5,5,5,4,5,5,6,6,6,6,6,7,6,7,6,7,6,6,6,6,6,5,5,6,5,5,5,5,5,4,5,5,5,6,6,7,7,6,6,6,7,7,7,7,7,7,8,7,7,8,7,7,7,7,7,6,6,6,6,6,6,7,6,5,6,6,5,6,6,5,6,6,7,8,10,9,12,11,13,12,12,14,15,17,18,18,21,21,20,19,20,21,20,23,20,23,23,23,24,26,24,24,25,24,24,25,25,24,24,24,26,23,23,25,25,24,25,23,23,24,25,25,21,24,24],[28,29,28,28,29,29,29,28,28,28,28,27,28,27,28,26,27,27,26,28,27,26,27,27,26,27,27,27,27,27,26,27,27,27,26,27,26,27,27,27,27,26,26,26,26,26,24,24,24,23,23,23,22,21,20,20,19,18,18,18,16,13,11,8,7,6,4,4,3,2,2,1,1,0,1,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,4,4,4,3,4,5,4,5,5,5,5,5,6,6,6,7,7,7,7,8,8,7,6,5,5,6,6,6,6,6,6,5,5,6,6,5,5,5,5,5,5,6,5,6,6,6,6,6,5,6,5,4,5,5,4,4,5,4,3,4,4,3,3,4,4,4,5,5,4,5,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,6,6,5,6,6,6,6,6,6,6,6,5,5,4,5,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,2,3,3,2,3,3,4,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,4,5,5,5,4,4,3,4,3,3,3,3,4,3,3,4,4,4,4,5,5,5,4,4,4,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,3,2,2,1,2,2,2,2,3,3,3,3,4,5,5,5,4,5,5,5,5,5,5,5,4,4,3,3,3,4,3,3,4,4,5,5,6,8,10,11,12,15,16,18,18,17,19,20,18,19,21,22,21,23,23,23,24,24,24,26,24,26,24,23,25,23,24,25,24,25,24,25,25,27,27,27,27,27,28,28,28,27,28,27,27,27,27,27,27,27,27,27,27,27,27,28,27,27,27,27,27,26,27,26,25,27,24,25,25,24,23,23,20,20,20,17,16,15,13,12,11,9,8,7,5,4,5,5,5,5,5,6,6,6,7,7,7,7,8,9,8,9,9,10,10,10,10,11,11,10,10,10,10,9,9,9,9,9,10,10,11,10,10,10,9,9,9,8,7,7,7,6,6,6,5,5,5,5,5,4,4,4,5,5,5,5,6,5,5,5,6,6,6,7,7,8,8,8,9,8,7,6,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,3,4,4,4,4,3,4,4,3,4,4,4,4,4,5,5,6,7,7,7,7,6,4,4,4,4,4,4,4,4,5,5,5,6,6,6,6,5,6,5,5,5,4,4,4,4,3,4,4,3,3,3,3,2,3,3,2,2,2,3,2,2,3,2,2,3,3,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,4,4,4,3,3,3,3,4,3,3,3,3,3,4,4,4,5,5,5,6,6,5,6,6,6,6,5,6,6,6,5,5,4,4,3,3,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,3,3,2,3,3,3,3,4,4,4,4,5,4,5,5,5,5,6,6,6,6,6,6,5,6,6,6,6,5,5,5,5,4,4,5,4,4,4,4,5,5,6,6,6,6,5,6,6,7,7,6,7,7,6,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,7,9,9,11,12,12,14,13,16,16,17,18,19,22,22,21,19,20,22,21,23,22,23,24,23,25,25,24,24,24,25,25,25,25,26,24,25,25,22,24,25,25,25,25,24,23,25,26,24,24,25,24],[28,28,28,28,29,29,28,28,28,28,27,27,28,26,27,26,27,27,26,27,27,26,27,27,26,27,27,26,27,26,26,27,27,26,26,27,26,26,26,26,26,26,25,25,25,25,23,23,23,23,22,20,21,20,19,19,20,18,18,18,15,13,12,10,9,7,5,4,4,3,3,2,1,1,0,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,7,6,6,5,6,6,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,6,6,7,6,5,6,5,5,5,5,4,5,4,4,4,4,4,4,5,5,4,4,4,3,3,4,4,3,4,4,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,4,5,6,5,5,6,6,6,5,6,6,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,5,5,4,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,5,5,6,6,5,5,4,4,4,4,4,4,5,4,5,5,5,5,6,5,5,6,5,5,5,5,5,5,4,4,3,4,4,3,3,3,2,2,3,2,2,3,3,3,2,2,2,3,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,6,5,5,6,5,4,4,4,5,5,4,5,5,5,7,6,7,10,11,12,12,15,16,17,18,16,17,19,17,18,20,21,20,21,22,22,22,23,24,24,23,24,22,22,23,22,22,23,23,24,22,24,24,25,25,27,26,26,26,26,26,27,27,27,26,26,26,26,26,27,27,26,26,26,26,26,26,26,25,26,26,24,26,24,24,25,22,23,23,23,22,21,20,20,19,18,17,17,14,13,13,10,8,7,7,6,6,6,6,5,6,6,7,7,8,8,9,8,9,10,9,10,10,11,11,11,12,12,11,11,11,11,10,9,10,9,10,10,11,11,12,11,12,10,10,9,9,9,9,9,8,8,7,7,6,6,6,6,5,5,4,5,5,5,5,5,6,6,6,6,6,6,7,8,8,8,9,9,9,8,8,7,6,6,5,5,4,3,3,4,4,3,4,4,4,4,5,5,5,5,5,5,4,5,5,5,4,4,4,5,4,5,5,5,4,5,5,6,6,8,8,8,8,6,6,5,4,5,5,4,4,6,6,6,6,7,6,7,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,4,3,3,3,3,2,2,3,3,2,3,3,3,2,3,3,3,3,4,4,3,4,5,5,5,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,4,5,5,4,4,4,4,3,3,3,3,3,3,4,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6,5,6,6,5,5,5,5,4,4,3,2,2,3,3,2,3,3,3,3,3,4,3,4,4,4,3,5,5,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,3,3,4,4,4,3,5,5,4,5,6,5,5,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,5,5,5,6,6,7,7,7,6,7,7,7,7,7,7,8,8,7,8,7,8,7,7,7,7,7,6,6,6,6,6,6,6,6,5,6,6,6,5,6,6,6,6,7,9,10,10,11,13,13,13,13,15,16,17,18,19,21,21,20,19,20,21,20,22,20,23,23,23,25,26,25,25,25,24,26,25,25,25,25,25,27,23,24,25,25,24,25,23,22,24,26,24,22,25,24],[28,28,28,28,28,29,28,28,28,28,28,27,28,27,27,27,27,28,27,28,28,27,27,27,26,28,28,27,28,27,27,28,28,28,28,28,28,28,28,28,28,27,26,26,27,26,24,25,25,24,23,23,23,20,20,21,20,19,19,20,17,14,11,10,7,6,5,5,4,3,3,2,2,1,1,0,1,1,2,2,2,2,2,4,3,3,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,6,5,5,5,6,6,6,6,6,7,5,6,6,6,5,6,6,6,6,6,7,6,6,7,7,6,7,6,7,6,6,6,6,5,5,5,5,5,4,4,4,3,4,4,4,5,5,4,4,4,4,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,5,6,5,5,5,5,5,5,5,6,5,5,6,6,5,6,6,7,7,7,7,7,7,8,7,7,7,7,7,6,6,6,6,6,5,5,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,5,5,4,5,5,5,4,5,5,5,4,5,5,5,4,5,5,4,5,5,5,6,6,6,6,5,4,4,4,4,5,4,5,4,5,4,5,5,5,5,5,6,5,6,6,5,5,5,4,4,3,4,4,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,7,7,7,6,5,6,6,5,5,4,5,5,4,5,5,6,6,7,7,9,9,12,14,14,16,17,18,18,18,19,18,19,20,20,20,22,23,23,23,24,25,26,25,26,24,23,25,24,22,25,24,25,24,25,24,26,25,26,26,26,26,27,26,27,27,26,26,26,26,26,26,27,26,26,26,27,27,27,27,27,26,27,27,26,26,26,26,27,24,25,26,23,21,22,19,19,20,17,17,16,14,13,11,10,9,8,6,6,5,7,7,6,7,7,8,8,8,9,8,8,9,10,9,9,10,11,10,11,11,11,12,11,10,11,9,9,9,10,10,10,11,12,12,11,12,11,10,10,9,9,9,9,9,8,8,8,8,7,7,6,7,5,5,5,6,7,6,6,7,7,7,7,7,7,8,8,9,8,9,9,10,9,8,7,7,6,6,5,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,4,4,5,5,4,4,4,4,5,4,4,5,4,4,5,5,5,6,7,7,8,8,6,6,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,4,5,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,4,5,5,4,4,5,4,4,5,5,5,5,5,4,5,5,4,5,5,4,5,5,5,5,4,5,5,4,4,4,4,4,4,3,4,3,4,4,3,3,3,3,4,4,4,4,5,5,5,6,5,6,6,7,5,5,6,6,7,6,6,5,4,4,3,2,3,3,3,2,3,4,3,3,3,4,3,3,4,4,4,4,5,5,7,6,6,6,5,6,6,5,5,6,6,6,5,5,6,5,5,5,5,5,5,4,5,4,5,4,4,3,3,5,5,4,4,5,4,5,5,5,5,6,6,7,6,7,7,8,7,7,7,7,6,7,7,6,6,7,7,5,5,7,6,5,5,6,6,7,8,8,8,7,7,7,7,7,8,7,7,8,7,8,7,8,7,7,7,7,7,6,6,7,6,6,7,7,6,6,6,6,5,6,6,6,6,6,8,9,10,10,12,13,13,13,13,15,16,18,18,19,21,22,22,19,21,22,21,24,21,23,23,23,25,25,24,25,26,25,25,26,26,26,25,26,26,23,23,25,26,23,26,23,23,24,26,24,21,25,25],[27,27,27,28,27,28,28,28,28,27,26,26,26,26,26,25,26,26,26,26,27,26,26,27,26,26,26,26,27,26,26,26,27,26,26,26,26,26,27,26,26,25,25,25,25,25,23,22,23,22,22,21,22,21,19,20,19,17,18,16,16,14,11,9,7,6,5,4,4,3,3,2,2,2,2,1,0,1,1,1,2,1,2,3,2,3,3,4,4,4,4,4,4,3,4,5,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,5,5,4,4,5,5,5,4,6,5,4,5,5,5,4,5,6,5,5,5,6,5,6,6,7,6,6,5,6,5,5,5,5,4,4,5,4,3,4,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,2,3,3,2,3,4,3,3,4,4,4,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,7,7,7,7,7,7,7,8,7,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,4,4,5,5,4,5,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,5,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,5,5,5,5,4,4,3,4,4,3,3,3,3,3,4,4,4,4,4,5,4,3,3,3,4,5,5,5,5,5,5,5,6,6,7,7,7,7,7,7,7,6,7,6,5,5,4,5,5,4,4,5,5,6,6,7,9,10,12,13,13,15,15,16,16,17,17,17,17,18,19,20,21,22,21,21,24,24,24,24,25,24,22,23,23,23,23,23,24,23,23,23,25,25,26,24,25,25,25,26,26,25,25,25,25,25,26,25,26,25,26,26,26,26,26,25,25,25,25,25,24,26,24,24,25,22,23,24,23,22,21,19,19,19,18,16,17,14,12,11,10,9,7,6,5,6,7,7,7,8,7,8,7,8,9,9,8,9,10,9,9,10,11,10,11,12,12,12,13,11,11,10,10,10,10,10,11,11,12,12,11,12,12,10,10,10,10,9,9,9,9,8,8,8,7,7,7,7,6,7,6,7,7,8,7,7,8,8,8,8,8,8,8,9,9,9,10,9,9,9,8,7,7,7,6,5,5,5,6,6,5,6,6,6,5,6,6,5,6,5,5,5,5,5,5,4,4,4,5,4,5,5,4,4,5,5,6,6,7,7,7,7,6,5,5,5,5,6,4,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,4,4,4,3,4,5,4,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,6,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,3,4,3,2,2,3,4,4,4,4,5,4,5,6,6,6,6,6,5,5,6,6,7,5,6,4,4,3,3,2,3,3,3,2,3,3,3,3,4,4,4,4,4,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,4,5,5,4,4,4,4,4,3,4,3,3,4,4,4,4,5,5,5,6,6,7,6,6,7,6,7,7,8,7,7,7,7,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,8,7,7,7,7,7,7,8,8,8,8,8,8,8,8,7,9,8,7,7,8,7,7,7,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,8,9,10,10,12,13,12,12,14,15,16,17,18,19,21,22,22,19,21,21,20,23,22,22,23,23,23,24,24,24,24,25,25,24,25,26,24,24,26,24,24,24,24,24,25,23,23,25,24,24,22,23,23],[28,29,29,29,29,29,29,28,28,28,28,27,28,27,27,27,27,28,27,27,27,27,27,27,26,28,27,27,28,27,27,27,28,28,27,28,27,28,27,27,27,27,26,26,26,26,24,23,25,24,22,22,23,22,19,22,20,19,18,18,16,14,12,9,8,6,5,4,4,3,2,3,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,3,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,5,5,4,5,5,4,4,5,4,4,5,5,5,5,5,4,5,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,3,3,4,4,3,3,2,3,3,2,1,3,3,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,6,6,6,5,6,6,5,6,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,3,3,4,4,3,4,4,5,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,6,5,5,5,5,4,4,5,5,4,4,5,5,4,5,4,4,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,3,4,3,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,5,6,5,5,5,4,5,5,4,4,5,6,6,6,9,10,12,12,12,14,15,18,18,18,20,19,18,20,23,22,22,23,25,24,24,24,25,25,25,26,23,24,25,23,22,25,23,26,24,24,25,27,26,27,26,26,27,27,27,28,27,27,26,27,27,27,27,27,28,27,27,27,27,28,27,27,26,27,26,26,28,27,26,27,25,25,25,23,24,23,19,20,19,18,17,16,14,13,12,10,8,8,7,6,6,7,7,6,7,7,8,8,9,9,10,9,10,10,9,10,10,12,10,11,12,12,12,12,11,12,10,10,10,10,10,11,11,12,13,12,12,11,10,10,9,9,9,10,9,9,9,8,7,7,7,6,6,6,5,6,6,6,6,6,7,6,7,7,8,8,8,8,9,9,9,9,9,8,8,7,7,6,6,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,5,5,6,6,7,7,6,5,5,4,4,4,4,3,3,4,4,4,4,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,1,2,2,3,3,3,4,4,4,5,5,5,5,6,5,4,5,5,6,6,5,5,4,3,3,2,2,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,6,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,7,7,7,7,7,7,8,7,7,7,6,6,6,6,6,6,5,6,6,5,5,5,6,6,7,7,7,7,7,8,7,7,7,7,7,8,8,7,7,7,8,7,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,10,10,12,13,13,12,14,16,17,19,20,19,23,22,23,21,22,21,21,24,23,23,25,24,25,26,27,25,26,26,27,25,26,28,25,25,27,24,26,26,26,26,26,26,24,26,26,25,24,25,25],[28,28,28,28,28,29,28,28,29,27,27,27,27,27,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,27,28,27,27,27,27,27,26,26,26,26,26,24,23,23,22,22,22,21,21,20,20,20,19,18,18,16,13,11,9,8,5,5,4,4,3,3,3,2,3,2,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4,5,5,5,5,6,6,5,4,4,4,4,4,4,4,5,4,4,4,5,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,3,4,4,3,3,3,3,2,3,3,3,4,4,3,3,3,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,5,5,5,4,4,3,4,4,3,3,4,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,2,3,3,4,4,3,3,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,4,4,4,4,4,3,3,3,2,2,3,3,2,3,3,2,3,3,3,3,3,3,4,3,3,3,3,3,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,5,6,6,6,5,5,5,5,5,5,5,5,6,6,6,8,9,12,12,12,14,16,16,16,17,17,17,17,18,19,19,20,22,22,22,22,23,24,25,24,25,24,22,23,22,22,24,23,24,24,23,24,25,24,26,25,26,26,26,26,26,26,25,26,25,26,26,26,26,26,26,25,26,26,26,26,26,25,25,26,25,26,25,25,26,23,24,25,24,22,22,20,20,20,18,17,16,14,13,12,10,8,8,7,6,6,6,7,6,7,7,7,8,8,8,8,8,9,10,9,9,10,10,9,10,12,12,12,11,10,11,10,9,9,9,10,10,11,11,12,11,12,11,11,10,9,9,9,9,8,8,8,7,7,7,6,7,6,6,5,5,6,6,6,6,6,6,7,7,7,7,7,7,8,8,9,8,8,8,8,6,6,6,5,5,4,4,4,4,4,4,4,5,5,4,5,5,4,4,5,4,4,4,4,4,3,4,3,3,3,4,3,3,3,4,4,4,5,6,6,6,6,5,4,4,3,3,4,3,3,3,4,4,4,4,4,5,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,4,4,3,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,5,4,5,5,5,4,4,5,5,5,5,5,4,4,3,3,2,2,2,3,3,3,3,4,3,3,4,4,4,5,5,5,5,5,5,6,5,6,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,6,7,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,5,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,7,8,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,8,10,9,11,12,12,12,13,14,16,16,18,18,20,20,21,19,20,20,19,22,21,21,23,22,24,25,25,22,24,23,24,24,24,25,24,24,25,24,24,24,24,24,25,24,23,24,24,25,23,24,25],[28,28,28,29,28,29,29,28,29,28,28,28,28,27,27,27,27,28,27,27,28,27,27,28,27,27,28,28,28,27,27,28,28,28,28,28,27,28,28,28,27,27,26,26,26,25,24,23,23,23,23,21,22,21,20,21,20,19,20,19,17,14,12,9,8,6,5,4,4,3,3,2,2,2,2,2,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,4,4,3,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,3,3,4,3,3,4,4,3,3,4,4,3,4,4,5,5,5,4,5,5,5,5,5,5,5,5,4,4,3,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,3,3,4,4,4,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,6,6,6,5,6,5,5,4,4,4,4,4,5,5,5,5,5,7,9,11,12,14,14,16,17,17,18,18,19,19,18,20,20,20,21,22,22,22,23,24,25,24,25,24,23,25,23,22,24,24,25,23,24,24,25,25,26,25,26,26,26,27,27,26,26,26,26,27,26,27,26,26,26,26,27,26,27,27,27,27,26,27,26,27,25,26,27,25,25,25,24,23,23,20,20,21,19,17,17,15,14,12,10,9,8,6,6,5,6,6,6,6,6,7,7,7,8,8,8,9,9,8,8,9,10,10,10,10,11,11,11,10,10,9,9,9,9,9,10,10,11,11,10,11,10,10,9,9,8,8,8,8,7,7,7,7,6,6,6,5,6,5,5,5,6,5,6,6,6,6,6,6,6,7,7,8,8,8,8,8,8,7,6,6,5,5,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,6,6,6,4,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,4,4,4,5,5,5,5,4,3,3,2,2,2,2,2,2,2,3,3,3,3,4,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,6,6,6,6,6,6,5,6,6,5,6,6,5,5,5,5,5,6,6,7,7,6,6,7,7,7,7,7,7,7,7,7,6,7,7,6,6,6,6,5,6,6,5,5,6,5,5,5,5,6,5,5,5,5,5,5,7,8,10,9,11,12,13,12,13,14,16,18,18,19,21,21,21,19,21,21,21,23,21,23,23,22,25,25,24,24,26,24,26,25,25,26,24,25,26,24,24,25,25,25,25,25,24,25,26,25,22,25,24],[28,28,28,28,28,28,28,28,29,28,27,27,27,27,27,26,26,27,26,27,28,27,27,27,28,28,27,28,28,26,27,27,27,28,28,28,27,27,28,27,27,26,26,26,26,26,24,24,24,24,23,23,22,21,20,21,20,19,19,19,17,14,12,9,8,6,5,4,4,3,3,2,3,3,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,5,5,5,5,4,3,3,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,5,5,5,5,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,4,4,4,3,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,5,5,5,4,5,4,5,4,5,5,5,5,6,7,9,12,11,12,14,15,18,18,17,19,19,19,20,21,21,21,23,24,24,23,24,26,26,25,26,23,24,26,25,24,25,25,25,25,24,25,27,26,27,26,27,27,27,27,27,27,27,27,27,27,27,28,28,28,27,27,27,27,28,27,27,26,27,27,26,27,27,26,27,25,25,25,25,24,23,21,22,22,20,19,17,15,15,13,10,8,7,6,6,5,6,6,6,6,6,7,7,7,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,10,11,10,9,10,9,9,10,10,11,12,10,12,10,11,9,9,9,9,9,8,8,8,7,7,6,6,6,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,8,8,9,9,8,8,7,6,6,5,5,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,6,6,6,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,4,4,4,4,5,5,4,4,5,5,5,5,5,4,3,3,2,2,3,2,2,3,3,3,2,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,6,6,6,6,6,6,5,5,5,6,5,5,6,5,5,5,5,6,6,7,7,6,7,6,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,5,5,6,5,5,6,5,5,5,5,6,5,5,5,5,5,6,7,8,10,10,11,13,12,12,12,16,17,18,20,20,22,23,23,20,21,22,20,24,21,23,23,22,25,25,26,24,25,25,26,25,25,26,25,25,26,24,26,26,25,24,25,25,23,25,25,23,22,24,24],[29,28,28,29,28,29,29,28,29,28,28,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,27,28,27,28,27,27,27,27,27,27,26,26,26,26,24,24,24,23,22,22,22,20,20,21,20,19,18,19,16,14,12,9,8,6,5,4,4,3,3,3,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,4,4,3,4,5,5,5,5,5,4,3,3,3,4,4,4,4,5,4,4,3,4,4,3,4,4,3,4,4,4,4,4,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,4,4,3,3,4,4,3,3,3,4,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,5,6,5,5,6,5,5,4,4,5,5,4,5,5,5,6,7,8,9,11,12,12,14,16,18,17,17,19,19,19,21,22,21,22,23,24,24,24,24,25,25,25,25,24,24,25,23,23,24,24,25,25,24,25,26,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,26,26,27,26,26,27,25,25,24,25,24,23,21,20,20,18,18,17,15,13,12,10,8,8,6,6,5,6,6,6,6,6,7,8,7,8,8,8,9,9,9,9,9,10,10,10,11,11,11,11,10,10,10,9,9,9,10,10,10,11,12,11,10,10,9,9,9,8,9,8,8,7,7,7,7,6,6,5,6,5,5,5,5,5,5,6,6,6,6,6,7,6,7,7,7,8,8,8,8,8,7,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,3,3,3,4,4,5,5,6,7,7,6,5,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,4,4,4,5,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,5,5,5,4,4,5,5,6,5,5,4,4,3,2,2,2,2,2,2,2,3,3,3,3,4,3,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,6,6,6,6,6,6,5,6,5,5,5,6,5,5,5,5,5,6,7,6,6,6,6,7,6,7,6,7,7,7,7,7,6,7,7,6,7,6,6,5,6,6,5,6,6,6,5,6,6,5,5,6,6,5,5,6,8,8,9,9,11,12,13,11,13,14,16,17,18,18,22,22,20,20,21,21,21,23,21,22,23,22,26,25,25,24,26,25,25,26,26,26,26,26,26,23,24,26,25,25,26,25,24,25,26,24,23,26,26],[29,28,28,29,28,29,29,28,29,28,28,28,28,27,27,27,27,28,27,28,28,27,28,27,27,27,28,27,28,27,27,27,28,28,28,28,28,28,28,27,28,26,26,26,26,25,24,23,23,22,22,21,22,20,20,20,20,19,19,19,17,14,12,9,8,6,5,5,4,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,3,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,4,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,4,4,3,4,4,5,5,5,5,5,5,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,6,6,7,8,9,12,11,12,14,15,17,17,16,17,19,18,20,19,20,20,22,23,23,23,24,25,25,24,25,24,23,24,22,22,25,24,25,24,24,25,27,26,27,27,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,26,27,26,27,27,26,26,27,25,26,25,24,24,23,21,20,20,19,18,16,14,13,12,10,9,8,6,6,6,6,6,6,7,7,7,8,8,8,8,8,9,10,9,9,10,11,11,11,11,12,12,12,11,10,10,10,10,9,10,10,10,12,12,11,11,10,10,10,9,9,9,9,8,8,8,8,7,6,7,6,6,6,5,5,6,5,6,6,7,6,6,7,7,7,7,8,8,8,8,8,9,8,8,7,6,6,5,5,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,6,6,6,4,4,3,3,3,3,2,2,2,3,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,5,5,5,5,5,5,5,4,5,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,2,3,2,2,2,2,2,3,2,3,3,4,4,4,4,4,5,4,5,4,4,5,5,6,6,5,4,4,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,6,5,6,5,6,5,5,6,6,5,4,5,5,4,4,5,5,4,4,4,4,4,4,5,4,5,5,5,5,5,6,5,6,5,6,6,6,6,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,7,7,7,8,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,7,8,9,10,11,13,13,12,14,15,16,18,19,20,22,21,22,20,21,22,22,25,22,24,24,23,25,26,25,25,26,25,26,25,26,27,25,26,26,25,25,25,26,26,26,25,25,26,26,26,24,25,26],[28,27,28,28,27,28,28,28,28,27,27,27,27,26,26,25,26,27,25,27,27,25,27,27,26,27,27,26,27,26,26,27,27,28,27,28,26,27,28,27,27,26,25,25,26,25,23,24,24,23,21,23,23,20,20,21,20,19,19,19,17,14,11,9,7,6,5,4,4,3,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,3,3,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,3,3,4,4,3,4,4,4,3,4,3,3,4,4,4,4,5,5,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,5,6,5,5,4,4,5,5,4,4,5,5,5,6,7,8,10,9,11,14,14,16,16,16,18,19,17,18,21,20,20,22,23,24,23,23,24,26,25,25,24,24,25,23,23,25,24,24,24,24,24,26,26,26,25,26,27,27,26,26,26,26,27,27,27,26,27,27,27,26,27,27,27,27,27,26,26,27,26,26,27,26,26,27,26,26,25,25,24,23,22,21,20,19,18,18,15,14,12,10,8,7,6,6,6,6,6,5,6,6,7,7,7,7,8,8,8,9,9,9,9,10,10,10,10,10,10,10,10,10,9,9,9,9,9,10,9,10,11,10,10,9,10,9,8,8,8,8,8,8,8,7,6,6,6,6,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,7,7,7,8,8,8,7,7,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,4,5,5,6,7,7,5,4,3,3,2,2,3,2,2,2,3,3,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,3,3,4,3,3,3,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,2,2,2,2,2,2,3,3,3,4,3,4,4,5,4,4,4,5,5,4,4,4,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,7,7,6,6,6,6,6,6,5,5,6,6,5,5,6,5,5,5,5,6,6,7,7,6,7,6,6,7,7,7,7,7,7,6,6,6,6,7,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8,9,9,11,12,12,12,12,15,16,18,20,20,21,22,22,20,21,22,21,23,21,22,23,22,24,24,25,24,25,25,25,24,24,26,24,24,26,23,24,25,25,24,25,24,23,25,25,23,23,24,23],[28,28,27,28,27,28,28,27,28,27,26,27,27,26,25,25,26,26,24,26,26,25,26,26,25,26,26,25,26,25,25,26,26,26,26,26,25,26,26,26,26,26,25,25,24,24,22,22,21,22,21,20,20,19,18,19,18,17,16,17,14,13,10,8,7,5,5,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,3,3,4,4,3,4,4,3,3,4,4,4,4,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,2,2,2,2,2,2,3,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,5,5,6,7,7,11,10,11,13,14,16,15,15,17,18,16,18,19,19,19,20,22,22,21,23,23,23,22,24,23,23,24,21,22,24,23,23,22,24,23,26,24,26,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,26,26,26,25,26,25,26,26,25,25,26,23,23,23,24,22,21,19,19,18,17,16,16,14,12,11,9,8,7,6,5,5,6,6,5,6,6,7,7,7,7,7,7,8,8,8,8,8,9,9,9,10,10,10,10,9,9,9,9,8,8,8,9,9,10,11,9,9,9,9,8,8,8,7,7,7,7,7,7,6,6,6,5,5,4,4,4,5,5,4,5,5,5,5,6,6,5,6,6,7,7,7,7,7,7,6,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,4,5,6,6,6,4,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,4,4,3,4,4,5,4,3,4,5,5,4,4,3,3,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,6,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,4,5,5,5,4,4,5,4,4,5,5,4,4,5,6,7,8,8,10,11,11,10,11,13,14,16,16,17,20,21,18,17,19,20,19,21,19,20,21,20,24,23,23,22,24,23,24,24,24,23,23,24,25,22,22,24,24,23,24,23,22,23,24,23,21,23,23],[28,28,28,28,28,28,28,27,28,27,26,27,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,26,27,26,26,27,27,27,27,27,27,27,27,27,27,26,26,26,25,25,23,23,23,22,21,21,21,20,19,20,18,18,17,17,15,13,11,8,7,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,2,1,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,4,3,4,4,3,4,4,4,4,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,4,4,4,3,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,5,4,5,5,5,6,7,6,7,10,10,10,14,14,15,15,15,17,17,17,18,19,19,20,21,22,22,22,23,23,25,23,24,23,22,24,23,21,24,23,24,24,23,23,25,24,26,25,26,26,27,26,27,26,26,27,26,27,26,26,27,26,27,26,27,27,27,27,26,25,26,26,27,27,26,26,26,23,25,24,24,24,22,21,20,19,18,16,16,14,12,11,9,8,7,6,6,5,5,5,5,6,6,6,6,6,7,7,7,7,8,7,8,8,9,9,9,10,10,10,10,9,9,9,8,8,8,8,9,9,10,10,10,9,9,9,9,8,7,8,7,7,7,7,6,6,6,5,5,5,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,6,7,7,7,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,4,4,5,6,6,6,5,4,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,3,3,3,3,3,4,3,4,4,3,4,5,5,4,4,4,3,3,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,5,6,6,8,8,10,11,11,10,11,13,14,17,17,18,20,21,19,18,20,20,19,22,20,22,22,22,24,24,24,24,25,23,25,25,25,26,24,25,25,23,23,25,25,25,25,24,23,25,25,24,21,23,25],[28,28,28,29,28,29,28,28,28,28,27,27,27,27,27,26,27,27,26,27,27,26,28,27,26,28,27,27,28,26,26,27,28,28,27,28,27,27,27,27,27,26,25,26,25,25,23,23,23,21,19,21,21,19,19,20,18,17,18,17,15,13,11,8,7,7,5,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,3,4,4,4,5,4,4,4,3,4,4,4,3,3,4,3,3,4,3,3,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,4,5,4,5,4,4,4,5,5,4,4,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,4,5,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,4,4,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,7,7,7,6,6,7,6,6,5,5,5,6,5,5,6,6,7,7,7,8,11,10,11,13,14,15,14,14,16,17,16,17,17,18,18,19,21,21,21,23,23,25,23,25,23,23,24,22,21,24,23,23,23,23,24,25,24,25,25,26,26,26,26,26,25,26,26,26,26,26,26,27,26,26,26,27,26,26,26,26,25,26,25,26,26,26,25,26,24,25,24,23,22,22,20,20,20,18,18,16,14,13,11,10,9,8,7,7,6,7,7,6,7,7,8,8,8,8,9,8,9,9,9,9,9,10,10,10,11,10,11,11,10,10,10,10,9,9,9,10,10,11,12,10,11,11,10,10,10,9,8,9,9,8,8,8,8,7,7,7,7,6,6,6,7,6,6,6,7,7,6,7,7,7,7,8,8,8,8,8,8,8,8,7,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,5,5,8,8,8,7,4,4,4,2,2,3,3,2,2,3,3,3,4,4,4,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,4,4,4,4,3,4,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,5,6,5,5,6,6,5,5,6,5,5,5,5,5,5,4,5,5,5,4,5,5,4,5,5,5,4,4,5,5,4,5,5,5,5,5,6,6,5,6,6,6,6,7,7,7,7,7,7,6,6,7,6,6,6,6,6,6,7,6,6,5,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,7,7,7,8,7,6,7,7,6,6,6,7,6,6,6,6,6,6,6,6,5,6,6,5,5,6,7,7,9,9,10,12,13,11,12,13,15,16,17,17,20,20,20,18,19,20,19,22,20,21,22,21,23,24,22,23,24,23,24,23,23,25,23,24,24,22,22,24,24,23,25,23,22,24,25,23,21,23,24],[28,28,28,28,28,29,28,28,28,27,27,27,27,27,27,27,27,27,26,27,27,26,27,27,26,27,27,27,28,27,26,27,28,28,27,28,27,28,28,27,28,26,26,26,26,25,23,24,24,22,22,22,22,20,20,21,19,18,19,19,16,14,11,8,7,6,5,4,4,3,4,3,3,3,3,2,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,4,3,3,3,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,4,4,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,6,7,6,7,10,9,10,13,13,14,14,14,16,16,15,17,18,18,18,20,22,23,23,24,24,26,24,26,23,23,25,24,22,25,25,24,25,25,24,26,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,27,28,28,27,27,27,27,28,27,27,27,27,27,27,25,26,24,25,24,22,22,21,19,20,17,17,15,12,12,10,8,7,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,9,8,9,9,10,9,10,10,11,11,11,10,10,10,9,9,9,9,10,10,11,12,11,10,10,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,6,6,5,5,6,6,6,6,7,6,7,7,7,8,8,8,8,7,7,6,6,5,5,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,4,4,4,7,6,7,5,4,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,3,3,3,4,4,3,4,4,4,4,3,4,4,5,5,5,4,4,3,3,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,6,5,5,5,5,5,5,5,5,6,6,6,6,6,7,6,6,6,6,6,7,7,6,6,6,7,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,7,8,9,11,12,13,11,12,14,16,17,18,18,21,21,21,19,21,20,22,24,22,23,23,23,25,25,25,24,24,23,25,25,25,27,24,25,25,24,24,24,25,25,25,25,24,25,25,25,23,23,24],[28,28,28,28,28,29,28,28,28,27,27,27,28,27,27,27,27,28,26,28,27,26,28,28,26,27,28,26,27,27,26,27,28,28,26,28,27,26,27,26,27,25,25,25,26,25,21,23,23,21,21,22,21,19,19,20,18,17,18,18,16,13,11,9,8,7,6,5,5,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,5,4,4,4,4,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,5,4,4,5,4,5,4,4,4,5,4,4,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,4,4,3,4,4,4,4,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,5,4,5,4,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,7,7,6,6,6,7,6,6,7,7,7,8,8,9,11,11,11,13,13,14,15,15,16,16,16,17,18,18,18,20,21,21,21,23,23,25,24,24,23,22,24,23,22,24,23,23,24,23,24,26,26,27,25,26,26,27,27,27,26,26,26,26,26,27,27,27,27,27,27,26,26,26,26,25,25,26,25,25,26,25,25,26,24,24,24,24,23,22,21,21,20,19,19,17,15,14,14,11,10,9,8,8,8,8,8,8,9,8,9,9,9,9,10,10,10,11,10,10,12,12,11,12,13,13,13,12,12,12,11,10,11,11,12,12,14,13,13,13,14,13,13,12,11,10,10,11,11,10,10,10,9,8,8,9,8,7,7,7,8,8,7,7,8,7,7,8,8,8,8,9,9,9,10,10,10,9,9,7,8,7,6,6,5,6,5,5,5,5,5,6,6,6,5,6,5,5,5,5,5,5,4,4,4,4,4,4,3,4,4,3,3,4,4,4,5,7,7,8,6,5,4,4,3,3,3,3,2,3,2,3,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,8,7,7,7,7,7,7,6,6,7,7,6,7,7,6,6,6,7,7,8,8,8,8,8,8,7,8,8,8,8,9,9,8,8,7,9,8,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,8,9,10,11,12,13,14,12,14,15,17,19,19,19,22,21,22,21,21,22,21,24,21,23,24,22,25,25,25,24,25,24,26,26,24,27,26,26,25,25,26,26,26,24,26,25,24,25,25,24,24,24,25],[28,28,28,28,28,28,28,28,28,28,27,27,27,27,27,26,27,27,27,27,27,27,28,27,27,28,27,27,28,26,26,27,27,27,27,27,26,27,27,27,27,26,25,26,25,25,22,23,23,22,21,21,21,20,19,20,19,18,18,18,16,13,12,9,8,7,6,6,5,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,3,3,3,4,4,4,5,5,4,4,4,4,4,4,4,3,3,3,4,3,3,4,4,4,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,4,4,4,4,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,5,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,3,3,4,3,3,4,4,3,3,4,4,4,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,7,6,7,8,8,8,11,11,11,13,14,15,15,15,17,18,18,20,20,21,21,22,23,24,24,25,25,26,25,26,25,24,25,23,22,25,25,24,24,24,24,26,25,26,26,27,27,28,27,27,27,27,27,27,27,27,28,27,27,28,27,27,27,28,27,27,26,27,26,26,27,27,26,27,25,25,26,25,24,23,22,22,21,20,19,19,15,15,13,11,10,9,8,8,8,8,7,7,8,8,9,9,9,9,9,9,10,11,10,10,11,11,11,11,12,12,12,12,11,11,11,10,11,10,11,11,12,12,13,13,12,11,12,12,11,10,10,10,10,9,9,9,9,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,8,7,8,8,9,9,10,9,9,9,9,7,7,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,4,4,4,5,7,7,7,5,4,4,3,3,2,2,3,2,2,2,3,3,3,3,4,3,4,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,4,5,5,4,5,5,5,5,5,5,4,4,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,5,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,6,7,7,7,7,6,8,7,7,7,7,7,7,7,7,6,7,6,7,7,7,6,6,6,7,7,8,8,8,7,7,8,7,8,8,7,7,8,8,7,7,7,8,8,7,7,7,7,6,6,7,6,6,7,7,6,6,7,7,6,7,6,6,6,7,8,8,10,10,12,13,13,12,14,15,17,18,19,20,22,22,21,20,22,21,20,24,22,23,25,21,26,25,26,25,25,24,26,26,26,27,26,26,26,24,25,26,26,25,26,25,24,26,25,24,22,25,25],[28,28,28,28,28,28,29,28,28,27,26,26,27,27,26,27,26,27,26,27,27,26,28,27,26,27,27,26,27,26,25,27,27,28,27,27,26,26,27,26,27,25,25,25,25,24,22,23,23,20,20,22,20,19,18,20,18,17,17,17,16,14,12,9,8,8,7,6,6,5,6,5,5,5,4,4,4,4,3,3,3,3,2,2,2,2,2,1,1,1,0,1,2,1,2,2,2,2,2,3,3,2,3,3,3,3,4,4,4,4,4,4,3,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,2,2,3,3,3,3,3,4,4,3,3,3,4,3,3,4,4,3,4,4,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,4,3,4,4,4,4,4,4,4,5,5,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,8,8,8,8,7,7,6,7,7,7,7,7,7,8,8,8,9,11,11,12,13,13,14,14,15,17,16,17,18,19,18,20,21,22,22,22,24,24,26,24,26,23,23,23,24,22,24,24,24,25,23,24,26,25,27,26,27,26,27,27,27,26,26,26,26,26,27,28,27,28,28,27,27,27,28,27,27,26,27,26,26,27,26,25,27,25,26,26,24,24,22,22,20,20,18,17,17,15,15,14,12,11,10,9,8,8,8,8,9,9,10,10,11,10,10,11,11,11,13,11,11,12,14,13,13,14,15,14,14,14,13,12,13,13,13,13,13,15,14,14,15,14,14,13,13,12,11,11,12,11,10,10,10,10,9,9,9,9,8,8,7,8,9,8,9,9,8,8,9,9,9,9,10,10,11,10,10,10,10,9,8,8,8,7,6,6,6,6,6,6,5,6,6,6,5,5,6,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,7,7,7,6,5,4,4,3,3,3,3,2,3,3,3,3,3,4,4,4,4,4,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,7,7,7,6,6,6,6,5,6,6,5,5,6,6,5,5,5,6,5,5,5,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,3,3,2,3,2,2,2,3,3,3,2,2,3,3,3,4,4,4,4,5,5,5,5,4,5,5,6,6,6,5,5,5,4,4,4,4,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,8,7,6,7,7,6,6,7,7,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,7,7,6,7,8,7,7,7,8,8,7,8,9,9,8,9,8,8,7,8,8,7,8,8,7,8,8,8,7,7,8,8,9,8,9,8,8,9,8,9,8,9,8,9,9,8,8,7,9,8,8,8,8,8,7,7,8,8,7,8,8,7,7,8,8,7,7,8,7,7,7,8,9,11,11,13,13,14,13,14,16,17,18,20,20,23,23,23,22,22,23,23,24,23,24,25,24,26,26,26,26,25,25,25,27,26,27,25,26,26,25,25,27,26,26,26,26,24,26,26,26,24,26,26],[28,27,27,27,27,28,27,27,27,25,26,24,26,25,25,26,25,26,25,26,26,25,26,26,25,26,26,25,25,26,25,26,27,27,25,26,26,25,26,25,26,25,24,24,24,23,21,21,22,19,19,20,19,19,18,18,16,16,16,16,13,12,10,8,8,7,6,6,5,5,5,5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,3,3,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,3,3,3,2,3,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,4,4,5,4,4,4,5,4,4,5,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,7,7,7,6,6,7,6,6,6,7,7,7,8,9,10,10,10,12,13,13,12,14,15,14,15,17,17,18,18,19,19,21,20,22,22,23,23,23,22,22,22,22,22,23,22,24,23,23,23,25,25,26,25,25,25,25,26,27,26,26,26,25,25,26,26,26,26,27,26,27,25,26,24,25,25,25,26,24,26,25,24,26,24,23,24,24,22,22,21,19,19,18,17,17,15,13,13,11,10,8,8,7,7,8,8,7,8,9,9,9,9,10,10,10,10,12,10,11,12,12,11,12,13,14,12,13,12,13,12,12,11,12,11,12,13,13,13,14,13,12,12,12,11,11,11,11,10,10,10,9,9,8,9,8,8,7,7,7,8,7,7,8,8,7,8,8,8,8,8,9,9,9,10,9,10,9,8,7,7,7,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,6,6,6,6,5,4,4,3,3,3,2,2,2,3,3,3,3,3,4,3,4,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,4,4,4,4,4,4,4,5,4,5,4,4,4,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,7,7,7,7,7,7,6,6,7,7,6,7,7,6,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,9,8,8,7,8,8,7,8,8,7,7,7,8,7,7,7,7,7,6,7,7,7,7,7,7,7,7,7,8,10,10,12,12,13,12,13,14,15,16,17,17,20,19,20,19,20,20,20,21,21,21,23,22,23,24,24,23,24,21,25,24,23,25,24,23,24,23,24,23,23,23,23,24,23,25,24,23,23,23,23],[28,28,28,28,28,29,28,28,28,27,27,27,28,26,27,26,27,27,27,27,27,27,28,27,26,28,27,27,28,26,26,28,28,28,27,28,26,27,27,27,27,26,25,26,26,26,23,23,23,21,21,21,21,19,18,19,17,17,18,17,15,12,10,9,7,7,6,5,5,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,3,3,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7,6,6,5,6,6,6,6,6,7,7,7,8,9,10,11,11,13,14,15,14,15,17,17,16,19,19,19,20,21,23,23,23,24,25,26,25,26,24,24,25,24,23,24,25,25,24,24,25,27,25,27,26,27,28,27,27,27,27,27,27,27,26,27,28,28,27,27,27,28,27,27,27,27,26,27,26,26,27,27,27,27,25,26,25,25,23,23,22,21,22,19,18,17,15,14,12,11,10,9,8,7,7,7,7,7,8,8,8,9,9,9,9,9,9,11,10,10,11,12,11,12,12,13,12,12,11,12,10,10,11,10,11,11,12,13,13,14,13,11,12,12,11,10,10,10,10,9,9,9,9,8,8,8,7,7,6,6,7,7,6,7,7,7,7,7,7,7,7,8,8,8,9,9,8,8,8,7,7,6,6,5,5,5,5,5,5,4,4,5,4,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,6,6,6,4,4,3,3,3,3,3,2,2,3,3,3,3,3,4,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,4,4,5,4,4,4,4,5,5,5,5,4,4,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,6,5,6,6,6,6,6,6,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,6,6,6,7,7,7,7,7,7,7,7,6,6,7,7,6,7,7,6,6,6,7,7,8,8,8,7,7,8,7,7,8,7,7,8,8,7,7,7,8,8,7,7,7,7,6,6,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,8,8,9,10,11,12,13,12,13,15,16,17,19,19,22,23,22,20,22,22,20,23,21,22,25,22,24,25,25,25,25,25,26,26,26,27,26,26,26,24,26,27,26,25,26,25,25,26,25,24,24,26,24],[28,28,28,28,28,29,28,28,29,27,27,27,26,26,26,26,26,26,27,27,26,27,27,26,27,27,26,27,27,26,27,27,27,27,27,27,27,27,27,26,27,26,26,26,25,25,23,23,22,22,22,21,21,20,19,19,17,18,17,16,14,13,10,8,7,6,5,4,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,3,3,3,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,3,3,4,3,3,3,4,3,3,4,4,3,4,3,3,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,6,6,6,6,6,6,6,6,5,5,6,5,5,5,6,5,6,7,7,8,10,10,10,12,13,14,13,14,16,16,15,17,18,19,18,19,22,23,21,24,24,25,24,25,23,22,25,23,22,24,24,24,24,23,24,26,25,27,25,26,27,27,27,27,26,26,27,27,27,27,27,27,27,28,27,28,27,27,27,26,26,27,27,27,27,26,27,27,24,25,24,24,24,22,21,20,19,18,16,16,15,13,11,10,9,8,7,7,7,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,10,10,10,10,11,11,11,11,10,10,10,9,10,9,10,10,11,11,11,11,10,10,9,9,9,8,8,9,8,8,7,7,7,7,6,6,6,6,5,5,6,5,5,5,6,5,6,6,6,6,6,7,7,7,8,8,8,7,7,6,5,5,5,4,4,4,4,4,4,3,4,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,3,3,3,3,4,3,4,4,3,4,4,4,4,4,4,4,3,3,3,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,6,7,6,6,6,6,6,6,6,6,5,6,6,5,6,6,5,5,5,6,6,6,7,7,6,6,7,7,7,7,7,6,7,7,6,6,6,7,7,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,7,8,9,10,11,12,11,12,13,15,17,18,18,21,22,21,19,21,21,21,23,21,23,24,22,25,25,25,24,25,24,25,25,25,26,24,25,26,23,24,25,25,25,26,25,23,25,25,23,23,24,23],[28,27,27,28,27,28,28,27,27,26,26,25,26,25,25,26,26,26,26,26,26,26,27,26,26,26,26,26,26,26,25,27,27,27,26,27,26,25,26,26,26,24,24,24,24,23,21,21,22,19,20,19,19,17,16,18,15,15,16,15,13,12,10,8,7,6,6,5,5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,2,2,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,4,3,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,6,6,6,6,6,6,5,5,6,5,5,6,6,6,6,7,8,9,10,10,11,13,13,12,13,15,14,14,16,17,16,18,18,20,20,20,22,23,24,23,24,22,21,23,22,22,23,23,24,24,24,24,25,26,27,25,25,26,26,26,26,25,25,26,26,26,26,26,26,26,27,26,28,26,26,26,26,26,26,26,25,27,25,25,26,26,24,24,24,22,21,21,18,17,16,15,16,14,12,12,10,8,7,7,7,7,7,7,7,8,8,8,8,8,9,9,9,10,11,10,9,11,12,11,10,12,13,12,12,12,12,10,10,10,10,10,10,12,12,11,12,12,11,11,11,10,9,9,10,9,9,9,8,8,7,7,7,7,6,6,6,7,6,6,6,7,6,7,7,7,7,7,8,8,8,9,8,8,7,7,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,5,4,4,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,5,6,6,5,5,6,6,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,7,6,6,6,7,7,7,7,7,6,6,7,6,5,6,6,5,6,7,6,5,6,6,7,7,7,8,7,7,7,7,8,7,7,7,7,8,7,7,6,8,7,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,7,9,9,10,11,12,12,13,14,15,16,17,18,21,20,20,20,21,19,20,22,21,21,22,22,23,23,24,22,25,22,24,24,24,24,23,23,24,22,22,24,24,23,24,23,24,24,24,23,22,23,24],[28,28,27,28,28,29,28,28,28,26,27,26,26,26,25,26,26,26,27,27,26,25,26,26,25,26,26,26,27,26,25,26,27,27,26,26,26,25,26,25,27,25,25,24,24,24,21,21,21,19,19,20,19,17,16,18,16,16,15,16,13,12,10,8,7,7,6,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,6,7,6,6,6,6,5,6,6,6,6,6,6,6,7,7,8,9,10,10,11,13,13,11,14,15,14,15,17,17,17,18,18,20,22,22,23,23,23,23,24,22,22,23,22,22,23,24,24,23,23,24,26,25,27,25,26,26,25,26,26,26,25,26,26,25,26,26,27,26,27,26,27,27,26,26,26,25,26,26,26,27,26,26,27,25,25,24,24,23,23,22,19,20,18,17,16,14,13,12,10,9,8,7,7,7,7,7,7,7,8,8,8,8,9,10,9,10,11,10,10,11,12,11,11,13,13,12,12,11,12,11,10,11,11,11,11,12,12,13,12,12,11,11,12,10,10,10,10,10,9,9,9,8,7,7,7,7,6,6,6,7,6,6,6,7,6,6,7,7,7,7,8,8,8,9,8,8,7,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,5,6,6,6,5,5,4,3,3,3,3,2,2,3,2,3,3,3,3,4,3,3,3,3,3,3,2,2,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,4,5,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,6,6,6,6,5,6,6,6,6,6,6,5,5,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,6,6,7,8,7,6,7,7,7,6,7,6,6,7,7,6,7,7,6,6,6,6,7,7,8,8,7,7,7,7,8,7,7,7,7,8,7,7,6,7,7,6,6,7,6,6,6,7,6,6,6,6,6,5,6,6,6,5,6,5,5,6,7,7,8,9,10,11,12,11,12,13,15,16,19,19,21,22,20,20,22,20,21,22,21,22,24,21,24,25,25,24,25,24,26,25,24,26,25,25,26,24,24,25,25,25,25,26,25,26,25,24,23,25,24],[28,29,28,29,28,29,29,28,28,28,27,27,27,27,28,27,27,27,27,27,26,26,27,26,26,28,27,27,28,26,26,28,27,28,27,27,26,27,27,27,27,27,26,26,26,26,24,24,24,23,23,22,22,20,19,20,17,18,17,17,14,12,10,8,7,6,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,4,4,4,3,4,3,4,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,6,6,7,7,9,10,10,13,14,15,13,15,17,17,17,19,20,20,20,21,24,24,23,25,26,26,25,26,23,24,26,24,23,25,25,25,25,24,25,26,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,27,27,27,26,27,27,27,28,27,27,27,25,26,25,24,24,23,22,20,20,19,17,16,14,13,12,10,9,8,6,6,6,6,6,6,6,6,7,7,7,7,8,8,8,9,8,9,9,10,9,10,11,11,10,11,10,10,10,9,9,8,9,10,10,11,11,10,10,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,6,5,5,5,6,5,5,6,6,5,6,7,7,7,8,7,7,7,6,5,5,5,5,4,4,3,4,4,3,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,3,3,2,3,3,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,4,5,5,5,5,5,5,4,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,6,7,6,6,6,6,6,5,6,5,5,6,6,5,5,6,5,5,5,5,6,6,6,7,6,6,7,6,7,7,7,7,7,7,6,6,6,7,7,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,7,8,9,10,11,11,11,11,13,14,16,18,18,21,22,20,19,20,21,20,24,20,22,23,21,25,26,26,24,25,25,26,26,25,26,24,25,26,23,24,26,26,24,25,24,24,25,25,23,22,24,24],[28,28,28,28,28,29,29,28,28,27,26,26,27,26,26,26,27,26,27,27,26,26,27,26,26,27,27,27,28,27,26,28,28,28,27,28,26,27,27,27,27,25,25,26,26,24,22,22,23,20,21,21,21,19,19,19,16,18,16,16,13,12,10,8,7,6,5,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,4,3,3,3,4,4,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,6,6,5,6,6,5,5,5,5,5,5,5,6,5,6,6,7,8,9,9,10,11,12,13,13,13,15,15,15,17,17,17,18,19,20,21,21,22,23,24,23,24,22,22,23,22,20,23,24,23,23,23,23,24,25,26,25,25,26,26,26,26,26,26,26,26,26,27,26,26,26,27,26,27,27,27,27,26,26,27,26,26,26,26,26,26,24,25,25,24,23,22,20,19,19,17,16,15,14,12,12,10,9,8,6,6,6,6,6,6,7,6,7,7,7,7,8,8,8,9,9,9,10,9,9,10,11,11,10,11,10,10,10,9,9,9,10,10,10,10,10,10,10,9,9,9,9,8,8,8,8,8,7,7,7,6,6,6,6,5,5,5,6,5,5,6,6,5,5,6,6,6,6,7,7,7,7,8,7,6,6,5,5,5,4,4,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,4,4,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,7,7,6,6,6,6,6,5,6,6,5,6,6,6,5,5,5,6,6,7,7,6,7,7,6,7,7,7,7,7,8,6,6,6,7,7,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,4,5,5,5,4,5,6,7,8,8,10,11,11,10,11,12,13,16,16,18,19,20,19,17,19,20,20,22,21,22,22,22,23,23,24,22,24,22,24,24,23,26,23,23,24,23,23,24,24,23,24,24,23,24,24,23,22,24,24],[27,27,27,27,27,28,27,27,27,26,24,24,25,24,24,25,25,25,25,26,25,24,25,25,24,25,25,24,25,24,24,25,26,26,24,26,25,25,25,24,26,23,23,23,24,23,19,20,21,18,18,19,18,16,16,17,15,14,15,15,13,12,10,9,7,7,6,5,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,3,3,2,3,3,2,2,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,3,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,6,6,7,6,6,6,5,5,6,6,5,5,6,6,6,7,8,9,10,10,11,12,12,11,13,14,13,14,16,16,16,17,17,18,20,19,20,21,22,22,22,22,21,21,21,21,21,21,22,22,22,21,23,24,25,24,24,24,24,25,25,24,24,25,25,25,25,25,26,25,26,25,26,26,26,25,25,24,25,25,24,25,25,24,25,24,23,23,22,21,20,19,18,17,16,15,14,13,12,12,10,9,8,7,7,7,7,7,7,7,7,8,8,8,8,9,9,9,10,9,9,10,10,10,10,11,11,11,11,11,11,10,10,10,9,10,10,11,11,12,11,11,11,10,10,9,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,7,6,6,6,7,6,6,7,7,6,7,7,7,8,8,8,7,7,7,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,5,6,6,6,5,4,4,4,3,3,3,3,2,2,3,3,3,3,3,3,3,4,3,3,3,3,2,2,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,6,6,5,6,6,5,5,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,6,7,6,6,7,6,5,6,7,6,5,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,6,7,7,6,7,7,7,6,6,7,6,6,6,6,5,5,6,6,5,5,6,5,5,5,6,7,8,8,10,11,11,11,12,12,14,16,16,15,18,19,19,18,19,18,19,20,20,19,21,20,22,22,23,22,23,21,23,23,22,24,22,22,22,21,21,23,22,22,22,22,22,23,23,22,20,22,22],[28,28,28,28,28,28,28,28,28,26,27,26,27,25,26,26,27,26,26,27,26,26,26,26,26,27,26,26,27,26,25,27,27,27,26,27,25,26,26,25,26,25,25,25,25,24,22,22,22,21,20,20,21,18,19,19,17,17,17,17,14,12,11,9,8,7,6,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,6,6,6,5,6,6,6,6,6,6,7,7,8,8,10,11,11,12,14,14,13,16,16,17,16,19,18,18,20,20,21,22,22,24,25,25,25,25,24,23,24,23,22,24,25,25,24,24,24,26,26,27,26,26,27,26,26,27,26,26,27,27,26,27,27,28,27,28,27,28,28,27,28,27,25,28,26,26,28,27,26,27,25,26,26,25,23,24,22,21,20,19,17,17,14,13,12,12,10,9,7,7,7,7,7,7,7,7,8,8,8,8,9,9,9,11,10,10,11,11,11,11,12,12,11,12,12,11,11,9,10,10,10,11,12,12,12,12,12,11,11,11,10,9,9,10,10,9,9,9,8,7,7,7,7,6,6,6,7,6,5,6,7,6,6,7,7,6,7,8,8,8,8,8,7,7,7,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,6,6,6,6,5,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,4,4,5,5,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,4,4,4,5,5,4,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,5,5,6,5,5,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,6,6,7,7,8,7,7,7,7,7,7,7,6,7,7,6,7,7,6,6,6,6,6,7,7,8,7,7,7,7,8,8,7,7,8,8,7,7,7,7,7,6,6,7,6,6,6,7,6,5,6,6,5,5,6,5,5,5,5,5,5,6,7,7,8,8,10,11,12,10,12,14,15,16,18,19,21,22,20,19,21,21,20,22,21,21,23,22,24,25,24,23,25,23,25,25,24,26,24,24,25,24,24,25,25,25,25,25,22,25,24,23,23,25,24],[28,28,28,29,28,29,29,27,29,28,27,27,27,26,27,26,26,26,27,27,25,26,27,25,26,27,26,26,27,25,25,27,27,28,26,27,25,27,27,26,27,26,25,26,25,25,23,22,23,22,22,21,22,20,18,19,18,18,16,16,14,13,11,9,8,6,6,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,3,3,4,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,3,3,3,2,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,5,5,6,6,5,6,6,6,6,7,7,8,10,11,11,13,14,15,13,15,17,16,16,17,18,19,19,19,22,23,23,24,25,24,25,26,23,23,25,24,24,25,25,25,25,25,25,26,27,27,26,26,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,29,28,28,28,28,26,28,28,27,28,27,27,28,25,26,26,25,25,23,22,20,20,18,16,17,15,13,12,10,9,8,7,7,6,7,6,6,6,7,8,8,7,7,8,8,8,9,9,9,9,10,10,10,11,11,11,11,10,11,10,10,9,9,10,9,11,11,11,10,10,10,10,10,9,8,8,8,8,8,7,7,8,7,7,6,6,5,5,5,6,5,5,6,6,5,5,6,6,6,6,7,7,7,7,7,7,7,7,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,5,5,6,6,5,4,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,4,3,4,4,3,3,4,4,4,4,5,4,4,5,5,6,5,6,6,5,5,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,5,5,4,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,7,7,7,7,6,7,6,6,6,7,6,6,6,6,5,6,6,6,6,7,7,6,7,7,7,7,7,7,7,8,8,7,7,7,7,7,6,6,7,6,5,6,6,5,5,6,5,5,5,5,5,4,5,5,5,5,5,6,7,8,9,10,11,11,11,12,12,15,15,18,17,21,23,20,19,21,21,20,24,21,22,24,22,24,25,25,25,26,24,26,25,25,25,25,25,25,24,25,26,26,25,25,25,24,25,25,24,23,25,24],[28,27,27,28,27,28,27,27,28,26,25,26,26,26,26,26,25,26,26,26,26,27,26,26,26,26,26,26,26,26,25,27,27,28,26,27,26,26,27,26,27,25,25,25,25,24,22,22,23,20,20,20,21,19,18,19,17,17,16,16,14,13,11,9,8,7,6,5,5,4,5,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,6,6,7,6,6,7,6,6,6,5,6,6,6,6,6,6,7,7,8,9,10,11,11,13,13,13,12,14,15,14,15,17,17,17,19,18,21,22,21,23,24,24,23,25,23,22,23,22,21,22,23,23,23,23,23,25,25,25,24,25,26,26,25,26,26,26,26,27,26,26,26,27,26,27,26,27,26,27,26,26,25,26,26,26,27,26,27,26,25,25,25,25,22,21,21,18,18,18,16,15,14,13,12,10,10,9,8,7,7,7,7,7,8,8,8,8,9,9,9,9,10,10,9,10,11,11,11,11,12,13,11,11,12,12,10,10,10,10,11,11,12,13,12,13,12,11,11,11,10,10,10,10,10,9,9,9,8,8,7,7,7,6,6,6,7,7,6,7,7,7,7,7,7,7,7,8,8,8,9,8,8,7,7,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,6,6,6,5,5,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,5,4,4,5,5,5,5,5,5,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,7,6,7,6,6,6,7,6,6,6,7,6,6,6,6,6,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,6,7,7,7,7,7,8,8,8,8,8,7,7,7,7,6,8,7,6,7,7,7,6,6,6,7,8,8,8,7,8,8,8,8,7,8,8,9,9,7,8,7,8,8,7,7,8,7,6,7,7,6,6,6,6,6,6,6,6,5,6,6,5,5,5,6,7,8,9,11,12,12,10,13,13,15,16,17,17,19,20,20,19,20,19,21,22,21,21,22,21,22,22,24,21,23,22,23,24,23,24,23,24,23,24,23,24,24,23,24,23,22,24,24,22,21,23,23],[28,28,27,27,27,28,27,27,27,25,25,25,26,25,25,26,26,26,26,26,25,25,25,25,25,25,25,26,26,26,25,26,26,27,25,27,26,26,27,25,26,24,24,24,25,24,21,21,22,20,19,20,20,18,18,19,18,17,17,16,15,13,12,11,10,8,8,7,7,6,6,6,5,5,5,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,2,2,2,2,3,3,3,2,2,3,3,3,3,3,3,3,2,3,2,2,2,3,2,2,3,2,2,3,3,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,3,3,3,4,3,3,4,4,4,5,5,5,5,5,5,5,6,6,5,6,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,6,6,6,7,6,6,7,7,7,7,8,8,8,8,8,8,9,9,9,9,9,8,8,8,7,7,8,8,7,7,8,8,8,10,10,12,13,12,14,14,14,14,15,16,16,17,18,19,18,19,19,21,23,21,22,24,23,23,24,23,23,22,22,21,23,23,23,24,24,23,25,25,25,25,25,26,26,26,26,26,26,27,26,26,26,26,27,26,27,26,26,26,26,26,26,25,26,25,25,27,26,26,26,25,25,24,23,23,21,21,18,18,18,16,17,14,14,15,12,12,10,10,9,10,9,10,10,10,11,11,11,11,12,12,12,13,14,13,12,14,14,13,14,14,15,14,14,15,13,13,13,13,13,13,14,15,14,15,15,15,14,13,14,13,12,12,13,11,11,12,11,11,10,10,10,10,10,8,9,10,9,9,9,10,9,9,10,10,8,9,10,10,10,10,10,9,9,9,8,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,6,6,7,7,8,8,7,6,6,5,5,5,4,4,4,4,4,4,4,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,8,7,8,7,8,7,7,7,7,7,7,7,7,7,6,7,7,6,6,7,7,6,7,7,6,7,6,6,6,6,6,6,5,5,5,5,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,4,5,5,5,5,6,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,7,7,7,8,7,8,8,9,8,8,8,8,9,9,8,8,9,8,8,8,8,8,8,7,8,8,7,7,8,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,9,10,10,9,9,9,9,9,10,9,9,10,10,9,8,9,9,9,11,10,11,10,11,11,10,10,10,10,10,10,11,10,9,9,10,10,9,9,10,9,9,8,10,8,8,8,8,8,8,8,8,8,7,8,7,8,7,8,9,10,10,12,13,14,12,14,15,17,18,19,19,20,21,21,21,21,21,22,22,22,21,23,21,23,23,25,23,24,23,24,25,25,26,24,24,24,24,24,24,24,25,25,24,24,24,24,23,22,23,24],[28,28,28,28,28,28,28,28,28,26,26,26,27,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,27,27,27,25,27,26,26,26,25,27,26,24,25,25,24,23,22,23,21,21,21,21,20,19,19,19,18,17,17,16,15,13,12,10,9,9,8,8,7,7,7,6,6,6,6,5,5,5,5,5,4,5,5,4,4,4,4,3,3,3,3,3,3,2,2,2,2,1,2,1,1,1,0,1,1,1,2,2,3,3,2,2,2,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,2,2,2,3,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,4,3,3,4,4,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,4,4,4,4,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,4,6,6,5,6,5,6,5,5,5,4,4,5,5,5,5,5,5,5,6,5,5,5,5,6,6,5,5,6,6,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,6,6,6,5,5,5,4,5,4,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,8,7,8,8,9,8,8,9,9,9,9,9,9,10,9,9,9,8,9,9,9,9,9,9,10,10,11,11,13,14,14,15,15,16,15,17,18,17,18,19,19,20,20,20,22,23,22,23,25,25,24,25,24,23,24,23,22,23,24,25,25,25,24,26,26,27,26,26,27,26,27,26,26,26,27,27,26,26,27,27,27,27,27,28,28,27,27,27,26,27,27,27,27,26,27,27,25,26,25,24,24,24,22,20,20,18,17,17,15,15,14,14,12,12,10,10,10,10,10,10,11,12,11,12,11,12,13,13,13,14,13,12,14,15,14,13,15,15,14,14,15,14,14,13,13,13,14,13,15,15,15,16,15,14,14,15,14,13,12,13,13,11,12,12,12,11,10,11,11,10,9,9,10,9,9,10,10,10,9,10,10,10,10,10,10,10,10,10,10,10,10,8,9,8,7,7,6,7,6,7,7,6,7,7,7,6,7,7,7,7,7,6,6,7,7,7,6,6,6,6,6,7,7,6,6,6,7,7,8,7,9,8,7,7,6,6,6,5,5,4,5,5,4,4,4,5,5,5,6,6,5,5,5,6,5,5,5,5,5,5,6,6,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,8,8,8,7,7,8,8,7,8,8,7,7,7,8,8,7,7,7,7,7,7,7,8,7,7,7,7,7,7,7,6,6,6,6,5,5,4,4,4,4,4,4,3,3,3,4,4,4,5,5,5,6,6,7,7,6,7,7,7,7,7,7,7,7,6,6,6,6,6,7,6,7,7,7,6,7,7,7,8,8,8,8,9,9,9,9,10,9,9,9,9,9,9,9,9,9,9,8,9,9,8,9,9,8,8,8,8,7,8,8,8,7,7,8,8,8,8,9,8,9,9,9,10,9,10,10,10,9,10,10,11,10,10,10,10,10,10,10,10,11,10,10,10,11,10,9,10,10,10,12,11,12,10,10,11,11,11,11,11,11,11,12,11,10,10,10,10,9,10,10,10,9,9,10,9,9,9,9,8,9,9,9,8,9,8,8,8,9,10,10,11,11,12,13,14,13,15,15,16,18,19,18,21,21,20,20,21,21,21,22,21,22,24,21,23,24,25,24,24,23,26,25,24,26,24,25,26,24,25,25,25,25,25,25,24,25,25,23,23,24,24],[28,28,28,29,28,29,28,28,29,27,26,27,27,26,27,26,26,26,27,27,26,27,26,26,26,26,26,26,26,26,25,27,27,28,26,28,26,27,27,26,28,26,25,26,26,26,24,23,24,22,22,21,22,21,20,20,19,19,17,18,16,14,13,12,10,9,8,8,8,6,7,6,6,5,6,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,2,2,3,2,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,4,5,5,5,5,5,6,6,5,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,6,5,5,5,5,4,4,5,5,4,4,5,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,6,7,7,6,7,7,7,7,7,8,8,8,9,8,8,9,8,9,9,8,9,8,8,8,8,9,8,8,9,9,8,9,9,10,11,13,13,13,14,15,16,16,17,19,18,18,19,20,21,21,21,23,24,23,24,26,26,25,26,24,24,24,24,24,24,25,24,25,25,25,25,26,26,26,26,27,27,27,27,27,27,28,28,28,27,27,27,27,28,28,28,28,28,28,28,27,28,28,28,28,28,28,28,26,27,27,26,25,24,23,21,21,20,18,19,16,15,15,13,13,12,10,9,9,10,10,9,10,11,12,12,11,12,13,12,13,15,14,14,15,15,14,15,16,16,15,15,14,15,14,13,13,13,15,14,15,16,16,16,15,15,15,15,14,13,13,13,13,12,12,11,11,10,10,10,10,8,8,8,9,9,8,9,10,9,9,9,10,9,10,11,11,10,11,11,10,9,9,8,8,7,7,6,6,6,6,6,6,5,6,6,6,5,6,6,6,6,6,5,6,6,6,5,5,6,5,5,5,6,5,5,6,6,7,6,7,7,8,8,7,6,5,5,5,5,4,4,4,4,4,4,4,5,5,5,6,6,6,5,5,5,5,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,8,7,7,7,7,6,7,7,7,6,7,7,7,7,7,7,7,6,7,7,7,6,7,7,7,7,6,6,7,6,6,6,6,6,5,5,5,4,4,4,4,3,3,3,4,3,3,3,4,4,5,5,5,6,6,7,6,6,7,7,7,7,7,7,6,6,6,6,5,6,6,6,5,6,6,6,6,7,6,7,7,7,7,7,8,8,9,9,9,9,8,9,9,8,9,9,9,8,8,8,9,8,7,8,8,8,7,8,8,7,8,7,7,7,7,7,7,7,8,8,7,8,9,9,9,9,10,10,9,10,10,11,11,10,11,11,10,9,10,10,9,11,10,9,10,10,10,8,9,9,9,10,11,11,10,10,10,11,12,11,11,11,12,12,10,11,10,10,11,9,9,11,10,8,9,10,9,8,9,9,8,8,9,8,7,8,8,7,7,7,9,9,10,11,13,13,14,13,14,15,17,18,21,20,22,23,22,22,22,23,22,24,23,23,25,23,25,25,26,25,26,24,27,26,25,27,26,25,26,26,26,26,26,25,26,26,24,26,26,25,24,25,24],[28,27,27,28,27,29,28,27,28,27,25,26,27,27,26,26,27,27,26,27,27,27,26,26,26,26,26,26,26,27,25,26,27,28,26,27,27,26,27,26,27,25,25,25,25,25,23,23,25,21,20,22,23,20,19,21,18,17,19,17,16,15,13,12,11,10,10,8,9,7,8,7,7,6,6,6,5,5,5,5,5,4,5,5,4,4,5,5,5,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,0,1,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,3,3,3,2,3,3,4,3,4,4,6,4,4,3,4,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,5,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,6,6,6,7,6,6,7,7,7,7,7,7,7,6,6,6,5,5,5,4,4,4,4,4,3,4,4,4,4,4,5,4,4,5,5,4,5,5,5,6,6,6,6,5,5,6,5,5,5,6,5,5,6,6,5,5,6,6,6,6,6,6,6,6,6,7,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6,7,6,6,7,5,6,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,9,9,9,9,10,10,10,10,11,11,11,10,10,11,11,9,10,9,9,10,9,9,10,10,11,10,12,12,13,14,14,15,16,17,16,16,20,17,18,19,20,20,21,21,23,24,22,25,26,24,25,27,24,24,24,24,23,24,23,25,25,24,25,25,26,27,26,26,27,27,27,27,27,27,27,27,27,28,27,27,27,28,27,28,27,27,27,27,27,27,27,27,28,27,27,28,26,26,26,25,23,22,23,20,19,18,17,18,16,15,15,14,14,13,12,11,13,12,12,12,13,14,14,13,14,15,15,14,16,17,16,15,17,16,16,15,17,18,18,18,17,16,15,16,15,16,16,17,18,18,18,17,17,17,16,17,16,15,15,16,15,14,14,13,13,13,12,13,13,11,11,11,13,11,11,12,12,11,12,12,12,11,11,12,12,12,12,12,11,11,11,10,9,9,8,7,7,7,7,8,7,7,7,7,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,7,8,9,9,9,9,8,7,7,6,6,6,5,5,5,6,5,6,6,7,8,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,8,7,8,8,9,8,8,10,11,10,9,9,10,9,8,9,9,8,8,9,9,8,8,8,9,9,7,8,9,8,8,8,9,8,8,8,8,8,8,7,8,7,7,6,6,6,5,5,5,5,4,4,4,4,4,4,4,5,5,6,6,7,7,7,8,8,8,8,8,8,7,8,8,7,7,7,7,6,6,7,7,7,7,7,7,8,8,8,8,9,9,9,9,10,11,12,11,11,11,10,12,11,10,11,11,11,10,10,10,11,10,9,10,10,9,9,10,9,8,9,8,9,8,8,10,9,9,10,11,10,10,11,11,12,11,12,11,11,12,11,13,12,13,13,12,12,11,12,11,11,12,12,11,12,12,11,11,11,11,11,13,13,13,13,13,14,13,14,13,13,13,14,14,12,13,11,14,12,12,11,12,12,12,11,12,11,11,11,11,11,10,11,11,9,10,10,9,9,9,9,10,11,12,14,15,15,15,17,16,18,19,21,21,21,22,23,21,22,22,23,24,24,23,24,24,24,24,26,25,26,24,26,27,26,27,25,26,25,25,25,26,26,25,26,25,25,26,26,24,23,24,25],[27,27,27,27,27,28,27,27,27,25,26,26,26,26,26,26,25,26,26,25,25,25,25,25,25,25,25,25,25,25,25,25,26,27,24,26,25,24,26,24,25,24,24,24,24,24,23,21,22,21,20,21,21,20,19,19,19,19,18,18,16,16,15,14,13,12,11,10,10,9,9,9,9,9,8,7,7,6,6,7,7,5,6,7,6,5,6,6,6,5,5,5,5,4,3,4,3,3,2,3,3,2,2,2,1,1,0,1,2,3,3,3,3,3,4,4,4,4,4,4,3,3,4,4,4,3,4,4,3,4,4,3,4,4,4,6,4,5,4,4,3,4,3,3,3,3,3,3,4,4,3,4,4,4,3,4,3,3,5,4,5,5,6,5,5,5,6,4,5,6,6,5,5,6,6,5,5,6,5,5,5,6,6,6,5,6,5,6,6,6,6,6,7,7,6,7,8,8,8,9,9,8,9,9,9,9,8,8,7,7,7,6,6,6,5,6,5,5,5,6,6,5,6,7,6,6,7,7,6,7,7,7,7,7,7,8,7,7,7,7,7,7,8,6,8,8,8,6,8,8,8,7,7,9,8,7,7,8,9,8,7,7,8,8,8,8,8,8,9,8,8,9,8,8,9,8,8,8,7,8,7,7,7,7,6,7,7,7,7,8,8,7,8,8,8,8,8,8,8,9,9,9,9,10,9,9,11,10,10,11,11,12,11,12,11,12,13,13,13,13,12,12,12,11,11,11,12,11,11,11,12,11,12,14,14,16,16,15,16,17,17,17,18,19,18,19,20,20,20,21,20,22,22,22,23,24,23,24,23,24,24,23,23,23,24,23,24,24,24,22,25,25,26,25,24,26,26,25,26,26,27,27,27,27,26,27,27,27,27,26,27,26,26,26,25,26,25,25,26,26,26,25,26,24,25,24,24,23,21,23,20,19,19,18,18,17,15,17,15,14,14,14,13,15,13,14,15,15,17,15,15,16,16,16,16,17,18,17,16,18,18,17,17,19,19,18,18,17,17,16,16,16,16,16,17,18,18,19,19,18,17,17,17,17,16,17,17,16,15,16,15,14,14,14,15,13,14,13,14,14,13,14,14,14,12,13,14,13,12,13,14,13,13,13,13,12,12,12,11,11,10,10,10,10,9,9,9,10,9,9,10,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,9,9,9,8,8,8,9,9,9,10,10,10,10,9,9,8,8,8,8,7,7,7,7,7,7,7,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,8,8,7,8,8,8,8,8,9,8,8,9,8,9,9,10,10,9,10,11,10,10,11,11,11,12,11,12,11,12,10,11,11,11,10,10,11,11,10,10,10,11,11,10,11,11,10,10,10,10,10,9,10,10,9,10,9,8,8,8,7,7,7,6,6,6,6,5,5,5,5,4,4,5,5,6,6,7,7,8,8,9,8,8,9,8,8,8,8,9,8,8,8,9,8,8,8,10,9,9,9,10,10,10,9,11,11,11,12,11,12,13,13,13,12,12,12,13,13,13,12,12,12,12,11,12,13,11,11,12,12,11,11,11,10,10,10,11,10,11,10,12,12,12,12,12,13,13,12,14,14,13,13,13,13,13,12,14,13,14,14,14,13,13,14,13,13,14,13,13,14,14,12,13,14,14,13,16,14,14,15,14,15,14,14,14,14,14,13,15,14,13,13,13,13,13,13,13,14,13,12,14,13,13,12,12,13,12,12,12,12,11,11,11,12,11,12,13,12,13,15,16,17,15,17,17,20,20,22,20,23,22,22,22,23,22,22,24,23,23,25,23,24,24,25,24,25,24,26,26,25,26,25,26,26,25,25,26,25,25,25,25,23,25,25,24,23,24,25],[28,28,28,28,28,29,28,28,28,27,27,27,27,27,26,27,27,26,27,26,26,27,26,26,27,26,26,27,26,26,26,27,26,27,27,27,26,26,27,25,27,26,25,25,26,25,24,23,24,23,22,22,22,22,21,21,20,21,19,20,18,18,15,15,14,12,12,12,11,11,11,10,11,10,9,9,9,8,8,8,9,8,9,8,8,8,8,8,8,7,7,6,6,5,5,5,5,5,4,4,4,3,3,2,2,2,1,0,1,2,3,3,4,4,4,4,4,4,4,4,3,4,5,4,4,4,5,3,4,5,5,4,4,6,5,7,5,5,5,4,5,4,4,4,4,4,5,4,5,5,5,6,6,5,5,5,5,5,5,7,7,8,7,6,6,7,6,5,6,7,6,5,6,6,4,5,6,7,5,6,6,6,6,6,7,7,7,7,7,8,8,7,8,8,7,8,9,9,8,9,9,9,10,10,9,10,9,9,8,8,7,7,8,6,6,8,7,6,7,8,7,7,7,9,7,7,9,10,8,8,9,10,9,9,9,9,7,7,8,7,7,8,8,7,8,8,8,7,9,9,8,9,8,9,9,7,8,9,10,9,9,9,9,10,9,10,9,10,10,9,10,9,9,9,9,9,9,9,8,9,9,9,8,8,8,9,9,9,9,9,10,9,9,9,10,9,10,10,10,10,11,11,11,11,11,11,11,12,11,12,12,13,12,13,12,13,14,13,14,13,13,13,13,13,11,12,13,13,12,12,13,13,13,14,14,17,17,16,18,18,18,19,19,19,20,19,20,20,22,22,21,23,24,23,24,25,24,25,25,25,24,25,25,25,25,24,25,25,26,24,26,27,27,26,26,27,27,27,27,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28,27,27,28,27,28,28,27,28,27,27,28,27,26,26,24,24,23,22,21,19,19,18,17,18,16,15,15,14,14,16,14,14,15,15,17,17,17,17,17,17,18,17,19,17,16,18,19,17,18,19,19,18,18,19,18,17,17,17,17,18,17,19,18,19,20,20,18,18,19,19,16,18,18,16,16,17,16,15,14,15,16,16,14,13,14,15,14,14,15,15,14,14,15,14,13,14,14,14,13,14,13,13,13,14,12,13,12,11,12,11,10,10,11,11,9,10,11,9,10,10,11,10,10,10,10,9,10,11,9,10,10,11,9,11,11,10,10,10,10,10,10,10,10,11,11,10,10,9,10,9,9,9,8,9,8,8,8,8,8,9,9,9,9,9,10,9,10,10,9,9,9,9,9,9,9,9,10,10,10,9,10,10,9,10,10,10,9,11,11,9,10,11,11,11,11,12,11,11,12,14,13,12,12,14,12,10,12,13,11,11,12,13,11,12,11,13,13,10,12,12,12,11,12,11,11,11,12,11,11,11,11,11,10,10,10,9,9,8,9,9,9,8,8,8,8,7,7,8,8,9,8,9,9,9,10,10,10,9,10,10,10,10,10,10,10,10,11,11,9,10,11,11,10,11,11,10,11,12,11,12,13,13,12,12,13,14,14,15,15,14,13,15,15,14,14,14,14,14,13,13,15,14,14,14,14,13,13,13,12,12,12,12,12,12,12,13,13,13,14,14,15,14,15,16,15,14,15,15,15,14,15,16,15,16,15,15,14,15,15,15,15,16,14,14,16,16,13,14,15,15,14,17,15,17,16,15,18,16,16,16,16,16,15,17,15,15,14,16,15,14,14,15,15,14,13,15,14,14,13,14,14,13,13,13,12,12,12,12,11,12,13,13,13,14,16,16,17,16,17,18,19,20,22,20,22,22,22,22,23,22,22,23,24,23,25,25,24,25,26,25,26,25,26,26,25,27,26,26,25,26,26,26,25,26,25,25,25,26,25,25,24,25,25],[28,28,28,28,28,29,28,28,29,28,27,27,27,27,27,28,27,27,28,27,27,28,26,27,28,27,26,28,27,27,27,27,28,28,27,28,27,27,27,27,28,26,26,26,27,26,25,24,25,24,24,24,24,22,22,23,21,21,21,20,19,18,17,16,15,13,13,13,13,12,13,11,12,11,10,10,10,9,8,9,11,10,10,9,10,10,9,10,9,10,9,10,8,8,7,8,6,6,5,5,5,4,4,3,2,2,2,1,0,1,2,3,3,5,5,3,3,5,6,5,4,6,5,4,3,5,5,4,5,5,5,4,5,5,6,7,6,6,6,5,5,6,5,4,6,7,5,5,6,6,5,7,7,6,6,7,7,5,6,6,7,7,8,7,8,7,7,6,7,7,6,6,8,8,6,6,7,7,6,7,6,8,7,7,8,8,8,8,9,8,8,9,9,8,9,9,10,10,10,10,11,11,11,12,11,11,11,10,10,10,10,9,9,8,7,8,8,7,8,9,8,8,8,10,8,8,10,11,8,10,10,11,10,9,9,9,8,8,9,8,8,9,9,10,10,9,10,11,10,9,11,11,9,10,9,10,9,9,10,9,9,10,9,10,10,10,10,10,10,10,11,10,10,10,11,11,10,10,9,10,10,10,8,9,9,9,9,10,10,9,10,11,11,10,10,11,11,10,11,11,12,12,12,11,12,13,12,13,13,13,12,15,14,14,13,14,15,15,15,14,15,16,14,14,12,14,15,14,13,14,14,15,16,16,17,18,18,18,19,20,19,21,21,22,22,22,22,23,24,24,24,25,25,25,26,26,26,27,27,26,25,26,26,25,26,25,26,26,27,25,28,27,28,27,27,28,28,27,27,28,28,28,28,28,27,28,28,28,28,28,29,29,28,29,28,28,28,28,29,29,29,29,28,27,28,27,27,25,24,25,22,22,21,19,20,18,17,20,17,16,17,16,16,16,16,16,16,17,20,19,18,19,19,20,18,19,20,20,18,20,20,20,19,21,21,20,20,19,19,19,19,19,18,19,18,20,19,21,22,21,20,19,21,20,18,20,20,19,18,19,18,18,17,16,17,17,17,14,15,18,16,15,16,16,15,16,17,16,15,16,16,17,15,16,16,14,14,14,14,14,13,13,11,11,11,11,12,11,10,12,12,10,10,12,11,11,11,12,10,10,11,12,11,10,11,12,11,11,12,12,10,11,11,12,11,12,12,12,12,12,11,11,11,10,10,10,10,10,10,11,10,12,10,11,11,12,11,11,12,11,11,11,11,11,10,10,11,10,10,10,10,10,11,10,11,10,10,11,11,10,10,11,11,10,11,12,12,11,12,14,13,12,14,15,15,13,14,15,13,11,13,13,13,12,14,14,12,12,12,14,14,12,12,14,13,12,13,13,13,13,13,13,12,12,12,12,12,11,10,10,10,9,10,10,10,10,8,9,9,8,7,8,9,10,9,11,11,11,11,12,11,11,12,12,11,10,11,11,11,11,12,12,10,11,12,12,11,12,12,10,12,13,12,13,13,14,13,14,15,16,16,17,17,16,15,17,16,15,17,17,16,16,14,16,16,15,15,15,16,14,14,15,14,13,14,13,13,12,12,15,14,13,15,16,16,16,16,16,17,16,16,16,17,16,16,17,17,18,17,16,16,16,16,16,16,17,17,16,18,17,16,16,17,17,17,19,17,17,17,17,17,17,18,18,17,18,17,18,17,17,16,16,18,17,16,16,17,16,16,17,16,16,15,16,15,15,15,15,13,14,14,13,12,14,13,13,14,15,17,17,19,19,19,19,20,23,22,23,24,23,25,24,24,24,24,24,25,24,25,26,25,26,27,25,25,26,27,26,25,28,26,26,27,27,26,27,27,27,27,27,26,27,27,26,25,26,26],[29,29,28,28,29,29,29,29,29,28,28,28,28,28,28,28,28,28,28,29,28,29,29,28,28,29,28,29,28,28,28,28,29,29,27,29,28,28,28,28,28,27,27,27,27,27,26,26,27,25,24,25,26,25,24,26,24,24,23,23,22,21,20,20,18,18,17,17,17,18,17,17,16,17,16,15,15,13,12,13,13,13,14,14,13,13,13,14,15,13,13,13,13,11,11,9,9,8,8,7,8,6,7,6,4,4,3,3,1,0,1,3,4,5,6,5,5,7,8,7,6,6,7,5,5,6,6,5,6,7,7,6,8,9,9,11,11,12,11,8,9,11,9,7,10,9,7,7,10,8,8,11,12,9,8,9,8,7,8,10,12,12,12,11,11,12,12,9,10,11,11,11,10,10,8,9,10,10,8,10,10,12,11,9,11,13,12,11,13,12,13,13,13,13,14,14,14,13,13,15,16,14,16,16,16,16,15,15,15,14,14,14,14,15,12,13,15,12,11,13,13,11,13,14,12,11,14,15,13,12,13,15,13,15,12,12,12,12,11,11,11,13,12,11,14,13,13,13,14,12,13,14,14,13,12,12,12,12,13,13,14,14,14,15,14,13,16,14,15,15,16,15,15,15,16,16,15,14,15,15,13,16,13,15,14,13,14,15,15,13,15,15,15,16,15,16,14,16,16,16,17,16,15,17,18,17,19,19,18,19,20,20,18,20,19,18,21,20,20,19,19,20,20,19,18,19,20,20,17,19,19,20,19,19,20,21,22,22,23,23,24,23,23,25,24,24,25,25,26,26,25,27,27,26,28,28,27,28,28,27,27,27,27,27,28,27,28,28,27,28,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,28,29,28,28,27,26,27,22,25,24,22,24,21,20,21,21,21,20,21,20,23,21,21,23,23,24,23,24,23,24,24,24,24,25,25,25,25,26,25,24,26,27,26,26,25,24,23,24,24,24,23,25,26,26,26,26,26,26,25,25,25,24,25,25,24,23,24,24,23,22,22,24,23,23,22,22,22,21,23,21,22,22,22,22,20,21,20,22,22,20,22,20,19,19,20,18,18,19,16,16,17,14,17,17,15,14,17,17,15,16,17,17,16,17,16,17,16,17,18,16,15,17,17,15,16,17,16,15,16,17,17,16,17,16,17,17,17,16,16,15,15,15,14,14,16,14,16,15,15,16,16,16,16,17,15,16,16,16,16,16,16,16,16,15,16,17,16,16,16,16,15,17,17,15,16,17,16,14,17,17,16,17,19,18,18,19,19,19,19,20,21,20,20,21,20,19,20,21,19,19,19,19,19,20,18,20,19,19,19,20,18,19,19,20,17,20,18,19,17,18,18,18,18,17,16,16,15,15,14,14,14,14,13,11,13,13,11,12,12,13,12,14,14,16,16,15,15,15,15,16,15,14,14,15,15,17,16,18,17,16,16,16,18,17,18,19,17,18,19,19,21,19,20,22,21,21,21,22,21,21,21,21,22,21,22,21,21,21,22,20,21,20,19,21,21,20,20,20,19,18,20,17,20,18,20,20,20,19,22,21,21,21,22,20,22,22,21,22,21,22,21,22,22,22,22,22,22,21,22,21,20,21,21,22,21,23,21,20,21,23,22,21,24,22,23,23,22,22,21,22,21,22,22,22,23,22,23,21,22,21,21,20,21,22,21,22,21,22,22,20,22,23,20,21,21,21,20,19,19,21,18,18,18,19,20,21,22,22,21,23,24,24,25,26,25,26,27,27,25,27,26,26,27,26,26,28,27,27,28,28,28,29,28,28,29,29,29,28,29,29,28,28,29,29,28,29,28,28,29,29,28,26,27,28],[29,28,29,29,29,29,29,29,29,28,28,28,28,28,27,27,28,28,28,28,28,28,28,28,28,28,27,28,27,27,27,27,28,28,27,28,28,27,28,27,28,27,27,27,27,26,26,25,26,24,24,25,25,24,23,25,22,23,22,22,21,20,19,18,17,16,16,16,16,17,16,16,15,15,14,14,13,11,11,13,14,11,13,14,13,13,13,14,13,13,11,12,11,12,12,11,10,8,8,8,7,7,7,7,5,4,4,4,3,1,0,1,3,5,6,3,5,6,8,9,7,7,9,8,8,8,9,7,9,10,9,9,10,10,9,11,10,12,10,10,9,11,10,10,10,11,8,11,11,10,9,12,12,8,8,8,8,6,7,10,10,9,9,8,9,9,9,7,10,10,9,11,10,10,10,11,12,11,11,13,11,13,12,11,12,13,12,12,14,12,13,15,14,12,13,13,12,14,14,14,13,15,16,15,16,15,15,15,14,14,12,13,13,13,12,14,14,12,13,14,12,11,14,15,12,12,15,14,12,14,14,14,12,12,12,11,11,10,12,11,11,12,13,12,14,13,14,14,14,13,15,15,14,12,13,12,13,12,12,14,15,15,15,16,14,14,16,15,15,16,16,15,16,15,16,16,15,14,15,16,14,14,14,14,14,14,14,14,15,15,15,14,15,16,15,14,15,17,15,15,16,15,15,17,16,16,18,18,16,17,18,19,17,17,18,17,20,18,19,19,17,17,18,18,17,17,18,17,17,17,18,18,19,19,20,20,21,20,22,22,22,22,22,23,22,23,24,24,24,26,24,26,26,26,26,26,26,27,27,26,26,26,27,27,27,26,27,27,27,25,27,29,28,27,28,28,29,28,28,29,28,29,29,29,28,29,29,29,28,28,29,28,28,28,28,28,28,28,29,28,29,28,29,28,28,27,28,26,25,25,22,23,22,20,22,21,20,21,19,19,19,19,19,21,19,19,21,22,22,21,22,22,23,23,23,23,23,24,23,23,24,23,23,25,25,25,24,24,23,23,23,23,23,22,23,24,24,25,25,24,23,23,24,24,21,23,24,22,22,23,20,21,21,20,22,21,21,21,20,20,19,22,21,20,19,20,19,19,20,20,20,20,20,19,20,19,18,17,17,16,18,16,16,17,15,17,16,17,17,17,16,17,18,16,16,16,17,16,16,18,16,17,16,16,16,16,16,16,16,16,15,16,16,16,15,16,15,15,15,15,15,16,15,16,15,14,14,15,14,15,14,13,14,15,15,15,16,14,15,16,15,15,17,15,16,16,15,16,15,15,16,15,15,16,16,15,15,16,16,16,16,16,17,17,17,18,18,19,18,18,18,18,18,20,19,20,19,18,17,19,19,17,18,19,18,17,19,17,18,18,17,18,18,18,17,18,18,17,18,16,18,16,17,17,18,17,16,16,15,14,15,13,12,14,14,11,11,11,10,12,12,11,13,12,12,12,15,14,15,14,14,16,15,14,14,14,14,15,15,16,16,16,15,16,16,17,16,16,18,17,17,18,18,19,18,18,20,19,19,20,20,20,20,19,20,21,19,19,20,20,19,21,18,20,19,17,20,19,19,18,18,19,18,18,16,18,17,18,18,18,18,19,19,19,20,20,19,21,20,19,20,20,21,20,19,20,20,21,20,21,19,20,20,20,20,20,20,19,21,20,18,20,21,20,20,21,21,21,21,21,22,21,21,20,20,21,20,22,21,21,20,20,21,20,20,21,21,19,19,21,21,19,19,20,21,18,19,20,20,18,18,18,20,18,17,17,19,20,21,21,22,22,22,22,24,25,25,24,26,26,27,25,26,26,27,27,27,25,28,27,27,27,28,28,28,27,28,28,28,29,28,28,28,27,27,28,29,27,28,28,27,28,28,27,25,26,28],[29,29,28,29,29,29,29,28,29,28,27,28,27,28,27,28,27,27,28,27,27,28,28,27,27,27,27,27,27,27,27,28,27,28,27,28,27,27,28,27,27,27,26,26,26,25,25,24,25,22,23,23,23,21,20,22,20,19,20,18,17,16,14,14,12,10,11,10,9,9,9,8,8,7,7,7,7,6,6,6,7,5,7,7,6,6,7,7,7,7,6,7,6,5,5,5,4,4,4,4,3,3,4,4,3,3,4,4,3,2,1,0,1,1,2,3,3,3,5,5,3,3,4,5,4,3,5,5,4,5,6,6,6,7,8,8,7,7,7,7,6,6,6,6,6,5,4,4,4,4,4,4,4,3,3,3,3,3,3,5,5,5,5,4,4,4,5,3,4,5,4,4,4,6,4,4,6,7,6,7,6,6,7,8,7,7,8,8,7,7,8,9,8,8,9,9,10,9,9,9,10,9,10,10,10,10,10,9,9,8,8,8,7,7,7,7,6,7,6,6,6,6,6,7,5,6,6,6,6,6,6,7,6,7,7,8,6,7,7,7,6,6,7,6,7,7,8,8,7,7,9,8,7,8,8,8,9,8,9,8,8,8,7,8,8,7,8,8,8,8,9,9,9,9,9,9,9,9,9,9,8,8,7,7,6,7,7,7,7,7,8,7,8,7,7,8,8,8,8,8,9,9,9,9,10,10,10,11,10,11,10,12,12,12,13,13,14,12,12,12,12,12,11,12,10,11,12,11,11,11,11,12,12,13,14,14,15,15,17,18,17,18,20,20,19,20,21,21,22,24,22,24,25,24,25,26,26,26,25,26,25,25,25,25,25,25,26,25,26,26,27,28,28,27,26,27,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,27,28,27,28,28,27,28,29,27,28,28,27,27,26,26,24,23,23,20,20,20,17,19,16,16,17,14,15,14,13,12,14,13,14,14,15,17,16,15,18,17,18,17,18,19,19,18,20,20,19,19,20,20,20,19,19,19,17,17,18,18,18,19,19,20,20,20,19,21,17,20,18,17,18,18,17,17,17,16,15,14,14,14,15,15,12,13,15,13,13,15,15,14,15,15,15,13,14,15,16,15,15,15,14,14,14,12,12,11,10,10,9,9,9,10,9,9,10,10,9,9,10,10,9,9,10,10,8,9,10,9,8,10,10,8,8,10,9,8,9,9,10,9,10,10,11,11,10,10,9,9,8,9,9,7,8,8,9,9,10,9,9,9,10,9,9,9,9,9,8,8,9,8,8,8,8,8,7,9,8,8,8,9,7,7,8,8,7,7,9,9,8,9,10,9,9,10,11,10,10,11,13,13,11,11,13,12,10,12,12,10,10,12,13,11,11,10,12,12,10,10,12,11,10,11,11,10,10,10,10,10,9,9,9,9,9,8,7,7,6,6,7,6,6,6,5,6,5,5,5,6,7,7,8,8,9,9,9,9,9,10,9,9,9,9,9,9,9,8,8,7,8,9,8,8,10,9,8,9,11,9,10,12,11,10,12,13,12,13,13,14,14,13,15,14,13,13,14,14,14,13,13,14,12,12,13,13,12,11,12,11,10,11,10,10,9,10,12,11,11,12,13,13,13,14,15,15,14,14,15,15,14,14,15,15,16,16,15,14,15,14,14,14,15,15,13,15,15,13,12,15,14,13,16,15,15,14,15,16,15,15,15,15,16,16,16,16,16,14,16,16,15,14,15,16,14,14,16,15,15,14,15,14,14,14,13,12,13,13,12,12,12,12,12,14,15,17,18,18,18,19,19,21,22,23,23,24,24,25,24,24,24,26,25,26,24,26,26,26,27,27,26,27,26,27,27,27,28,26,27,27,27,26,26,27,26,27,27,26,27,27,26,24,26,27],[29,29,29,28,28,29,28,28,28,27,27,26,27,27,27,27,27,27,28,27,27,27,27,27,27,27,27,26,27,27,27,27,28,28,27,28,27,27,28,27,28,27,26,27,26,25,24,23,24,22,22,22,22,21,20,22,19,19,19,17,16,15,13,12,11,10,10,8,8,7,7,6,6,6,5,5,5,4,5,5,5,4,5,5,4,5,5,5,5,5,4,5,4,4,3,4,3,3,3,3,2,2,3,3,2,2,3,3,3,3,1,1,0,1,2,1,1,2,2,3,2,2,2,3,3,2,3,3,3,3,4,4,4,4,5,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,2,3,3,3,2,3,2,2,3,3,4,4,4,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,6,5,5,6,6,7,7,7,7,7,8,7,8,8,7,8,7,6,7,6,6,6,6,5,5,5,4,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,5,6,6,6,6,5,5,5,6,6,5,5,6,6,6,6,6,6,6,7,7,7,6,6,6,5,5,5,5,4,5,5,5,4,5,5,4,5,5,5,5,5,6,5,5,6,7,6,7,7,7,7,8,7,8,8,9,9,8,9,10,10,10,9,10,10,10,9,9,8,8,9,9,8,8,10,10,10,10,12,13,13,14,16,16,16,16,18,19,17,18,20,21,20,21,22,24,24,24,26,25,26,26,26,24,25,25,25,25,25,25,25,25,26,25,27,27,28,26,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,26,27,26,24,23,22,19,20,18,17,17,15,15,15,13,13,12,11,10,10,10,11,10,11,12,13,13,14,14,15,14,16,17,16,15,17,18,16,17,18,17,17,16,16,16,15,15,15,15,16,15,18,17,17,18,17,17,15,17,15,15,15,16,14,14,14,13,14,12,11,12,11,11,9,10,12,10,10,11,12,10,11,12,12,11,11,12,12,12,12,12,11,10,10,10,9,8,7,7,6,6,6,7,6,6,7,7,6,6,7,7,7,6,7,7,6,6,7,7,7,7,7,6,7,8,7,7,7,7,8,8,8,9,9,9,9,8,7,7,6,6,7,5,6,6,6,7,7,6,7,7,8,8,8,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,7,7,6,6,7,6,6,7,7,8,7,8,8,9,7,7,9,9,7,8,9,7,7,8,9,8,8,8,8,9,8,8,8,8,8,8,9,9,9,7,8,9,8,7,7,7,7,6,5,5,5,5,5,5,4,4,4,4,4,3,4,5,5,6,7,7,8,7,8,7,8,8,7,8,7,7,7,7,7,6,6,6,6,7,7,6,7,7,7,7,8,7,7,8,8,7,8,9,8,9,9,10,11,9,10,11,10,10,10,11,10,10,9,10,10,8,9,9,9,8,9,9,8,9,8,8,7,8,8,8,8,9,10,9,9,10,10,10,10,11,11,11,11,11,12,12,11,11,11,11,11,12,11,10,11,12,10,11,12,10,9,10,10,10,12,12,12,12,13,12,12,12,11,12,13,13,14,12,12,10,12,12,11,11,12,12,10,11,12,11,10,11,10,10,10,10,9,9,10,10,8,8,9,9,10,11,12,15,16,17,15,17,16,18,21,21,22,21,23,24,23,22,22,25,24,24,24,25,25,25,26,26,25,26,25,27,27,26,28,26,27,26,26,26,27,27,26,27,26,25,27,27,26,24,26,26],[28,28,28,28,28,28,28,28,28,26,27,27,27,26,27,26,26,27,27,27,26,26,26,26,26,26,26,26,27,26,26,27,27,28,26,27,26,27,27,26,27,27,25,26,26,26,24,23,24,23,23,23,23,22,20,21,19,20,18,19,16,14,12,11,9,8,7,6,6,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,0,1,1,1,1,1,2,1,1,1,2,1,1,2,2,2,2,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,1,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,5,6,6,6,6,6,6,6,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,4,4,4,4,4,3,3,4,4,3,3,4,4,3,4,4,4,3,4,4,4,4,4,5,4,5,5,5,5,5,5,6,6,6,7,7,6,7,7,7,7,7,8,7,7,7,7,6,7,6,6,7,7,8,9,9,10,13,14,13,15,16,16,16,18,18,18,18,20,20,21,22,22,25,26,22,25,26,26,26,27,24,25,25,26,24,25,26,25,26,26,25,26,27,27,26,26,27,27,27,27,27,28,28,27,28,28,28,27,28,28,27,28,28,28,28,27,27,28,27,27,28,27,27,28,25,26,27,25,24,23,22,21,20,18,17,17,16,15,14,12,11,10,9,8,8,8,8,7,8,9,10,10,10,11,12,12,12,13,12,13,14,15,12,14,15,15,14,15,14,15,14,13,13,12,13,13,14,14,15,15,15,14,14,13,13,12,12,12,11,11,10,10,10,9,9,8,8,7,7,7,8,7,7,7,8,7,8,8,8,8,9,10,10,9,10,10,9,8,8,7,7,6,6,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,4,5,6,5,5,5,5,7,7,7,8,8,8,7,7,5,5,4,5,5,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,6,6,5,5,6,6,6,6,6,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,8,8,6,8,8,7,8,8,8,7,7,8,7,8,7,7,7,7,7,7,6,6,6,6,6,5,6,6,6,6,6,7,6,7,7,7,7,7,8,8,8,8,9,10,10,9,9,9,9,9,9,8,8,9,9,8,8,9,8,7,7,7,8,9,10,10,9,9,9,9,10,10,10,9,11,10,9,10,9,9,10,8,9,9,8,8,9,9,8,7,8,8,7,7,8,7,7,7,7,6,6,7,9,10,11,11,13,14,14,14,14,16,16,18,22,20,23,23,23,22,23,23,22,23,23,23,26,22,25,24,27,25,26,25,27,26,26,27,27,25,25,25,26,27,26,26,26,27,23,26,26,24,25,25,23],[28,28,28,29,28,29,28,29,29,27,27,27,27,26,27,27,28,27,27,28,27,27,27,28,27,27,27,27,28,28,26,28,28,28,26,28,27,28,28,27,28,27,27,27,26,26,25,24,25,23,23,22,23,21,22,22,21,22,19,19,17,16,13,12,11,9,8,8,8,7,7,6,6,6,5,5,4,4,4,5,4,4,4,5,4,5,5,4,5,4,4,4,4,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,3,3,3,2,1,1,0,1,1,2,2,3,2,2,2,3,2,2,3,3,3,3,4,3,4,4,4,5,5,4,4,4,3,4,3,3,4,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,5,4,4,4,5,5,5,5,5,6,6,6,7,7,7,7,7,8,8,6,8,7,6,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,6,6,6,5,6,6,6,6,6,7,7,8,7,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,9,9,10,10,12,13,14,13,17,17,17,17,18,19,18,18,20,21,20,23,22,23,24,23,25,25,26,25,26,25,25,25,25,24,25,24,25,26,26,26,27,27,28,27,28,28,28,28,29,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,28,27,28,28,27,28,28,27,27,26,26,25,25,24,22,22,20,20,20,18,18,17,15,15,13,12,11,11,10,11,10,10,10,10,11,11,11,12,12,12,12,12,14,13,13,14,15,13,14,15,15,14,14,15,14,13,13,13,13,14,13,15,14,15,15,16,15,14,14,13,12,13,12,12,12,11,11,11,10,10,10,10,10,9,9,10,9,9,9,9,9,9,10,9,9,10,10,10,10,11,10,10,9,9,8,8,8,7,6,6,6,7,7,7,6,7,6,6,7,7,7,6,7,7,7,6,7,7,6,6,7,6,6,6,7,6,6,7,6,8,7,8,8,9,9,8,8,7,6,6,6,6,6,5,6,5,6,6,6,6,6,7,7,6,6,6,6,5,5,6,6,5,6,6,5,5,6,6,5,6,6,6,5,6,6,6,6,6,6,6,6,7,7,7,7,8,7,7,8,8,8,8,8,8,8,7,7,8,7,7,8,8,7,8,7,8,8,7,7,8,8,7,8,8,8,8,8,8,8,7,7,7,7,6,6,5,5,4,4,4,4,4,3,4,4,3,3,4,4,4,4,5,6,7,7,7,6,7,7,7,7,6,7,7,7,7,7,6,6,6,6,7,6,7,7,7,7,8,7,7,8,8,8,8,8,8,9,9,10,10,9,9,10,9,9,9,9,9,9,9,9,9,8,9,8,9,8,9,9,8,8,8,7,7,7,8,8,8,9,9,9,9,9,9,10,9,9,10,10,10,10,11,11,10,10,10,10,11,10,9,10,10,10,10,9,10,9,9,9,9,9,10,10,11,10,10,11,10,11,11,11,11,12,12,12,11,11,11,11,10,10,11,10,10,10,10,10,8,10,9,9,9,8,9,8,8,8,8,8,8,9,10,11,11,14,14,14,14,15,16,17,19,20,19,22,23,23,21,22,21,23,23,22,22,25,24,24,24,25,23,25,24,26,25,25,26,26,25,26,25,25,26,26,25,26,26,24,25,25,25,24,25,25],[27,28,27,27,27,28,27,27,28,26,25,25,25,25,25,25,26,26,26,26,26,27,26,26,27,26,26,26,26,26,27,26,26,27,26,26,26,26,27,25,27,25,25,25,25,23,23,24,24,21,21,22,21,20,20,21,17,19,19,17,15,15,12,12,10,9,9,8,8,7,7,6,6,6,6,5,4,4,4,5,5,4,4,5,4,4,5,5,5,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,2,1,1,1,0,1,1,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,3,3,3,3,2,2,3,3,2,3,3,3,2,3,3,3,3,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,6,6,5,6,6,6,7,6,7,7,7,7,7,7,7,7,6,6,5,5,5,5,4,5,4,4,4,4,4,4,4,5,5,4,4,5,4,4,4,5,4,5,4,5,4,4,4,4,4,4,4,4,4,5,5,5,4,6,6,6,5,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,5,5,5,4,5,5,5,4,5,6,5,5,6,6,5,6,6,6,6,6,7,7,7,7,7,7,9,8,8,8,9,9,9,9,9,10,9,9,9,9,9,9,8,8,8,8,8,8,8,8,9,9,11,12,12,14,13,15,17,15,15,17,18,16,17,19,19,18,22,20,21,23,23,24,24,25,23,25,24,23,25,24,23,24,24,25,24,25,24,26,26,27,25,26,27,27,26,27,27,27,27,27,27,27,27,27,26,27,26,27,26,27,27,26,26,26,26,27,27,26,27,25,25,25,24,25,22,20,21,18,18,17,16,16,14,13,14,12,11,11,10,9,11,10,11,11,11,12,12,12,13,13,14,12,14,15,14,14,16,15,15,16,17,17,15,15,16,15,13,13,14,13,14,15,16,16,16,16,16,15,15,15,14,13,14,14,12,13,13,11,11,11,10,11,10,11,10,10,11,9,10,11,11,9,10,11,11,10,11,11,11,11,12,11,10,9,9,9,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,6,7,7,6,6,7,7,8,7,8,8,9,9,8,8,7,6,6,5,6,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,6,5,5,6,5,5,6,5,5,5,6,6,6,6,6,6,6,7,6,7,7,7,7,8,7,8,8,8,8,9,9,8,9,9,8,8,9,9,8,8,9,9,8,8,8,9,8,7,8,9,8,7,8,8,7,7,7,7,7,7,7,7,6,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,4,4,5,6,6,6,7,7,6,6,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,7,7,6,7,8,7,8,8,8,9,9,9,10,10,10,10,10,9,10,11,10,11,11,11,10,10,10,11,9,9,10,10,8,8,9,8,8,8,7,7,7,7,8,8,8,9,9,10,10,10,10,11,10,10,11,10,11,10,12,11,12,12,11,10,11,11,10,10,11,10,9,10,11,9,9,10,10,10,12,11,11,11,12,12,11,11,11,11,12,12,13,12,12,11,12,12,11,11,12,12,11,11,11,11,10,11,10,10,10,10,10,9,9,9,8,8,8,9,9,11,11,14,15,16,14,16,16,20,20,21,20,22,22,23,22,22,21,23,23,23,21,24,23,23,24,25,24,24,23,25,25,24,26,24,25,24,24,24,25,24,25,25,25,23,25,25,24,22,24,23],[28,28,28,28,28,29,28,28,28,27,27,27,27,27,27,27,27,27,27,27,27,27,26,26,27,27,26,27,27,26,26,27,27,28,27,28,27,27,27,26,27,26,26,26,26,25,24,23,24,23,23,22,23,21,20,21,19,20,18,18,16,14,13,12,10,9,9,8,8,7,7,6,6,6,6,5,5,5,4,5,5,4,5,5,5,4,5,5,5,5,4,4,4,4,3,4,3,3,3,3,2,3,3,3,2,3,4,3,2,3,3,2,2,1,1,1,0,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,6,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,4,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,5,6,7,7,7,7,6,7,7,7,7,8,7,8,7,6,6,6,6,5,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,4,4,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,6,6,6,6,6,6,6,7,6,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,6,6,7,7,6,7,7,7,7,8,8,7,8,8,8,8,9,9,8,9,8,8,7,8,8,8,9,8,9,9,10,10,12,13,14,14,15,17,17,17,18,19,18,19,20,20,21,22,21,23,24,24,25,26,25,26,26,25,25,25,25,24,25,25,26,24,26,25,26,27,27,26,26,28,27,27,27,27,28,28,28,28,27,27,28,28,28,27,28,28,28,28,28,27,28,27,28,28,28,28,27,25,26,25,25,24,22,23,20,20,19,17,17,14,14,14,12,12,11,10,9,10,9,10,10,10,12,11,11,12,12,13,12,13,14,14,14,15,15,14,15,16,16,15,16,15,15,14,13,14,13,14,14,15,15,15,15,15,14,14,15,13,13,13,13,12,12,12,11,11,10,10,10,9,9,8,9,10,8,8,9,9,8,9,10,9,9,10,10,11,10,11,11,9,9,9,8,8,7,7,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,6,6,6,6,6,6,7,6,6,6,7,7,7,7,7,7,8,7,8,8,9,9,8,8,7,6,6,6,6,6,6,6,6,6,7,6,6,7,7,7,7,6,6,6,6,6,6,6,6,6,5,7,6,5,6,6,5,6,6,6,5,6,6,5,6,6,6,6,7,7,7,7,7,8,7,7,8,7,7,8,8,7,7,7,7,7,7,8,8,7,7,8,8,8,7,8,8,7,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,5,5,4,5,5,4,3,4,4,3,3,4,4,5,5,6,6,7,7,7,7,7,7,7,7,7,7,7,6,6,6,7,6,6,6,7,6,7,7,6,7,7,7,7,7,7,8,8,8,9,9,9,9,9,9,9,9,9,10,10,10,9,9,9,9,9,8,9,9,8,8,8,8,8,7,8,7,7,7,8,8,8,8,8,8,9,9,9,10,9,10,11,10,10,10,11,12,11,12,11,11,11,10,10,10,10,10,10,10,10,9,9,10,10,9,11,11,11,10,11,11,11,11,11,11,12,12,13,11,11,10,11,11,10,10,11,10,10,10,10,9,9,9,9,9,9,9,8,8,8,8,8,8,8,9,10,10,11,13,14,15,14,15,16,18,20,22,20,22,22,22,22,22,22,22,23,23,23,24,23,25,25,26,25,25,25,26,26,25,27,25,26,26,26,26,26,25,26,25,26,24,26,26,24,24,25,24],[28,28,27,27,28,28,28,27,28,27,26,26,26,27,26,26,25,27,26,26,27,27,27,26,27,26,26,27,26,26,26,26,26,27,26,27,26,26,27,25,27,25,25,26,25,25,24,23,23,22,22,23,22,21,20,20,19,20,18,18,17,16,13,12,11,10,9,9,8,7,8,7,7,7,6,7,6,5,5,6,6,5,6,6,5,5,6,6,6,5,5,6,5,5,4,5,4,4,4,4,4,3,4,3,3,3,4,3,3,4,3,2,2,2,2,1,1,0,1,2,1,2,1,2,2,2,3,3,3,3,4,4,4,5,5,6,6,5,5,5,4,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,4,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,3,3,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,7,6,7,7,7,7,8,8,8,8,8,8,8,7,6,6,6,6,6,5,5,5,5,4,5,5,4,4,5,4,4,4,5,4,4,4,5,5,5,5,5,4,3,4,3,3,4,4,3,4,4,4,4,5,5,4,5,5,5,5,5,6,6,6,6,5,5,6,6,5,6,6,6,6,7,7,6,7,7,7,7,7,7,7,6,6,7,6,6,5,5,6,6,5,6,6,5,5,6,6,5,5,6,6,6,7,7,6,7,7,7,7,8,7,7,7,8,8,8,8,9,9,9,9,9,9,9,10,9,8,8,9,9,9,9,9,10,10,11,12,13,15,14,16,17,17,17,18,19,18,17,19,20,20,21,22,23,23,23,24,24,24,25,26,24,24,25,25,24,25,23,25,26,25,24,26,26,27,25,27,27,28,26,27,27,27,28,27,27,28,28,28,28,28,27,28,28,27,27,27,27,27,27,28,28,27,27,27,26,26,26,26,24,22,22,18,19,18,16,17,15,15,15,12,12,10,10,10,10,9,10,10,11,12,11,12,13,12,13,12,13,15,14,14,15,16,15,16,17,18,17,17,16,16,14,15,13,13,14,14,14,17,17,17,16,16,14,16,13,13,14,13,12,12,13,11,11,10,10,10,10,9,9,9,11,8,9,10,10,9,9,10,10,9,10,11,11,11,11,10,9,9,9,8,8,7,7,7,6,6,6,6,6,6,7,6,6,7,7,7,7,7,7,7,7,7,8,7,7,7,7,7,7,8,8,7,8,8,9,8,9,9,10,10,9,8,7,7,7,7,7,6,6,7,7,7,7,7,8,7,7,8,7,7,8,7,7,7,7,7,7,7,8,7,6,7,7,7,7,7,7,6,7,7,6,6,7,7,6,7,8,7,7,7,8,8,8,7,8,9,7,8,9,8,8,8,8,8,8,9,9,8,9,8,9,9,8,9,9,9,9,9,9,9,9,8,8,8,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,6,4,4,5,5,6,6,7,7,8,8,8,7,8,8,8,8,9,8,8,7,7,7,7,6,7,7,7,7,8,7,7,8,9,8,8,9,8,8,9,9,9,10,9,10,10,9,10,11,10,11,11,10,10,10,10,10,10,9,10,10,10,9,9,9,9,8,9,8,8,8,9,9,9,9,10,9,10,10,10,10,10,11,11,11,11,11,12,12,12,11,12,12,12,12,11,11,11,11,10,11,11,10,10,10,9,10,11,11,12,12,12,12,11,12,11,12,13,12,14,12,12,11,12,12,11,11,12,11,10,11,11,10,10,10,10,9,9,9,9,8,9,8,8,8,8,9,9,10,12,14,14,16,14,15,16,19,20,23,20,23,22,23,22,24,22,23,23,23,23,25,24,26,26,26,26,26,25,26,27,26,26,26,26,26,26,26,26,27,26,26,26,25,26,26,25,23,25,24],[30,29,29,29,29,30,29,29,29,29,28,28,28,27,28,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,28,29,29,29,28,29,28,28,28,28,28,28,27,28,27,27,25,24,26,24,24,24,25,24,22,23,21,21,19,19,17,16,14,12,11,9,8,8,8,7,7,6,6,6,5,5,5,4,4,5,5,4,5,5,4,4,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,6,7,6,7,7,7,7,8,8,8,7,6,6,6,5,5,5,5,4,5,5,4,4,5,4,3,4,4,4,3,4,4,4,3,4,4,4,5,5,4,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,4,5,6,6,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,5,5,6,5,5,4,5,5,5,5,5,6,5,5,5,6,5,5,6,5,6,6,6,5,6,7,8,7,7,8,8,7,8,9,9,8,9,9,9,10,9,9,9,10,8,8,9,9,9,9,9,10,10,11,10,11,13,13,14,17,17,18,18,19,20,19,19,21,22,22,23,23,26,26,25,26,28,27,27,28,25,27,26,26,25,26,26,26,27,26,26,28,28,29,27,28,28,28,28,28,28,27,28,27,28,28,28,29,28,28,28,29,28,28,28,28,28,28,28,27,28,28,28,28,27,27,27,26,26,24,24,20,21,20,18,19,17,15,16,13,12,11,10,10,11,10,9,11,9,11,11,11,11,11,12,11,12,13,13,12,13,15,14,15,17,17,15,16,15,15,13,13,12,13,13,14,13,14,15,15,15,15,13,13,12,12,11,11,12,11,10,10,11,11,9,10,10,9,9,9,9,8,9,9,9,9,9,9,9,9,9,10,10,10,10,10,9,9,9,8,8,7,7,6,6,5,6,6,5,6,6,6,6,6,6,6,6,7,6,6,6,7,6,6,6,6,6,6,6,7,6,6,6,7,7,7,8,8,9,9,8,7,6,6,6,6,6,5,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,7,7,7,6,7,7,7,7,8,7,7,8,7,7,7,7,7,7,7,7,8,7,7,7,7,8,7,8,7,7,7,7,8,8,8,8,8,7,7,7,7,7,7,6,6,6,5,5,5,5,5,4,5,5,4,4,5,5,6,6,6,7,7,8,8,7,7,8,8,8,7,7,8,7,7,6,7,6,6,6,7,6,7,7,7,7,7,7,7,7,7,8,8,8,8,9,8,9,8,8,9,9,8,9,9,9,9,9,8,9,9,8,8,8,9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,8,9,9,9,9,9,10,9,10,9,11,11,11,10,11,10,10,10,10,10,10,9,9,10,10,9,9,10,10,9,11,10,10,10,10,11,10,10,10,11,11,12,12,11,11,10,11,10,10,10,10,10,8,9,9,9,8,9,8,9,8,8,9,8,8,8,8,7,7,9,10,11,11,13,14,14,14,15,16,17,19,21,20,24,25,23,23,24,23,25,25,25,25,26,25,27,27,28,26,27,27,27,27,27,29,26,27,28,27,26,27,27,28,27,28,27,28,27,26,26,28,27],[28,29,27,28,27,28,28,28,28,27,26,27,26,26,26,26,26,26,27,26,26,26,26,25,27,26,25,26,26,25,26,27,26,27,26,27,25,26,26,25,26,26,25,25,26,25,24,23,23,22,22,21,21,22,19,20,19,19,18,18,17,15,14,12,10,9,8,8,7,7,6,6,5,5,5,5,4,4,4,5,5,4,5,5,4,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,1,1,0,1,1,1,1,1,2,1,2,2,2,2,2,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,2,3,2,3,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,4,5,5,5,5,6,6,6,6,7,6,7,7,7,7,7,7,6,6,5,5,5,5,5,4,5,4,4,3,4,4,3,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,4,5,6,6,5,5,4,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,7,6,6,7,7,7,8,7,8,8,8,8,8,8,8,8,8,7,7,8,8,7,8,8,9,9,10,11,13,14,14,16,17,16,16,18,18,17,18,19,20,21,21,20,22,23,23,23,24,23,25,25,23,24,24,25,24,24,23,25,25,24,23,25,26,26,25,26,27,27,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,26,27,26,27,27,27,27,28,27,27,26,26,27,26,25,25,23,23,20,19,18,16,17,14,14,14,12,11,10,10,9,10,9,10,10,9,10,10,11,11,11,12,12,12,13,12,13,14,14,14,15,16,16,15,15,14,14,12,12,12,11,12,12,14,14,15,15,15,15,14,14,12,12,12,12,11,11,11,9,9,9,9,9,9,8,8,9,9,8,8,9,9,8,8,9,9,8,9,10,9,10,10,9,9,9,9,7,8,7,6,6,5,5,6,6,6,6,6,6,6,6,7,6,6,7,6,6,7,6,7,6,7,6,7,6,7,7,7,7,7,7,8,7,8,8,9,9,8,7,6,6,6,6,6,5,6,6,6,6,6,7,7,7,7,7,7,6,7,7,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,7,7,6,6,7,7,7,7,7,8,8,7,7,8,7,8,7,7,7,7,8,8,7,8,8,8,8,8,8,8,8,8,8,9,8,8,8,8,7,8,7,7,7,6,6,6,5,5,5,5,4,5,4,4,5,4,4,4,5,5,6,6,7,7,8,7,7,7,8,7,7,7,7,7,6,6,6,6,5,6,6,6,6,7,7,6,7,7,7,7,8,7,7,8,8,8,9,8,9,9,8,9,9,9,9,10,9,10,9,9,9,10,9,9,9,9,8,9,8,8,7,7,7,7,7,8,8,8,8,9,8,9,9,9,9,9,9,10,10,10,10,11,11,11,10,11,11,10,10,10,10,10,9,9,10,10,8,9,9,9,9,10,10,11,9,10,11,10,10,10,11,10,11,12,10,11,10,11,10,10,10,10,10,9,9,9,9,9,9,9,8,8,8,8,8,7,7,7,8,7,8,9,10,10,12,13,14,13,13,14,16,17,19,18,22,22,21,20,22,20,22,23,23,23,24,23,23,26,25,24,25,24,25,25,25,26,24,25,26,25,23,26,25,26,25,25,25,25,26,25,24,25,26],[28,28,27,28,27,28,27,26,29,26,25,26,25,26,25,26,25,26,26,25,26,26,26,25,27,26,25,27,26,26,26,26,26,27,26,26,26,26,27,26,27,26,25,25,25,25,24,23,24,22,22,20,21,20,19,20,18,18,18,17,15,14,12,11,9,8,7,6,6,5,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,6,6,5,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,4,4,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,3,3,3,4,3,3,3,4,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,6,6,6,6,6,6,6,7,7,8,9,10,12,13,12,14,15,15,15,16,16,16,17,18,18,20,21,18,21,23,22,23,25,24,25,24,25,23,24,24,24,23,24,24,24,24,24,25,26,26,25,25,27,26,27,26,27,27,28,27,27,26,27,27,27,27,27,28,28,27,28,27,27,27,27,27,28,27,27,27,26,26,26,26,25,22,22,21,19,19,16,16,14,13,13,11,10,9,9,8,8,8,8,8,8,8,9,9,9,10,11,10,11,12,11,12,14,13,12,14,14,15,14,13,13,13,11,11,11,11,11,12,13,13,14,14,14,13,12,13,12,11,11,11,10,10,10,9,9,8,8,8,7,7,7,7,8,7,7,7,8,6,7,8,8,7,8,8,8,8,8,8,8,7,7,6,6,5,5,5,5,4,4,4,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,6,6,6,6,7,7,6,6,5,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,6,6,5,5,6,6,5,6,6,5,5,6,6,5,6,5,6,7,5,6,6,6,5,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,5,5,5,6,6,6,5,5,6,6,6,6,5,6,5,5,5,5,4,4,5,5,4,5,5,5,5,6,5,5,6,6,6,6,6,7,7,7,7,7,7,7,8,7,7,8,8,7,8,7,8,8,7,7,8,7,6,7,7,5,6,6,6,6,6,6,6,6,6,7,7,7,7,8,8,7,8,8,8,8,8,10,10,9,9,10,9,9,10,9,8,9,9,8,9,9,8,7,8,7,8,9,9,9,8,9,9,9,9,9,9,9,10,10,9,9,8,9,9,8,8,9,8,7,7,8,7,7,8,7,6,6,7,6,6,6,6,5,6,6,7,7,8,9,11,11,13,11,12,13,15,15,18,17,20,19,18,20,21,19,19,20,21,19,24,22,22,23,24,23,24,23,24,24,24,26,23,24,24,24,24,24,24,23,23,24,23,25,24,23,22,23,24],[29,29,29,29,29,29,29,28,29,28,27,27,27,26,27,27,27,27,27,27,26,27,26,26,27,27,26,26,27,26,26,28,27,28,27,28,27,28,28,27,27,28,27,27,26,26,25,23,25,23,23,22,23,22,20,21,21,19,18,18,16,14,12,10,9,8,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,1,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,7,7,8,8,9,10,11,12,13,13,14,15,16,18,17,17,19,19,21,22,20,23,25,23,24,26,25,26,26,24,25,25,24,24,25,24,26,25,26,26,25,27,27,26,27,28,27,27,28,27,27,28,28,28,28,28,28,28,28,28,28,29,28,28,28,28,28,28,27,29,28,27,29,26,27,27,25,26,24,22,22,21,19,17,17,16,14,13,11,10,9,7,7,7,7,7,7,7,8,8,8,8,8,9,9,10,11,10,10,11,12,11,12,14,14,12,13,12,12,11,11,10,9,10,11,11,12,13,13,12,12,11,11,10,10,9,9,9,9,8,8,8,7,7,7,6,6,5,6,6,6,5,6,7,6,6,7,6,6,7,7,7,7,8,8,7,6,6,5,5,5,4,3,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,6,6,7,7,6,6,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,4,4,3,3,4,4,3,3,4,4,4,4,5,4,4,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,2,3,3,3,3,3,3,4,4,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,5,4,4,4,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,7,8,8,7,8,7,6,7,8,7,6,6,6,7,7,8,8,7,8,8,7,8,8,9,8,9,9,8,8,7,8,8,7,7,7,7,6,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,6,7,9,9,11,12,12,12,13,14,14,17,19,19,21,22,22,20,22,21,23,24,22,23,24,22,25,24,27,25,26,25,27,26,26,27,26,26,26,24,25,26,25,25,25,26,25,26,26,24,24,25,25],[29,29,29,29,29,29,29,28,28,28,27,27,27,27,28,27,27,27,27,27,27,27,27,27,27,27,27,27,28,26,26,28,27,28,27,28,26,28,27,27,28,27,25,27,26,26,25,24,24,23,23,23,23,22,20,21,19,19,18,17,15,14,12,10,9,7,6,6,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,1,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,6,5,5,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,3,2,2,2,3,2,2,3,3,3,3,4,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,4,3,3,4,4,3,3,4,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,7,7,8,9,10,11,12,13,14,15,14,16,18,16,17,19,19,20,21,20,22,24,23,25,25,25,25,26,24,24,25,24,22,25,23,24,25,25,24,26,25,26,25,26,26,27,27,27,27,27,27,27,27,27,27,28,28,28,27,28,28,28,27,27,27,27,28,27,28,27,27,28,26,27,26,25,24,23,24,19,20,19,16,17,15,13,14,10,10,8,7,7,7,7,7,7,7,7,8,8,8,8,9,8,9,9,9,9,10,10,10,10,12,11,11,12,10,11,10,9,9,9,10,10,10,11,12,10,11,11,10,9,9,9,9,9,9,8,8,7,7,7,6,7,6,6,6,6,6,6,6,6,7,6,6,6,6,6,7,7,7,7,8,8,7,7,7,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,4,5,5,4,4,5,5,5,5,5,6,5,6,7,7,7,6,6,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,6,5,5,5,6,5,5,6,5,6,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,6,6,5,5,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,6,7,7,7,7,7,8,8,8,8,8,8,7,8,7,7,8,7,6,7,7,6,6,6,6,6,7,7,8,7,7,8,7,8,8,8,8,8,9,7,8,7,8,8,7,7,7,7,6,7,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,6,7,9,8,10,11,11,11,12,13,14,16,17,19,20,21,19,18,21,20,21,22,22,22,22,23,24,24,25,24,25,25,24,25,24,26,24,25,25,24,23,25,25,26,24,24,24,24,25,24,22,25,25],[28,27,27,27,27,28,27,26,27,26,25,24,24,25,24,25,25,25,25,25,25,26,25,24,26,24,23,25,24,23,25,25,25,25,25,25,24,25,25,24,25,24,23,25,24,24,23,21,22,20,20,19,19,20,18,17,18,17,16,16,14,13,12,10,9,8,7,7,6,5,5,5,4,4,4,4,3,3,3,4,3,3,4,4,3,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,5,5,4,4,4,3,3,3,2,3,3,2,2,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,6,7,7,6,7,7,7,6,6,6,6,6,6,6,6,7,7,8,9,10,11,12,12,13,15,15,14,16,15,15,16,16,17,18,18,17,20,20,20,21,22,23,22,22,22,21,23,23,22,22,22,23,23,22,22,26,25,25,24,24,26,25,26,25,25,25,25,25,26,26,26,27,26,27,27,26,25,26,25,27,25,27,26,26,26,26,26,26,25,26,25,24,23,22,22,20,18,17,16,15,13,12,12,10,9,8,8,7,7,7,8,7,8,8,8,9,9,9,9,10,10,11,10,11,12,11,11,12,13,13,12,12,11,11,10,10,9,9,10,10,11,12,13,13,13,12,11,12,10,10,10,10,9,9,9,8,8,8,7,7,7,7,6,7,7,6,6,7,7,6,6,7,7,6,7,8,7,7,7,7,7,7,7,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,6,6,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,6,5,5,5,6,6,5,6,6,6,6,6,6,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,5,5,5,6,6,5,6,6,6,6,6,6,6,5,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,6,7,7,7,7,7,8,7,7,7,7,7,7,7,7,7,6,7,7,6,6,6,5,5,6,6,6,6,7,7,6,7,7,7,7,7,8,7,8,8,8,9,9,9,8,9,9,8,8,8,8,8,8,8,8,8,7,7,7,7,7,8,8,8,8,8,8,8,9,8,9,8,9,9,8,8,8,8,8,7,7,8,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,5,6,6,7,7,8,9,10,11,12,10,11,12,14,15,17,16,20,19,17,18,19,18,18,21,20,20,22,20,23,22,24,23,24,22,24,24,23,25,23,24,24,24,23,24,24,24,24,23,23,23,24,22,22,24,24],[28,28,28,29,28,29,28,27,28,27,26,27,26,26,26,26,26,26,27,26,26,27,26,26,26,26,25,26,26,26,25,27,27,28,26,27,26,27,27,27,27,27,26,26,26,26,25,23,24,23,22,22,23,22,19,21,19,18,17,18,15,14,12,10,9,7,6,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,1,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,3,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,7,6,6,6,5,6,6,6,6,6,6,7,7,8,9,11,12,12,13,14,16,14,16,17,17,16,17,18,20,21,19,23,25,23,24,26,25,25,26,24,24,25,25,23,24,24,26,26,26,26,26,27,28,26,26,28,28,28,28,28,28,29,29,28,28,28,28,28,28,28,28,29,28,29,28,27,28,28,28,29,28,28,28,26,27,27,25,25,24,22,21,20,19,18,17,14,13,13,11,10,9,8,8,7,7,7,7,8,8,8,8,8,9,10,9,10,12,10,10,12,12,12,12,13,14,13,13,13,12,11,11,10,10,11,11,12,12,13,13,12,12,11,12,11,10,10,11,10,9,9,8,8,7,7,7,6,6,6,6,6,6,6,6,7,6,6,7,7,7,7,7,7,8,8,8,8,7,7,6,6,5,5,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,6,6,7,7,6,5,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,6,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,6,5,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,6,6,6,6,6,6,6,6,7,6,6,7,7,6,7,6,6,7,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,6,6,6,6,6,7,7,6,7,7,7,7,8,9,9,8,8,8,8,8,9,8,7,8,7,7,7,8,7,6,7,6,7,7,8,8,8,8,8,8,8,8,9,8,9,9,8,8,8,8,8,7,7,8,7,6,6,7,6,6,6,6,5,6,6,6,5,5,5,5,5,5,6,7,8,8,10,11,12,11,12,13,15,17,18,18,21,22,20,20,20,21,21,23,22,23,24,22,25,24,26,25,25,24,26,26,24,27,25,25,26,25,25,26,25,25,25,26,25,26,25,23,23,25,24],[29,29,29,29,29,29,29,28,29,28,28,27,27,27,27,27,27,27,27,27,26,27,27,27,27,27,27,27,28,26,26,28,28,28,27,28,27,28,28,27,28,27,26,27,26,26,25,24,25,24,22,23,23,22,21,21,20,19,19,18,16,15,12,10,9,8,7,6,6,5,5,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,3,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,4,5,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,5,5,6,6,5,6,6,6,6,6,6,7,7,6,6,6,6,6,6,6,7,7,7,8,8,9,11,12,12,13,14,15,14,17,18,16,17,19,19,20,21,21,23,23,23,24,25,26,26,26,24,25,25,24,25,25,25,26,25,25,25,26,27,28,26,27,28,27,27,27,27,28,28,28,28,28,28,28,28,28,28,29,28,28,28,28,27,28,29,27,28,28,27,28,26,26,27,25,25,23,22,20,20,18,17,17,15,13,12,11,10,9,8,8,8,8,7,7,8,7,8,9,8,8,9,9,9,10,10,10,11,11,11,11,13,12,12,12,11,11,10,10,10,10,10,10,11,11,13,12,12,11,11,10,10,9,9,9,9,8,8,8,8,8,7,8,7,6,6,6,7,6,6,6,7,6,6,7,7,6,7,7,7,8,8,8,8,7,6,6,5,4,4,3,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,4,4,5,5,6,5,6,6,7,7,6,5,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,5,6,6,5,6,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,5,5,6,6,6,6,6,5,5,5,5,4,4,5,5,4,4,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,7,6,6,7,7,6,6,7,7,6,7,6,7,7,6,6,7,7,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,7,7,7,6,7,8,7,7,8,8,8,8,8,8,8,8,8,8,7,8,7,7,7,8,7,7,7,7,7,8,8,8,7,8,8,8,8,8,8,8,9,9,8,8,7,8,8,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,5,6,5,5,5,5,6,7,8,8,10,11,11,11,12,13,14,17,17,18,21,21,20,19,21,21,20,24,21,23,24,23,25,25,25,25,26,25,26,26,26,27,25,26,26,24,25,27,26,26,26,25,25,26,26,24,23,26,24],[29,29,28,28,28,28,29,28,28,27,27,26,27,25,25,26,26,27,27,27,27,26,27,26,26,26,26,26,26,25,25,27,26,27,25,26,25,26,26,25,26,25,25,25,24,24,23,22,23,21,21,19,21,19,18,19,18,17,17,17,14,13,11,10,9,7,6,6,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,7,7,8,9,11,12,12,13,14,14,13,15,15,15,16,17,17,18,19,18,21,21,21,23,23,23,23,24,22,21,23,23,22,22,23,22,23,23,23,25,25,24,23,25,26,26,26,26,26,26,26,26,26,26,27,27,26,26,26,27,27,27,26,26,26,27,26,26,27,27,27,27,26,26,26,24,24,23,23,19,19,17,15,16,14,12,12,10,9,8,7,6,6,6,7,6,7,7,7,8,7,8,8,8,9,9,9,9,10,10,10,10,12,12,12,11,10,10,9,9,9,9,9,10,10,10,12,12,11,11,10,10,9,9,9,9,9,8,8,7,7,7,6,6,6,6,5,6,6,5,6,6,6,6,6,6,6,6,6,7,7,7,8,7,7,6,7,5,5,5,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,6,6,7,7,7,6,5,4,4,4,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,3,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,2,3,3,3,3,3,4,4,4,5,5,5,6,6,5,5,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,6,6,6,6,6,5,6,7,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,7,7,7,8,8,7,7,8,8,7,8,7,7,7,7,7,6,7,6,6,6,6,7,7,7,7,7,7,7,7,8,7,8,7,8,8,7,8,7,7,7,7,6,7,6,6,6,6,6,6,6,5,6,5,5,6,5,5,5,5,5,5,6,7,8,8,10,11,11,10,12,13,14,15,16,17,20,20,19,18,19,19,19,21,21,21,23,21,23,24,24,22,26,23,25,25,25,25,24,25,25,24,23,25,25,25,24,24,24,24,25,24,23,24,23],[28,28,28,28,27,28,27,27,28,26,25,25,25,26,25,26,25,25,26,25,25,26,25,25,26,25,24,26,25,25,25,25,25,26,26,26,26,26,26,25,26,25,24,24,24,24,23,21,22,21,20,20,20,20,18,19,18,17,17,16,14,13,12,11,9,8,7,7,6,6,5,5,5,4,4,4,4,3,3,4,3,3,4,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,6,6,7,7,8,9,10,12,12,12,13,14,15,14,15,16,15,15,17,17,18,18,18,19,20,20,21,23,22,21,24,22,22,22,23,21,22,22,23,23,23,23,25,25,26,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,27,26,26,27,27,27,27,26,26,26,27,27,27,27,26,26,26,25,24,24,23,22,20,19,18,16,16,14,13,13,11,10,9,8,8,8,8,8,7,8,8,8,8,8,9,9,10,10,11,10,10,12,11,11,11,12,12,12,12,12,10,10,10,10,10,11,10,12,12,12,12,12,11,11,11,10,10,10,10,10,9,9,9,8,8,7,8,7,7,7,7,7,6,7,7,7,6,7,7,7,7,7,7,7,7,8,8,7,7,7,6,6,5,5,5,4,4,4,4,4,4,4,5,4,4,5,5,4,4,5,4,4,5,5,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,7,7,6,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,6,5,5,5,6,5,6,5,6,6,5,5,5,6,6,5,5,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,6,7,7,6,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,7,7,6,7,7,7,7,7,8,8,7,8,7,8,8,8,8,8,9,8,9,8,8,8,8,7,8,8,8,7,7,7,7,8,8,8,8,8,9,8,9,8,8,8,9,9,8,8,8,8,8,7,7,8,7,7,7,7,6,6,7,6,6,6,6,6,6,6,5,6,6,6,6,7,8,8,10,11,11,10,11,12,14,15,16,16,20,19,18,18,20,19,19,20,20,20,23,20,22,22,24,24,24,22,25,24,23,25,24,24,24,23,23,24,25,24,24,24,23,23,24,22,21,23,23],[29,29,29,29,28,29,29,28,29,28,27,27,27,26,27,27,27,26,26,27,26,26,27,26,26,27,27,27,27,26,25,27,27,28,27,28,27,27,28,27,28,27,26,26,26,26,24,23,25,23,22,22,23,21,20,21,20,19,18,18,16,14,12,10,9,8,7,6,6,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,4,4,4,4,4,4,4,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,6,6,6,6,7,7,6,7,7,8,9,9,10,12,12,12,14,15,16,15,17,18,16,17,19,20,20,21,21,22,24,24,24,26,26,26,27,25,25,26,26,24,25,25,26,26,26,26,27,27,28,27,27,28,27,28,27,28,28,28,28,28,28,28,28,28,28,28,29,29,28,28,28,27,28,28,28,28,28,28,28,25,27,27,25,24,24,22,21,21,19,18,17,16,14,13,12,11,10,8,8,7,8,8,7,8,8,8,9,9,9,10,10,10,12,10,10,12,13,11,12,14,13,12,13,12,12,11,11,11,11,12,12,13,13,14,13,12,12,13,12,11,10,10,10,10,9,9,9,9,8,8,7,7,6,6,6,7,6,6,6,7,6,6,7,7,7,7,7,8,8,8,8,8,7,7,6,6,5,4,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,5,4,4,5,5,6,5,6,7,7,7,6,5,4,4,4,4,3,3,3,3,4,4,4,4,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,6,6,6,5,6,6,6,6,6,6,5,5,5,4,4,4,5,4,4,5,5,4,4,5,5,4,5,5,5,5,6,6,6,6,7,6,5,6,7,6,6,7,7,6,7,6,7,7,6,6,7,6,6,6,6,6,6,6,6,5,5,6,6,5,6,6,6,6,7,7,7,7,7,8,7,8,8,8,9,8,8,8,8,8,8,8,8,8,7,7,7,8,8,7,7,7,8,8,8,9,8,8,8,8,9,8,9,8,9,9,8,8,8,8,8,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,5,6,5,5,5,6,6,8,9,9,11,12,12,12,13,15,16,19,20,19,22,22,22,21,21,22,22,25,22,24,25,23,26,24,26,26,26,25,27,26,26,26,26,26,26,24,26,27,26,26,27,27,25,27,26,24,24,25,25],[29,29,29,29,29,29,29,28,29,28,27,27,27,26,27,27,27,27,26,27,26,27,27,27,27,27,26,27,28,26,26,27,27,28,27,28,26,27,28,27,28,27,26,26,26,26,25,24,25,23,23,23,23,22,20,21,20,20,19,18,16,15,12,11,10,9,8,7,7,6,6,5,5,4,4,5,4,4,4,4,4,3,4,4,3,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,5,5,5,5,5,6,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,4,4,3,4,4,4,3,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,8,8,7,7,6,8,8,7,7,7,8,8,9,9,10,12,12,13,14,16,16,15,17,18,17,18,20,20,21,20,21,24,24,24,25,27,26,26,27,25,25,26,24,24,25,26,25,25,25,26,26,27,27,26,27,27,28,28,27,28,27,28,28,28,28,28,28,28,28,28,29,28,28,28,28,26,29,28,27,28,28,28,28,25,27,27,26,25,25,24,22,21,20,19,18,16,15,13,12,11,10,9,9,9,8,8,8,9,9,9,10,9,9,10,10,10,11,10,10,11,13,12,12,14,13,13,14,12,11,11,11,11,10,11,11,12,13,14,14,13,12,12,12,11,10,10,10,10,10,9,9,9,8,8,8,8,7,7,8,8,7,7,8,8,7,7,8,8,8,8,8,8,9,9,9,9,8,8,6,6,6,5,4,4,4,5,5,4,4,5,5,4,4,5,5,4,5,5,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,6,6,7,7,7,7,6,6,5,5,5,5,4,4,4,4,4,4,5,5,5,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,5,4,4,5,4,4,5,5,5,4,5,5,5,6,6,6,5,6,7,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,3,4,4,3,3,4,4,4,5,5,5,6,7,7,6,6,7,7,6,6,6,6,6,6,5,5,5,5,5,5,5,6,6,5,5,6,6,6,6,6,7,7,7,7,8,7,7,7,7,7,7,7,7,8,8,7,7,8,8,8,7,7,7,8,7,7,7,6,7,7,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,9,10,9,9,9,9,8,9,9,8,9,9,8,9,9,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,10,10,9,9,8,9,9,8,8,8,7,7,7,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,7,8,9,9,11,12,12,11,12,14,15,18,17,19,20,21,20,19,20,22,20,23,21,22,23,22,25,24,25,25,25,23,26,25,25,25,25,26,25,23,25,26,25,26,26,26,25,25,26,24,24,25,25],[28,28,27,28,28,28,28,27,27,26,26,25,25,26,25,26,25,26,25,25,26,26,25,25,26,25,24,25,25,24,25,26,25,26,25,25,25,25,25,25,26,25,24,24,24,23,24,22,21,21,21,20,20,20,19,18,18,17,17,16,15,15,12,11,10,9,8,8,6,7,6,6,5,5,5,4,4,4,4,4,4,3,4,4,3,4,5,5,4,4,4,4,3,3,3,3,2,3,3,2,2,2,2,2,2,3,3,3,3,3,4,3,3,2,3,3,2,3,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,4,5,5,5,6,5,6,6,6,6,5,5,4,4,4,3,3,3,3,3,2,2,3,3,2,2,3,2,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,5,5,5,5,6,6,5,6,6,6,6,7,7,6,6,7,7,7,8,7,8,8,7,7,7,7,7,7,7,7,7,8,8,9,10,11,12,13,13,14,16,15,14,16,17,15,16,17,18,18,18,19,20,21,20,22,23,24,22,24,23,23,23,23,20,22,23,23,23,22,22,25,25,25,25,25,26,26,26,25,26,26,26,26,26,26,27,27,26,27,27,26,26,27,26,26,26,26,26,26,27,27,27,26,25,26,25,25,24,22,22,19,19,18,15,16,14,14,14,12,11,10,9,8,8,8,8,8,8,9,9,9,9,10,10,11,11,11,11,12,12,13,13,12,14,13,14,12,12,11,11,12,11,11,12,11,12,13,13,13,13,13,12,12,11,11,11,11,11,10,10,10,9,9,8,9,8,7,7,7,7,7,8,8,8,7,7,8,7,8,8,8,8,8,8,8,8,8,8,6,6,6,5,5,4,4,5,5,4,4,5,5,5,5,5,5,5,6,6,5,5,6,6,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,6,6,5,5,5,4,4,5,5,5,4,5,5,6,6,5,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,7,6,7,6,6,7,7,6,6,6,6,6,6,7,6,7,7,7,6,7,6,6,7,7,7,7,6,7,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,3,4,4,4,4,4,5,5,5,6,6,6,7,6,6,6,7,7,7,6,6,6,6,6,6,5,5,5,5,6,6,6,5,6,6,6,6,7,7,6,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,8,8,8,7,8,7,7,7,7,6,6,7,7,7,7,7,8,7,8,8,8,9,9,9,8,9,8,8,10,9,9,9,10,10,9,10,9,9,9,9,8,9,9,8,8,8,8,8,9,9,9,9,9,9,9,10,9,9,9,10,10,9,9,8,9,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,7,8,8,9,11,12,11,11,12,13,14,16,16,17,20,20,19,18,19,19,19,20,21,20,21,21,22,22,23,23,24,24,23,24,24,25,23,25,25,22,22,24,25,25,25,24,24,24,24,23,21,23,25],[28,28,28,28,28,28,28,27,28,27,26,26,27,26,26,27,26,27,26,26,27,27,26,27,27,26,27,27,26,26,26,26,27,28,26,27,27,26,27,26,27,26,26,26,26,26,24,24,25,22,21,22,23,20,20,22,20,19,19,19,16,15,13,12,11,9,8,8,8,7,7,6,6,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,3,3,3,3,4,4,3,3,3,4,3,3,3,3,2,3,3,2,2,2,2,1,1,1,1,1,0,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,2,3,3,4,3,4,4,4,4,5,5,5,5,5,4,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,3,2,3,3,3,4,4,4,4,5,5,5,5,5,5,6,5,4,4,4,4,3,3,3,2,3,3,3,2,3,3,3,3,3,4,4,4,5,5,4,5,5,5,6,5,6,5,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,5,5,4,5,5,5,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,5,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,7,8,8,8,8,8,8,9,8,8,8,8,7,8,8,8,8,8,8,10,10,11,12,13,14,14,16,16,17,16,17,18,18,19,20,20,21,21,20,23,24,23,24,24,24,24,25,24,24,24,25,25,24,23,25,26,26,24,26,26,26,25,26,27,27,27,26,26,27,27,27,27,27,27,28,27,28,27,27,28,27,28,27,27,27,27,27,28,28,28,27,26,27,26,26,25,24,23,21,21,19,18,19,15,15,15,14,12,11,10,10,10,10,9,10,10,11,10,10,11,11,12,12,12,14,12,12,14,13,13,14,15,15,14,13,15,13,12,12,12,12,13,12,14,14,14,15,14,14,13,14,13,12,12,13,12,11,12,11,11,10,9,10,9,9,8,9,9,8,9,9,9,8,9,9,8,8,9,9,9,9,9,9,9,8,9,7,7,7,6,6,5,5,5,6,5,5,6,6,5,5,6,6,5,6,5,5,5,6,5,5,5,6,5,5,5,6,5,5,6,6,6,6,7,7,8,8,7,6,5,5,5,5,4,4,5,5,5,5,5,5,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,7,8,7,7,7,7,7,7,6,7,6,6,6,7,7,6,6,7,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,5,5,5,5,6,5,5,5,5,5,5,4,5,5,5,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,5,6,6,6,6,6,6,6,6,6,6,7,7,7,8,7,7,8,8,8,9,8,8,8,8,8,8,8,9,8,8,8,9,8,7,8,8,8,8,8,8,7,7,7,7,7,7,7,8,7,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,11,10,10,10,10,10,10,10,10,9,10,10,9,9,9,10,9,11,10,10,10,10,10,10,10,10,10,10,10,11,10,10,9,10,10,9,9,9,9,8,8,8,8,8,8,7,8,7,7,8,7,7,7,7,6,7,8,9,9,10,12,12,13,12,13,14,16,17,18,18,21,20,21,20,20,21,22,23,22,23,24,23,24,23,26,26,24,23,25,25,25,26,25,25,26,24,25,25,25,25,25,25,24,25,25,24,23,25,26],[29,29,28,29,28,29,29,28,28,28,27,27,27,26,27,26,27,27,26,27,26,26,27,27,26,27,27,27,27,26,26,28,28,28,27,28,27,27,28,27,28,27,26,27,27,27,25,24,25,24,23,23,24,22,21,22,22,21,20,19,17,16,14,13,11,11,9,9,8,8,7,7,7,6,6,6,6,5,5,6,5,5,5,5,4,4,4,5,4,4,4,4,3,4,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,4,4,4,3,3,4,4,4,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,2,2,2,2,2,2,1,2,2,2,2,2,2,3,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,5,5,5,5,6,5,5,6,6,5,5,5,4,4,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,3,4,4,4,4,5,5,6,6,6,6,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,4,4,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,7,6,7,7,7,7,7,8,7,8,9,9,9,9,8,9,9,10,10,10,10,9,9,8,9,9,9,9,9,9,10,11,11,12,14,14,14,15,16,17,17,18,20,19,20,21,22,22,23,24,25,25,26,26,26,27,26,27,26,26,27,25,24,26,26,26,26,27,27,27,27,28,28,28,28,28,29,28,29,29,29,29,29,28,29,29,29,28,28,29,29,29,29,29,28,28,28,28,29,28,28,28,26,27,28,26,25,26,23,22,23,21,19,20,17,17,16,15,14,12,10,11,10,11,10,10,10,11,11,12,11,12,12,12,12,14,13,13,14,16,13,15,16,15,14,16,14,14,13,13,13,13,13,14,15,15,16,16,15,14,14,14,14,12,13,13,13,12,12,12,11,10,11,10,10,9,9,9,10,10,9,9,10,9,9,9,9,9,10,10,10,10,10,10,10,10,10,8,8,7,7,6,6,5,6,6,5,5,6,6,5,5,6,5,5,6,6,5,5,6,6,5,6,6,6,6,6,7,7,7,6,7,8,8,8,8,8,8,8,7,5,6,6,6,5,4,5,5,5,5,6,5,6,6,7,7,6,6,6,7,6,6,6,6,6,6,6,6,5,5,6,6,5,6,6,5,6,6,6,5,6,6,6,6,6,7,7,7,7,7,7,7,8,8,7,7,8,7,7,7,7,7,7,8,8,8,7,7,8,8,7,8,8,8,8,8,8,8,8,8,8,8,7,7,8,7,7,7,6,6,6,6,6,6,5,5,5,5,5,5,5,5,6,6,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,8,7,7,8,8,8,8,9,8,9,9,9,9,9,9,9,9,9,9,9,10,9,9,9,9,9,8,9,9,10,9,9,9,9,8,8,8,8,9,9,8,9,9,8,10,9,10,10,10,10,10,10,10,10,11,11,11,10,11,11,10,10,11,10,10,10,10,10,10,10,9,9,10,10,11,10,11,10,10,11,10,10,11,11,10,11,11,11,10,10,10,10,10,9,10,9,9,9,9,9,9,9,8,9,8,9,8,7,8,8,7,7,7,9,9,10,11,12,13,14,13,14,16,17,19,19,19,22,22,22,20,21,22,21,24,22,23,24,23,25,25,26,25,26,24,26,27,25,26,26,27,26,23,26,27,27,26,27,26,25,26,27,25,23,25,26],[28,28,28,28,28,28,28,29,28,27,27,26,27,26,26,26,27,27,27,28,28,27,28,28,27,27,27,27,27,27,27,28,28,28,27,28,27,27,27,27,28,26,26,27,27,27,25,25,26,25,24,23,24,23,22,23,21,21,20,19,17,16,15,14,12,12,12,11,10,10,9,9,9,8,7,8,7,6,7,7,7,6,7,6,6,6,7,7,7,6,6,6,5,5,5,5,4,5,5,4,3,5,4,5,4,5,5,5,5,6,6,6,5,5,6,6,6,5,5,5,5,5,4,5,4,4,3,3,2,2,2,2,1,0,1,2,2,3,5,3,2,4,3,2,3,4,3,3,4,4,4,4,5,5,5,6,6,6,6,6,6,7,7,6,6,6,5,5,5,6,5,5,5,5,5,4,5,5,3,4,3,4,4,3,4,4,3,3,4,4,3,4,5,5,5,6,7,7,6,7,8,8,8,8,8,9,8,7,7,6,7,7,5,6,5,5,5,5,4,6,5,4,4,5,5,6,6,6,6,6,6,7,7,7,7,7,7,6,7,7,6,7,6,6,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,7,7,7,7,7,6,7,7,5,7,7,6,6,6,7,6,8,8,7,7,7,8,8,8,8,9,8,9,10,9,9,11,10,10,10,12,11,11,10,11,11,11,11,11,11,12,11,11,10,11,12,11,10,11,12,12,14,14,14,16,17,17,18,20,19,19,20,21,20,20,22,21,22,23,23,25,25,25,26,26,28,26,27,25,25,26,25,25,26,26,25,26,26,26,28,28,28,27,28,28,29,28,28,28,28,28,28,28,28,29,29,29,28,28,28,28,28,28,28,27,28,28,27,28,28,28,28,26,28,28,27,26,25,24,24,23,22,20,20,18,17,18,16,14,13,12,12,14,13,12,13,13,14,13,13,13,13,14,13,14,15,15,14,15,18,16,16,17,18,17,17,15,15,14,14,14,14,15,15,17,17,18,18,19,17,17,18,16,14,14,15,15,14,14,13,13,13,12,13,12,12,11,12,12,12,12,12,12,12,12,12,12,12,11,12,12,12,12,12,11,10,12,10,11,10,9,9,8,8,9,8,8,7,8,8,7,8,9,8,7,8,9,8,8,9,9,8,8,9,8,9,9,9,9,9,9,8,9,9,10,10,10,10,10,9,8,8,8,8,7,6,7,8,7,7,8,9,8,9,9,9,9,9,9,9,8,9,8,9,8,8,8,8,7,8,8,8,8,8,8,8,9,8,8,8,8,8,8,9,9,9,9,10,10,9,9,10,11,11,9,10,10,10,9,10,10,9,10,10,11,10,9,9,10,10,10,10,10,10,10,10,9,10,10,10,10,9,9,9,9,10,8,9,7,8,7,7,8,7,7,6,7,7,6,6,7,8,8,8,9,9,9,10,9,9,9,9,9,9,10,9,9,9,10,9,9,8,8,9,9,9,9,10,9,10,10,9,10,10,10,11,11,11,11,11,11,11,11,12,12,11,11,11,12,12,12,11,11,12,12,11,11,11,12,11,11,11,10,10,10,10,10,10,11,10,10,11,11,11,11,11,11,12,12,12,12,12,12,11,13,13,14,13,13,13,13,12,13,13,13,12,13,14,13,12,12,12,13,11,14,13,13,13,11,14,12,12,13,12,13,13,13,13,12,12,14,12,11,12,12,12,11,11,12,11,11,11,11,10,11,11,10,10,10,11,10,10,10,11,11,11,12,13,14,14,14,15,17,17,19,20,20,22,23,21,21,22,23,22,24,23,23,23,24,26,25,26,25,27,25,26,27,27,28,26,27,27,26,25,27,27,26,27,25,26,26,27,26,24,26,26],[27,27,27,27,27,28,28,27,27,26,25,24,26,25,25,25,26,26,25,26,27,26,26,26,26,26,26,26,26,26,25,27,27,27,26,27,26,26,27,26,27,25,26,25,26,25,24,24,25,23,22,22,22,21,20,22,20,19,20,20,18,17,16,16,15,14,13,12,12,13,12,11,11,10,10,10,9,9,9,9,11,9,10,10,9,9,11,10,9,9,9,8,8,7,7,7,7,7,7,6,6,7,8,5,6,6,7,6,6,7,7,7,7,6,8,8,7,7,6,6,6,6,5,5,5,4,4,4,3,4,3,2,2,1,0,1,3,3,6,5,3,6,7,3,6,6,5,4,6,8,6,6,7,8,6,9,9,9,8,9,9,9,9,9,9,8,8,8,8,8,7,6,5,6,5,4,5,5,4,4,3,4,5,4,4,4,4,4,4,5,4,5,5,6,5,7,7,6,6,7,7,8,9,9,9,9,9,9,8,7,7,6,6,7,5,5,6,6,5,6,7,5,5,8,7,5,8,9,8,7,8,8,9,9,9,9,8,8,8,8,7,7,7,7,7,8,7,6,7,8,8,6,8,8,8,6,6,7,7,7,7,6,8,10,8,7,10,8,8,10,10,8,10,9,11,9,8,7,8,7,6,7,9,8,7,7,10,8,9,9,9,7,9,9,8,9,10,10,9,10,10,10,11,11,11,10,11,12,11,12,12,13,12,13,13,13,14,14,14,14,14,14,13,13,12,13,14,13,12,13,14,14,15,16,17,18,18,18,18,19,20,19,20,21,20,19,21,22,22,23,23,24,24,24,24,25,26,24,25,24,23,25,25,23,25,25,26,25,26,25,27,26,27,26,27,28,27,28,27,27,28,27,27,27,27,28,28,27,28,27,28,28,27,27,27,28,28,27,27,28,27,27,28,26,27,27,26,25,25,25,22,23,21,20,19,18,17,17,16,16,16,14,14,15,15,14,14,15,16,15,15,16,15,17,17,16,17,17,16,18,18,18,17,19,18,18,19,18,17,17,17,16,16,18,18,18,18,19,19,19,18,17,18,17,16,18,17,17,16,16,15,16,15,14,15,16,15,13,13,15,14,13,13,14,13,13,14,14,13,12,14,13,13,13,14,11,12,13,11,12,10,10,11,9,8,9,9,9,8,9,10,9,9,10,11,10,10,9,10,10,10,10,10,10,10,10,10,10,10,11,10,11,10,10,11,11,11,12,11,11,10,10,9,10,9,9,9,11,10,10,9,11,10,10,12,11,11,11,12,11,10,10,11,11,10,10,11,10,11,10,10,10,11,10,11,9,10,11,10,10,11,10,10,10,12,11,10,11,11,11,11,11,12,13,12,11,12,13,12,10,12,11,12,11,12,11,11,10,12,13,12,11,12,12,11,12,11,11,12,11,12,12,12,12,12,12,13,11,10,10,10,10,10,10,10,10,8,9,11,9,9,9,12,11,9,12,10,11,11,12,11,10,11,11,11,11,11,11,12,12,12,11,10,10,11,11,11,11,12,10,11,12,11,12,12,12,13,13,13,13,13,14,13,14,13,14,14,13,13,14,14,14,12,13,15,13,13,13,13,13,13,13,13,13,12,13,13,12,12,13,13,12,14,14,13,14,13,14,15,13,15,14,14,14,14,14,15,15,15,14,15,14,15,15,14,15,14,15,15,15,13,14,16,16,14,17,14,14,15,15,16,14,15,15,14,15,15,16,14,15,13,15,14,13,13,14,15,13,13,14,12,12,12,12,12,12,12,12,11,12,11,10,11,11,12,12,12,12,13,15,15,13,16,15,18,17,18,19,21,21,21,20,22,22,20,24,22,23,24,23,25,25,25,25,26,23,26,27,25,27,25,26,26,25,25,26,25,25,26,25,25,26,26,24,23,24,25],[28,28,28,28,28,28,28,28,27,26,27,25,27,26,26,26,27,27,26,27,27,26,26,27,27,26,27,27,27,27,26,27,27,28,26,28,27,27,27,26,27,26,26,26,26,26,25,24,25,24,24,25,24,23,23,23,22,22,21,21,19,19,17,16,15,14,14,14,12,13,11,12,11,11,11,10,9,10,9,10,9,9,10,9,10,10,10,9,8,8,9,7,10,9,8,7,10,8,8,7,12,8,8,6,8,8,7,6,8,8,8,8,8,9,9,8,8,8,8,7,6,7,7,7,7,6,4,4,6,4,3,4,5,2,1,0,1,2,3,3,2,4,4,4,4,6,4,5,9,8,6,9,9,9,9,11,10,9,9,9,9,10,9,9,11,9,8,10,10,9,9,9,8,8,8,7,7,7,5,5,5,6,6,5,5,6,5,4,6,7,5,5,6,7,6,8,6,6,7,8,7,7,7,8,9,8,8,8,7,6,6,6,5,5,5,6,6,6,6,6,7,8,7,9,9,9,9,10,10,9,9,10,10,10,10,10,10,9,9,9,9,9,9,8,9,9,9,9,9,9,10,9,8,8,9,7,8,8,8,8,7,9,10,9,8,8,11,9,9,10,8,9,9,8,8,8,8,8,7,7,6,7,8,8,7,8,10,11,9,9,10,10,10,11,10,11,10,11,10,11,11,11,11,13,12,11,12,13,12,12,14,14,13,13,14,13,15,14,14,15,14,14,15,14,12,13,14,13,12,14,15,14,14,15,16,17,18,19,21,21,20,20,21,22,20,21,23,23,23,24,24,25,25,24,26,26,26,25,26,26,24,25,25,25,26,26,26,27,26,26,27,28,28,27,27,28,28,28,28,28,28,28,28,27,28,29,28,28,28,28,28,27,28,28,27,28,28,28,28,28,28,28,29,27,28,27,27,27,26,25,24,23,22,22,22,20,18,20,18,16,16,15,14,17,15,16,17,16,18,16,16,17,16,18,17,17,18,18,17,19,19,19,18,20,18,18,19,19,18,16,17,17,19,18,19,20,20,19,20,19,18,18,20,18,16,17,18,17,17,17,17,16,17,15,16,16,13,14,13,14,15,15,14,14,14,14,14,13,15,15,14,15,14,14,13,13,12,14,12,12,12,11,12,10,10,11,11,10,10,11,11,10,9,11,11,9,11,10,9,11,10,10,9,12,10,8,11,10,10,9,10,10,10,11,10,11,11,11,12,10,10,8,8,9,9,8,8,10,9,8,8,9,9,10,10,10,11,10,10,10,11,10,11,9,10,10,9,10,11,10,9,10,10,10,10,9,12,11,10,12,12,11,11,12,12,12,11,12,13,12,13,13,13,14,14,12,13,13,13,12,12,13,13,12,12,13,11,12,13,11,12,12,12,11,11,12,12,11,12,12,12,11,12,12,12,12,12,11,12,11,10,10,9,12,10,12,10,9,12,10,10,9,10,10,10,10,11,11,11,11,11,11,10,11,11,12,12,12,11,12,11,11,11,10,11,12,12,12,11,12,12,12,12,13,12,13,13,13,13,13,12,14,14,13,14,14,13,13,14,14,14,14,13,13,14,13,12,13,13,13,12,13,13,13,13,13,12,12,12,13,13,13,13,13,14,14,13,14,15,14,15,14,15,14,13,14,15,14,15,15,16,17,15,15,15,14,14,15,15,15,14,15,15,16,14,18,14,16,15,14,17,14,15,15,15,16,15,16,16,15,14,15,14,14,14,13,13,12,14,13,14,14,13,13,13,14,13,14,13,13,14,13,14,14,13,13,14,14,16,15,16,17,18,18,20,20,22,22,24,23,24,22,22,23,24,25,25,25,25,25,27,26,26,26,26,27,26,27,26,28,26,26,27,27,26,27,27,27,27,26,26,26,27,26,25,26,26],[28,28,28,28,28,28,28,28,28,27,26,26,26,27,26,27,26,27,27,27,27,27,27,27,27,26,26,27,27,27,27,27,27,28,26,27,27,25,27,26,27,25,26,25,26,26,25,23,24,23,22,22,23,21,20,21,21,19,19,20,18,16,15,15,12,12,12,10,10,9,9,9,8,7,6,7,7,6,6,6,6,5,6,5,5,5,5,5,5,4,4,5,3,4,4,4,4,4,4,4,5,4,4,4,5,4,5,5,5,5,6,6,5,6,6,6,6,6,7,6,6,6,5,5,5,5,4,4,4,4,3,4,3,2,2,1,0,1,2,2,2,2,2,4,2,3,4,4,4,5,4,5,5,5,5,6,5,6,6,7,7,6,7,7,6,6,7,7,5,7,7,6,5,7,6,5,5,6,5,4,4,5,4,5,4,5,4,3,4,5,3,3,4,5,4,6,5,4,6,6,6,6,6,6,6,7,6,5,5,4,4,4,3,3,3,3,3,3,3,4,4,4,5,5,5,6,6,6,6,7,6,7,7,8,8,8,6,7,7,7,7,7,7,6,7,7,6,7,7,7,7,6,7,7,7,6,5,6,6,6,7,6,7,7,7,6,7,6,6,6,6,6,6,6,6,5,6,5,5,4,5,4,5,6,5,5,6,5,6,6,7,6,7,7,7,7,8,8,7,7,8,9,9,9,10,9,10,10,10,10,10,12,11,10,11,12,13,13,12,12,13,13,11,11,10,11,12,11,10,11,12,12,12,13,14,15,15,16,17,18,18,18,19,20,19,20,22,22,22,23,22,24,24,25,25,26,25,26,25,25,25,25,25,25,25,25,25,25,26,25,27,27,28,27,26,28,28,27,27,27,28,28,28,28,27,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,27,28,28,28,27,27,26,25,26,26,23,22,21,21,19,18,19,16,15,15,14,13,13,13,14,12,14,14,14,14,15,15,16,14,16,17,16,15,18,18,17,17,19,19,18,18,18,16,15,16,16,16,16,17,18,18,18,20,19,18,17,18,17,16,16,16,16,16,16,15,15,14,13,14,13,13,11,11,13,12,12,12,12,11,11,13,13,11,11,13,12,11,13,12,11,10,12,10,10,9,9,9,8,7,8,8,8,7,8,8,7,7,8,8,8,8,7,7,7,8,7,6,7,8,7,6,7,7,6,7,7,7,8,7,8,9,9,9,8,7,6,6,6,6,5,4,6,5,6,5,6,7,7,8,8,7,7,7,6,7,7,6,6,7,6,6,7,6,5,6,7,6,6,7,7,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,10,12,10,10,10,11,10,9,10,9,9,9,10,10,9,9,9,10,8,8,9,9,8,8,9,9,8,9,9,9,9,8,9,9,8,7,6,7,6,6,7,6,6,6,6,6,6,5,6,6,7,7,7,8,8,8,8,10,8,7,9,9,8,8,9,9,9,9,8,8,6,7,8,8,7,9,9,8,8,9,9,10,9,10,10,10,10,11,11,10,12,10,10,11,12,10,11,12,11,11,11,10,12,11,9,11,11,11,10,11,10,9,11,10,11,10,9,11,11,10,11,13,12,11,11,13,12,11,12,12,12,12,11,13,14,13,13,13,13,13,13,14,13,13,13,13,13,14,12,13,13,13,12,14,13,13,13,13,14,13,13,13,13,14,13,14,13,13,11,12,13,12,11,12,12,11,11,12,11,10,10,11,10,10,11,10,10,9,9,9,9,9,9,10,11,11,13,14,15,13,16,16,19,17,20,20,23,23,23,22,22,23,22,23,23,23,26,24,25,25,26,26,26,25,26,27,26,26,26,26,27,25,26,26,27,26,27,25,25,27,27,26,24,26,26],[29,29,29,29,29,29,29,29,29,28,28,27,28,27,28,27,28,28,27,28,27,27,28,28,26,27,28,27,28,28,26,28,28,29,27,28,27,27,28,27,28,27,27,27,27,26,25,24,25,23,22,23,23,22,20,22,20,19,19,19,17,16,13,12,10,10,9,8,8,7,7,6,6,5,5,5,5,4,4,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,3,2,2,2,3,3,3,3,4,4,4,4,5,5,4,4,4,4,4,5,4,5,5,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,4,3,3,4,4,4,4,5,4,5,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,3,3,3,3,4,3,3,3,3,2,3,3,2,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,4,4,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,4,5,4,5,5,5,5,5,5,6,6,5,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,5,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,5,4,5,5,5,5,5,6,5,6,6,6,6,6,7,7,7,7,8,7,8,8,9,8,8,9,9,10,9,9,10,9,9,8,8,8,9,8,8,9,9,10,10,10,12,12,13,13,15,15,17,16,18,20,20,18,21,22,22,22,24,25,25,26,27,27,27,26,27,24,26,27,25,25,26,26,26,26,26,26,28,28,28,27,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,28,29,28,28,29,29,29,29,28,28,28,27,27,26,25,24,23,22,21,21,18,17,17,14,13,12,10,9,10,10,10,9,10,10,11,11,11,11,12,12,12,13,13,13,14,15,14,14,16,15,15,15,14,14,13,12,13,13,14,14,15,15,16,15,15,15,14,15,14,13,13,13,13,13,12,11,11,10,10,9,10,9,8,9,9,9,8,8,9,8,9,9,10,9,9,10,10,10,10,10,9,9,9,8,8,7,7,6,6,6,6,6,6,5,6,6,5,5,6,6,5,6,6,5,5,6,6,5,5,5,5,5,5,6,5,5,5,6,6,6,7,7,7,7,7,6,5,4,4,5,4,4,4,4,4,4,5,5,5,6,5,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,5,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,6,6,7,7,6,7,6,6,7,7,7,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,6,8,6,6,7,7,7,7,7,7,7,6,6,6,5,5,6,6,6,6,6,6,6,7,6,7,7,7,7,8,7,7,7,8,8,8,8,8,8,8,8,8,8,9,7,8,8,7,7,8,7,8,8,7,7,7,7,7,7,7,7,7,7,7,8,8,7,8,8,8,8,8,9,9,8,9,9,10,10,10,10,9,10,9,10,9,9,10,10,9,9,10,9,8,9,9,9,9,10,10,9,10,10,10,10,10,10,10,11,10,10,9,9,9,10,8,9,9,8,8,9,9,8,9,8,8,8,8,8,8,7,8,8,7,7,7,9,9,10,10,11,13,13,13,14,15,17,18,20,19,22,22,21,20,22,23,22,24,23,23,26,24,25,25,26,26,25,24,26,26,25,27,25,26,26,24,25,27,26,27,26,27,26,27,27,26,25,27,26],[29,29,28,28,28,29,28,28,28,27,27,26,27,26,26,27,27,28,27,27,27,26,27,27,26,26,27,26,27,27,26,27,28,28,26,27,27,26,28,26,27,26,27,25,26,25,23,24,24,22,21,22,23,20,19,21,19,17,18,19,16,14,13,11,10,9,9,8,7,7,7,7,6,6,5,5,5,5,5,5,5,4,4,4,4,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,5,4,5,4,4,4,4,3,4,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,5,5,4,5,5,5,4,5,4,4,4,3,3,3,3,2,2,3,3,2,3,3,3,3,3,4,4,4,5,5,4,5,5,5,5,6,6,6,5,5,6,5,4,5,5,4,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,4,4,5,5,5,4,5,5,5,5,5,4,4,5,4,4,4,4,4,3,4,4,4,4,4,4,5,4,4,4,5,4,5,5,6,5,5,6,5,6,6,7,6,7,7,7,7,7,7,7,8,8,8,8,8,9,10,10,9,9,9,9,9,8,8,8,9,8,9,9,9,10,10,10,11,13,14,13,15,15,17,15,17,18,18,18,21,21,21,21,21,22,23,24,24,25,25,25,25,24,24,24,24,24,24,24,24,25,25,25,26,26,27,26,26,27,27,27,27,28,27,27,27,27,27,28,28,27,27,27,28,27,27,27,28,26,28,27,27,27,27,27,28,27,26,26,26,25,24,24,23,22,20,19,19,17,16,16,13,12,11,11,10,11,10,11,10,11,11,11,11,12,12,12,13,12,14,13,13,14,15,14,15,16,17,15,16,15,14,13,14,14,13,14,14,16,16,15,16,16,15,15,16,13,13,13,13,13,13,13,11,11,11,10,10,10,9,9,9,9,9,9,9,9,8,9,10,9,9,9,10,10,10,10,10,10,9,9,8,7,7,7,6,6,5,6,6,5,5,6,6,5,5,6,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,7,7,8,7,7,6,5,5,5,5,4,4,4,4,4,4,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,7,6,7,7,7,7,7,7,8,7,7,7,7,7,7,7,7,6,7,7,6,6,7,7,7,7,6,7,7,6,6,7,7,7,7,7,7,7,7,7,7,6,6,5,5,5,5,5,4,5,4,4,5,4,4,4,4,5,5,5,6,6,6,7,7,6,6,7,7,8,7,7,7,7,7,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,8,7,8,8,8,8,8,8,8,8,8,7,8,9,8,8,8,8,8,8,7,8,7,8,8,8,8,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,8,9,9,9,9,9,11,10,10,10,10,10,10,10,10,9,10,9,9,10,10,9,9,10,10,9,10,10,10,10,10,11,10,10,10,10,10,11,11,9,10,9,10,10,9,9,9,9,8,8,9,9,7,8,8,8,7,8,8,7,7,8,7,7,7,8,8,10,10,12,13,13,12,14,15,16,17,20,18,22,22,22,22,22,22,21,23,23,23,26,24,26,24,26,25,26,24,27,26,25,27,26,25,26,25,25,25,26,26,26,26,25,26,26,25,25,26,26],[28,29,28,28,28,28,28,27,28,26,26,25,25,26,25,25,25,26,25,26,25,26,26,25,26,25,25,26,25,25,25,25,26,26,25,26,25,25,26,25,26,25,24,24,25,24,22,22,22,21,20,20,20,20,18,19,18,17,17,17,15,14,12,11,9,8,8,7,7,6,6,6,5,5,4,4,4,4,4,4,4,3,4,3,3,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,4,4,4,4,4,4,5,4,4,4,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,4,4,4,4,3,4,4,3,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,7,8,7,7,8,7,7,8,8,8,9,9,11,12,13,12,13,15,15,14,15,17,16,16,18,18,19,20,19,21,21,21,22,23,23,23,24,23,22,23,25,23,22,23,23,25,24,23,25,25,27,26,25,26,26,26,27,26,26,26,26,26,27,28,28,28,27,27,27,27,26,27,26,26,27,25,27,27,26,26,27,27,26,25,25,25,24,22,21,20,19,18,18,16,14,14,12,11,10,9,9,9,9,9,9,9,9,10,10,10,10,11,11,11,12,11,11,13,13,12,13,14,14,13,13,13,13,12,12,11,12,12,12,14,14,15,14,14,13,12,14,12,12,12,12,12,11,11,10,10,9,9,9,8,8,7,7,8,7,7,8,8,7,7,8,8,7,8,9,9,8,9,9,8,8,8,7,6,6,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,4,5,5,5,5,5,4,5,5,5,5,5,5,5,6,6,6,7,7,7,6,5,5,5,5,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,4,4,4,4,4,4,4,3,4,3,3,4,4,4,4,5,5,6,6,6,7,6,6,7,6,7,6,6,6,6,6,6,5,5,5,5,5,5,6,5,5,6,6,5,6,6,6,6,7,7,7,7,7,7,7,7,7,8,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,6,7,7,7,7,7,8,7,7,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,8,9,9,8,9,9,8,8,8,8,8,9,9,10,9,9,10,9,9,9,9,9,9,10,9,9,8,9,9,8,8,8,8,7,7,8,7,7,7,7,7,6,6,6,6,6,6,6,6,6,7,8,9,9,11,12,12,11,13,13,16,16,18,18,21,21,21,20,20,21,20,24,22,22,25,24,25,24,26,26,25,23,26,25,25,27,25,25,26,25,25,25,24,24,24,25,24,26,26,23,24,24,25],[29,29,29,29,29,29,29,28,29,28,27,27,27,27,27,27,27,27,27,28,26,27,27,26,27,27,26,27,27,27,27,28,27,28,27,28,26,27,27,27,27,27,26,26,26,26,24,23,24,23,22,21,22,22,19,20,20,19,17,18,15,13,12,10,9,8,7,6,6,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,3,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,3,4,4,5,4,4,4,4,4,4,4,3,3,2,3,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,6,7,7,7,6,7,8,7,6,7,6,7,7,7,6,7,7,7,8,8,9,11,12,12,13,13,15,14,17,18,17,17,20,20,21,21,21,22,23,23,24,25,26,25,26,25,22,25,23,23,25,24,24,25,25,26,26,26,26,26,27,27,27,27,27,27,27,28,27,27,28,28,28,28,28,27,28,28,28,28,28,26,28,27,27,28,28,27,28,27,27,27,26,25,24,24,22,21,20,18,19,16,14,13,12,11,10,8,8,8,8,8,7,8,8,8,9,8,9,9,10,10,11,10,11,11,12,11,11,12,12,12,12,11,11,11,11,11,10,11,11,11,11,12,12,11,11,10,11,11,10,10,10,10,9,9,9,9,8,8,7,7,6,7,6,7,7,6,6,7,6,6,7,7,7,7,8,8,8,8,8,8,7,7,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,5,5,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,5,5,5,6,5,5,6,5,5,5,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,6,6,7,6,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,6,5,5,6,6,6,6,6,6,6,6,7,7,6,7,8,7,7,7,7,8,8,8,8,8,7,8,8,7,8,7,7,8,8,7,7,7,7,7,8,8,8,7,8,8,7,8,8,8,8,8,8,8,8,7,8,8,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,5,5,6,7,7,9,9,10,11,12,11,13,13,15,18,17,17,20,19,20,19,20,22,20,23,22,23,24,21,25,24,25,24,25,23,26,25,24,26,25,25,24,23,24,25,25,24,25,24,25,24,25,24,23,25,24],[29,29,29,29,29,29,29,28,29,28,28,28,28,27,28,28,27,28,27,28,27,27,28,27,27,27,27,27,28,27,26,28,28,28,27,28,27,28,27,27,28,27,26,26,26,25,24,23,24,22,21,21,23,20,18,20,18,18,18,17,15,13,11,9,8,7,6,5,5,5,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,4,3,4,4,4,3,3,3,2,2,2,2,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,9,11,11,11,13,13,15,13,16,16,16,16,18,19,19,19,19,22,23,22,24,25,26,25,25,24,23,24,24,24,24,25,24,25,24,25,26,27,27,26,27,27,27,28,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,27,28,27,28,27,27,28,27,28,28,26,27,26,25,25,24,23,22,21,20,18,18,16,14,13,11,10,8,8,7,7,7,7,7,7,7,8,8,8,8,8,9,9,10,9,9,10,12,10,11,12,12,12,12,11,11,10,10,10,10,10,11,12,12,12,12,12,10,10,11,10,9,9,9,9,8,8,8,8,7,7,7,6,6,6,6,6,6,5,6,6,6,6,6,6,6,7,7,7,7,8,8,7,7,7,5,5,5,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,3,3,4,4,3,3,4,3,3,4,4,3,3,4,4,5,5,5,6,6,6,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,4,4,5,4,4,5,4,4,4,5,4,5,4,4,5,4,4,4,5,5,4,5,5,5,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,4,4,5,5,5,5,5,5,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,5,5,6,6,6,6,6,6,6,6,6,5,5,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,6,6,6,8,7,7,7,7,7,6,7,6,6,7,7,6,6,7,6,6,6,6,6,7,7,7,7,7,7,7,8,7,7,7,8,8,7,7,7,7,7,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,5,5,5,5,4,5,6,7,8,9,10,11,12,11,13,13,15,17,19,19,21,21,22,20,21,22,21,24,22,23,24,23,26,24,26,25,27,24,26,26,26,27,25,26,26,24,25,26,26,26,26,26,25,26,26,25,25,25,25],[29,28,28,28,28,28,28,27,28,27,26,25,26,25,26,26,26,26,26,26,25,26,26,25,25,26,26,26,26,25,25,26,26,27,25,27,26,26,26,26,27,25,25,25,24,24,22,22,22,20,20,20,21,19,17,19,17,16,17,16,13,12,11,9,8,7,6,5,5,5,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,2,2,2,2,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,8,10,10,10,12,13,13,12,14,15,14,14,16,17,17,19,18,20,21,20,22,23,23,23,23,23,20,22,22,22,22,22,23,23,23,23,24,25,27,24,25,26,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,26,26,26,25,26,25,25,27,26,26,27,26,26,25,24,23,22,21,20,19,17,15,17,14,13,12,10,9,8,7,7,7,7,7,6,7,7,7,8,8,8,8,9,9,10,9,9,10,10,10,10,11,12,11,11,11,10,9,9,9,9,10,10,11,11,11,11,11,10,10,10,9,9,9,9,9,8,8,8,7,7,7,7,6,6,5,6,6,6,6,6,6,5,6,6,6,6,6,7,7,7,7,7,7,6,6,5,5,5,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,6,6,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,4,5,4,4,4,5,4,4,4,5,5,5,4,5,5,4,4,5,5,4,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,3,3,3,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,4,4,4,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,6,5,6,5,5,6,6,5,6,6,6,5,5,5,5,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,6,7,7,6,7,7,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,8,6,7,6,7,7,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,6,7,8,9,10,11,10,11,12,14,15,17,17,20,20,20,19,20,19,20,21,21,21,23,22,24,23,24,24,24,23,25,25,24,27,24,24,25,23,23,24,24,24,23,24,23,25,24,23,22,24,24],[29,28,28,29,28,29,28,27,28,27,26,27,26,26,26,26,26,25,27,26,25,27,26,25,26,27,25,26,26,25,25,26,26,27,25,26,25,26,26,25,26,26,25,25,25,25,24,22,23,22,22,20,21,20,19,19,18,18,17,16,14,13,11,9,8,7,6,5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,3,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,6,6,5,5,5,5,5,5,5,6,6,6,7,8,9,10,12,11,13,14,14,13,15,16,15,15,17,17,19,20,18,22,23,21,23,25,24,24,25,23,23,23,23,24,23,24,24,23,24,23,25,25,26,24,26,26,26,26,26,26,26,27,26,27,26,27,27,27,27,26,27,27,27,27,27,26,27,26,26,27,26,27,27,25,26,25,24,24,23,23,20,19,19,16,17,15,13,12,10,9,8,7,6,6,6,6,6,7,6,7,7,7,7,8,8,8,9,8,9,10,10,10,10,11,11,10,11,10,10,9,9,9,8,9,10,10,11,11,11,10,10,10,10,9,9,8,8,8,7,7,7,7,6,6,6,6,5,5,5,6,5,4,5,6,5,5,6,6,5,6,6,7,7,8,7,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,6,6,5,4,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,5,5,4,4,5,5,5,5,5,4,4,4,3,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,4,5,6,5,5,6,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,7,7,7,7,6,7,7,6,7,6,6,6,6,6,6,6,5,6,6,7,7,6,7,7,7,7,7,7,7,7,7,6,7,6,7,7,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,4,5,4,4,4,4,5,6,7,8,9,11,11,10,12,13,15,17,18,18,20,21,21,19,19,20,21,23,21,22,23,22,24,23,25,24,25,23,26,25,24,26,25,24,25,24,25,25,24,24,24,25,24,25,24,23,23,23,23],[29,28,28,29,28,29,28,28,28,28,27,27,27,26,27,26,26,26,26,27,26,27,27,26,26,27,26,27,27,25,26,27,26,28,26,27,26,27,27,26,26,26,25,26,25,25,23,22,23,22,21,21,22,19,19,20,19,17,17,17,14,13,11,9,7,6,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,1,1,2,1,1,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,5,5,4,5,5,5,4,5,5,6,6,7,7,9,10,10,12,13,14,13,14,15,16,15,17,18,19,19,19,22,23,22,23,24,24,24,25,23,22,24,23,23,23,23,24,23,24,24,25,25,27,25,26,26,26,26,26,26,26,27,26,26,26,27,27,27,27,27,28,27,27,27,28,27,27,27,26,27,27,27,27,25,26,25,24,23,22,21,20,19,18,16,17,14,12,11,10,8,7,6,6,5,6,6,5,6,5,6,7,6,6,7,7,7,8,8,8,8,8,9,9,10,10,9,10,9,9,9,8,8,8,9,9,9,9,10,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,7,7,6,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,5,5,5,5,4,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,4,3,4,3,3,3,4,4,3,3,3,4,4,3,3,4,4,3,4,4,3,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,5,5,5,5,4,4,5,5,4,5,5,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,5,6,5,5,6,6,6,6,6,6,6,5,6,6,5,6,6,5,5,6,5,5,5,5,6,5,6,7,6,6,6,6,7,6,6,6,7,7,6,6,5,6,6,5,5,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,6,7,7,9,10,10,10,11,12,13,15,16,16,19,19,19,17,18,19,19,23,19,22,21,20,24,23,23,24,25,22,24,24,24,24,23,24,24,22,23,25,24,23,25,24,22,24,25,21,21,24,23],[29,29,28,29,29,29,29,28,29,28,27,27,27,27,27,28,27,28,28,28,27,28,28,27,28,28,28,28,29,27,27,28,28,28,28,28,28,28,28,28,28,26,26,27,26,26,23,23,24,21,21,21,22,19,19,19,17,17,18,17,13,12,10,8,6,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,1,2,2,2,2,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,5,5,6,6,7,8,9,9,11,11,14,12,14,15,15,14,16,17,18,19,19,21,22,21,23,23,24,23,24,22,21,23,22,22,23,23,23,22,23,24,25,24,26,24,26,27,27,27,27,27,27,27,27,26,27,28,27,28,27,27,28,28,27,27,27,25,26,27,26,28,27,27,28,25,25,26,24,23,23,20,20,19,17,16,15,13,11,10,8,8,6,6,5,5,5,5,5,5,6,6,6,6,6,7,7,7,8,7,8,9,8,9,9,10,9,9,10,9,9,8,8,8,8,8,8,9,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,6,5,5,5,4,4,4,5,4,4,5,5,4,4,5,5,5,5,5,6,6,6,6,6,5,5,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,5,5,4,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,5,5,6,5,5,5,5,4,5,5,5,5,5,5,5,4,5,5,5,5,6,5,5,5,5,6,5,6,5,6,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,5,5,6,7,8,9,10,9,11,11,13,14,16,17,19,20,19,18,19,18,19,21,20,21,22,20,24,23,26,24,25,24,25,25,25,27,24,25,25,23,24,26,25,24,24,24,23,25,25,22,21,24,25],[28,27,27,28,27,28,28,27,28,27,25,26,26,25,25,26,25,25,26,26,25,26,26,25,26,26,25,26,26,24,25,26,26,27,26,27,26,26,26,26,26,26,25,25,25,25,24,22,23,22,22,20,21,19,18,18,17,17,16,16,13,12,10,8,7,6,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,3,3,2,2,1,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,6,6,6,7,9,10,10,11,13,13,12,14,14,14,14,16,16,18,18,17,20,22,21,21,23,22,23,24,22,21,23,22,22,22,22,23,23,23,22,24,24,25,24,25,26,26,26,25,26,26,26,26,26,26,26,27,26,26,26,27,27,27,26,27,25,26,26,26,27,26,26,27,24,25,25,24,23,21,21,19,18,17,15,15,13,11,11,9,8,7,6,6,5,6,5,5,6,6,6,6,6,6,7,7,7,8,7,8,8,8,8,9,9,9,9,9,9,8,8,8,8,7,8,8,9,9,9,9,9,9,8,8,8,8,7,7,7,6,6,6,6,5,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,4,4,3,3,2,3,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,3,4,4,3,3,4,3,3,4,4,3,4,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,4,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,5,5,4,5,5,5,5,5,5,4,5,4,5,5,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,5,5,5,6,6,5,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,6,6,6,6,6,6,6,6,6,5,6,6,6,6,5,5,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,5,6,7,7,8,10,10,9,11,12,13,15,16,16,19,20,18,18,18,19,18,22,20,21,21,19,22,22,23,22,23,21,24,23,22,25,23,23,22,23,24,24,23,23,23,23,21,22,23,21,21,22,23],[28,28,28,29,28,28,28,27,28,27,26,27,26,26,26,26,25,25,26,26,25,27,26,24,26,26,25,26,26,24,25,26,25,27,25,26,25,26,26,25,26,26,25,25,24,25,23,22,22,21,21,20,21,19,18,19,18,17,16,16,13,12,10,7,6,5,5,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,3,4,4,4,4,4,4,5,5,6,7,8,10,10,11,12,13,12,14,15,15,14,15,16,18,17,18,20,21,20,22,23,24,24,24,22,21,23,23,22,21,23,23,23,23,23,23,24,25,24,24,25,25,26,25,25,25,26,26,25,26,26,26,26,26,26,27,26,26,26,26,25,26,26,25,26,26,26,26,23,25,24,23,23,22,20,18,18,16,15,16,14,11,11,9,8,6,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,8,9,9,9,9,8,8,7,7,7,7,7,8,8,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,6,5,5,4,4,4,4,4,4,4,4,4,5,4,4,5,4,4,5,5,5,5,6,6,6,5,5,4,4,3,3,3,3,2,2,3,2,2,3,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,5,5,4,4,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,4,5,5,5,6,5,5,5,5,6,5,6,5,6,6,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,5,5,7,7,9,9,10,9,11,11,13,14,16,16,18,19,18,17,19,19,19,22,19,21,22,21,24,23,24,23,24,23,24,24,23,25,23,23,23,23,23,24,24,24,24,23,22,24,23,22,21,23,23],[28,28,28,29,28,29,28,28,29,28,27,27,27,27,26,27,26,26,27,27,26,26,27,26,26,27,27,27,27,25,26,27,27,27,27,27,26,27,27,27,26,27,25,26,25,25,24,22,22,21,21,20,20,19,17,18,18,17,16,16,13,12,10,8,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,3,3,2,2,1,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,3,4,4,4,4,4,4,5,6,6,7,9,9,10,12,12,13,12,13,15,15,14,16,17,17,18,18,21,22,21,22,23,24,23,24,22,22,24,23,21,23,24,24,23,23,24,24,26,27,24,25,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,26,26,26,25,26,27,26,27,26,26,27,24,24,24,23,22,21,20,19,18,17,16,15,13,12,11,9,8,6,5,5,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,9,9,8,9,8,8,8,7,8,7,8,8,8,9,9,8,9,8,8,7,7,7,6,6,6,6,5,6,5,5,5,5,4,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,6,6,6,5,5,4,4,3,3,3,3,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,2,3,3,4,3,4,4,5,5,4,4,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,4,5,6,6,5,5,6,5,4,5,5,4,4,5,4,4,5,5,4,4,4,5,5,5,5,5,5,5,5,6,5,6,5,6,6,5,5,5,6,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,5,6,7,8,10,10,9,10,11,13,15,17,17,19,21,18,17,18,19,18,22,20,22,21,20,25,25,23,23,25,23,24,25,24,25,23,24,24,22,24,25,25,23,25,24,22,24,25,22,21,24,23],[28,28,28,28,28,28,28,27,28,27,26,26,26,26,26,26,26,26,27,26,25,26,26,25,26,27,26,27,27,25,26,27,27,28,26,27,27,27,27,27,27,27,26,26,26,26,24,23,23,23,22,21,22,20,18,19,17,18,16,16,12,11,9,7,6,5,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,3,4,4,4,4,4,4,5,5,5,7,8,9,9,11,12,13,11,13,14,14,14,15,16,17,18,17,20,22,20,21,23,24,23,24,22,21,23,23,22,22,23,24,23,23,23,24,25,27,24,25,26,25,26,26,26,26,26,27,26,26,26,26,26,26,26,27,27,26,26,26,25,27,26,26,27,26,26,27,24,24,24,23,23,22,20,18,18,17,15,14,12,10,10,8,7,6,5,5,5,5,5,4,5,5,5,6,5,6,6,6,6,7,6,7,8,7,8,8,9,8,9,9,9,8,8,7,7,7,7,7,8,8,9,8,8,8,8,7,7,7,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,6,6,6,5,5,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,5,5,4,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,5,4,4,4,4,4,5,5,5,5,5,5,5,6,5,6,5,5,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,5,5,6,7,8,9,10,9,10,11,13,13,15,15,18,19,17,17,18,18,18,21,18,20,21,20,22,22,23,22,23,21,23,23,23,25,22,22,23,21,22,23,22,22,22,22,21,23,23,22,20,21,22],[28,27,27,28,27,28,27,26,28,26,25,26,25,25,24,26,24,25,26,24,25,26,25,25,26,26,24,25,26,24,25,26,25,26,24,26,25,26,25,25,25,25,24,25,25,24,23,22,22,21,21,19,20,19,18,18,17,17,15,15,13,11,10,8,6,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,3,3,2,2,1,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,3,3,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,5,5,5,4,4,4,4,4,4,4,5,5,5,6,6,7,9,10,10,12,12,13,12,14,14,14,14,15,16,17,17,17,20,21,19,20,22,22,23,23,21,21,22,22,22,22,22,24,23,23,23,24,25,25,24,25,26,26,26,25,26,26,26,26,26,26,26,26,26,26,26,27,26,26,26,25,25,26,26,25,25,25,25,25,23,24,23,23,22,19,20,17,16,16,14,14,12,10,10,8,7,6,6,5,5,5,5,5,5,5,6,6,6,6,6,7,7,8,7,7,9,8,8,9,10,9,9,9,9,9,8,8,8,7,8,8,9,9,9,9,9,9,8,8,8,7,7,7,7,6,6,6,6,5,5,5,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,3,4,3,4,4,3,3,4,4,3,4,4,4,4,3,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,4,4,4,4,4,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,4,4,5,4,4,5,5,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,5,5,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,5,6,7,7,8,9,10,9,11,12,13,15,17,17,19,21,18,18,19,19,18,21,20,20,22,21,23,22,24,23,23,23,24,25,24,25,24,23,24,23,23,24,23,24,23,24,21,25,24,22,22,24,22],[28,28,28,28,27,28,28,27,28,27,26,27,27,26,26,26,25,26,26,26,26,26,26,26,26,27,26,27,27,25,26,27,27,28,26,27,26,27,27,27,27,26,25,26,26,25,24,23,23,23,21,21,22,20,19,20,19,18,17,18,15,13,10,8,7,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,3,3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,5,6,6,7,10,10,11,13,14,15,15,15,16,18,16,17,19,19,20,20,22,23,22,23,24,24,24,24,24,22,23,23,22,23,24,24,23,24,23,24,24,26,24,25,25,25,25,25,25,26,26,25,25,25,26,26,26,26,25,27,27,27,27,26,25,26,26,26,26,26,26,26,24,24,24,23,23,21,20,19,18,17,15,16,14,12,11,9,8,7,6,6,5,6,6,6,6,6,6,7,7,6,7,7,7,8,8,8,8,8,8,9,10,9,9,9,9,9,8,8,8,8,8,8,9,9,10,9,9,9,9,8,8,8,7,7,7,6,6,6,6,6,5,6,5,5,4,5,5,5,4,5,5,5,5,5,5,5,6,6,6,6,7,7,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,5,6,6,5,4,3,3,2,3,3,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,3,4,4,3,4,4,4,3,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,2,2,1,2,2,3,2,3,3,3,3,4,4,3,3,4,4,4,4,4,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,5,5,5,5,4,5,5,5,4,5,5,4,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,4,5,5,5,5,5,6,5,5,6,7,7,6,6,6,6,5,6,6,5,6,5,5,5,6,5,5,5,5,6,6,6,7,6,6,6,6,6,7,6,6,7,7,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,5,6,7,8,9,10,10,10,11,12,13,15,15,16,18,19,17,17,18,18,18,21,18,20,21,20,23,23,22,22,23,22,23,24,23,23,22,23,24,21,22,24,24,22,23,23,21,23,24,21,21,23,21],[28,27,28,28,27,28,28,27,28,27,26,26,26,26,26,26,26,26,27,26,26,27,27,26,27,27,26,26,27,26,26,28,27,27,27,27,26,27,27,26,27,27,25,26,25,24,23,22,23,22,22,21,21,19,20,19,18,19,18,18,14,13,11,8,7,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,4,4,4,3,4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,4,4,4,5,5,4,4,5,5,6,6,7,7,10,10,10,12,13,14,13,14,16,15,16,18,17,17,19,19,21,22,21,22,23,24,23,24,22,23,24,23,22,24,23,23,23,23,23,25,24,26,25,25,27,26,26,26,26,26,26,26,26,26,27,27,27,27,26,27,27,26,26,25,25,26,26,26,26,26,25,26,25,24,24,24,22,21,20,20,18,18,16,15,14,12,11,9,8,7,6,6,6,6,6,5,6,6,6,7,7,7,7,7,7,8,8,8,9,9,9,9,10,10,10,10,10,9,9,8,8,8,8,9,10,10,10,10,9,9,9,8,8,8,7,7,7,7,7,6,6,6,6,6,5,5,5,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,6,6,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,5,4,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,3,3,4,4,3,4,4,3,3,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,5,4,5,5,4,5,5,5,4,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,6,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,6,8,8,9,10,11,10,11,12,14,16,17,17,20,21,20,18,19,20,20,22,20,22,22,21,24,25,24,24,25,24,24,25,25,24,24,25,25,23,23,25,25,23,24,24,22,24,25,23,21,24,24],[28,28,27,28,28,28,28,28,28,27,26,26,26,26,26,27,26,27,27,27,26,27,26,27,26,26,27,27,27,27,25,28,27,28,27,28,27,27,28,27,28,27,26,26,27,26,23,23,24,21,22,23,22,19,20,21,19,19,19,19,16,14,12,10,8,7,6,5,5,5,5,4,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,2,3,3,3,3,4,4,3,2,2,2,2,3,3,3,3,2,2,2,3,2,2,2,2,2,2,3,3,2,3,3,4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,4,5,4,4,5,5,5,5,5,5,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,3,3,3,2,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,7,6,6,7,7,7,7,6,7,6,6,6,6,6,6,6,6,7,7,7,8,7,9,11,11,12,14,15,16,16,16,19,18,17,20,20,19,22,22,23,23,24,25,24,26,24,26,24,23,25,24,22,24,24,25,25,24,25,25,25,27,25,26,26,27,27,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,25,24,25,24,24,23,20,19,20,18,17,16,15,13,12,11,10,9,8,7,7,8,7,7,8,8,8,8,8,9,8,9,9,9,9,10,10,11,10,11,12,12,11,12,10,11,10,10,9,10,10,10,10,11,12,11,11,11,10,10,10,9,9,9,9,9,8,8,8,8,8,8,7,6,6,6,7,7,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,7,7,6,5,5,5,4,4,4,5,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,7,7,6,5,4,4,4,4,3,3,3,3,3,4,4,4,5,5,5,5,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,6,5,5,5,5,5,4,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,4,4,4,5,5,6,4,4,5,5,5,5,5,5,5,4,4,4,3,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,6,6,7,6,7,6,6,7,6,6,6,7,7,6,6,6,7,6,5,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,7,9,8,8,8,8,8,7,8,7,7,8,7,7,7,8,7,6,7,7,7,8,7,8,8,8,8,8,8,8,8,8,8,9,8,8,8,8,8,8,8,8,7,7,7,7,7,6,7,7,6,6,6,7,5,6,6,6,5,6,7,8,9,9,11,12,12,11,12,13,15,16,17,17,20,22,20,19,20,20,20,22,21,22,22,21,24,24,24,23,25,23,24,25,24,25,24,25,25,23,23,25,25,24,24,24,23,23,25,23,21,24,23],[28,28,28,28,28,29,28,28,28,27,26,26,26,26,26,27,26,26,27,26,26,27,26,26,26,26,26,27,27,26,26,27,27,28,26,27,26,27,27,27,27,27,27,26,26,26,25,23,23,23,23,22,22,21,20,20,19,20,18,18,15,14,12,10,9,8,7,6,5,5,5,4,4,3,4,3,3,2,2,3,3,2,3,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,2,2,2,2,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,5,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,2,1,0,1,1,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,5,5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,4,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,6,6,5,6,6,6,6,7,7,8,9,8,10,12,12,12,14,15,15,15,16,17,17,17,18,19,20,20,20,22,23,22,24,25,25,24,25,24,24,24,23,23,24,24,25,24,25,24,26,26,27,26,26,27,27,27,27,27,27,27,27,27,26,27,27,26,27,27,28,27,26,27,27,26,27,27,26,27,26,27,27,24,25,24,24,23,21,21,18,18,17,16,17,15,13,13,11,9,9,8,8,8,8,8,8,8,9,9,9,9,9,10,9,11,12,10,11,12,13,12,13,14,15,13,13,12,13,12,10,11,11,11,12,13,14,14,14,13,12,12,12,12,11,11,10,10,10,9,9,9,8,8,8,7,7,7,7,7,7,7,7,8,6,7,8,8,7,8,9,9,9,9,9,8,8,8,7,7,6,5,5,5,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,5,5,5,6,6,6,7,7,8,8,7,6,5,5,4,5,4,4,4,4,4,4,5,5,5,5,5,6,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,6,6,5,6,6,6,5,6,6,5,5,6,6,6,6,5,6,6,5,5,5,6,5,6,5,6,6,5,5,6,5,5,5,5,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,3,3,4,4,4,5,6,6,5,5,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,5,6,6,6,6,7,7,7,7,6,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,5,5,6,6,6,6,6,6,6,7,7,7,7,8,8,8,8,8,9,9,9,9,9,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,8,8,8,8,8,9,9,10,9,9,9,9,10,8,9,9,10,9,8,8,8,8,8,7,8,7,7,7,7,7,7,7,7,6,6,6,6,6,7,8,9,10,10,11,13,13,12,13,15,16,18,18,19,21,22,21,21,21,21,21,23,22,22,23,22,24,24,25,24,25,23,25,25,25,26,24,24,26,24,25,25,25,25,25,25,24,26,24,24,23,25,24],[28,28,28,28,28,29,28,28,29,27,27,28,27,27,27,27,27,27,28,27,27,27,27,27,27,28,27,27,28,27,27,28,28,28,28,28,27,28,28,28,28,27,27,27,27,26,23,24,24,22,22,23,22,20,20,21,19,20,19,19,16,14,12,9,9,7,6,5,5,5,5,4,4,3,4,3,3,3,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,6,6,5,6,6,6,6,6,7,7,9,8,9,11,11,12,14,15,17,15,16,18,18,16,18,19,20,20,21,24,23,23,24,25,25,25,26,23,23,25,24,23,25,25,25,24,24,25,26,26,27,26,26,27,27,27,28,27,27,27,27,28,27,28,28,28,28,28,28,28,28,28,27,27,28,27,27,28,27,27,27,25,25,25,25,24,22,20,20,19,19,17,17,15,14,13,11,10,9,8,8,8,8,7,7,8,8,8,9,9,9,9,9,10,10,10,10,10,12,11,12,13,12,12,12,12,12,11,11,11,10,11,11,12,12,13,12,12,11,11,11,10,9,9,9,9,9,8,8,8,8,7,8,7,7,6,7,7,6,6,7,7,6,6,7,8,7,7,8,9,8,9,9,9,8,7,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,6,6,7,7,7,5,5,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,3,3,3,4,4,5,5,4,5,5,5,6,5,5,5,5,4,4,4,3,4,4,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,7,6,7,7,6,7,7,6,6,6,7,6,6,7,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,6,6,5,6,6,6,6,7,6,7,6,7,7,7,7,7,8,8,8,8,8,8,7,8,7,7,7,7,7,7,8,7,7,7,7,7,7,8,8,7,8,8,8,9,8,8,8,9,9,8,8,8,8,8,7,7,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,7,8,9,10,11,13,13,12,13,15,16,18,18,19,21,21,21,20,21,21,21,24,22,23,24,22,25,24,25,24,25,23,25,25,25,26,24,25,25,23,24,25,25,24,25,25,23,25,24,24,23,23,23],[28,28,28,28,28,28,28,27,28,26,26,25,26,26,26,27,26,27,26,27,27,26,26,27,26,26,27,26,26,26,26,27,28,28,26,28,26,26,27,26,28,26,25,25,26,25,23,23,24,21,21,21,21,20,18,21,17,18,18,17,15,14,12,10,9,8,7,7,6,6,6,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,4,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,4,4,4,4,4,3,2,2,2,3,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,4,4,4,4,5,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,1,2,1,1,0,1,2,2,2,2,3,2,2,2,2,2,2,2,3,2,2,3,3,3,4,4,4,4,3,4,4,4,3,4,4,4,4,4,5,4,4,5,5,6,6,6,6,6,6,6,7,7,6,6,6,6,5,4,4,5,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,5,5,5,4,5,5,4,5,5,5,5,5,5,6,5,5,5,5,4,4,5,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,8,8,7,8,8,9,9,8,8,8,7,7,7,6,7,7,7,7,7,8,8,9,9,10,11,12,12,13,15,15,14,16,17,16,17,18,18,18,20,20,21,21,21,23,24,25,24,24,24,22,23,24,23,23,25,24,25,24,23,25,26,27,25,26,26,26,27,27,26,26,27,27,26,27,27,27,26,27,27,28,27,27,27,26,26,27,27,26,27,26,26,27,25,24,24,24,22,22,21,18,19,17,16,16,14,13,13,11,10,9,9,8,9,8,8,9,10,11,11,10,11,12,12,12,12,13,13,12,13,15,14,14,15,15,15,15,15,14,13,13,13,13,14,13,15,14,15,15,15,14,13,14,13,12,11,12,12,11,11,11,10,9,9,9,9,9,7,8,9,9,8,9,10,8,8,10,10,9,9,10,11,11,11,11,10,10,9,8,7,7,6,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,6,5,5,5,6,6,6,7,7,8,8,7,6,6,6,5,5,5,4,4,4,5,5,5,5,5,6,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,8,7,6,6,7,6,6,7,7,6,6,7,7,6,6,6,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,4,4,4,4,3,3,3,2,3,3,2,2,2,3,3,3,4,4,4,5,6,6,5,5,6,6,6,6,6,6,6,6,5,4,4,5,5,5,5,5,5,5,5,6,6,5,6,6,6,7,7,7,8,8,9,8,8,8,8,7,7,8,8,7,8,7,8,7,7,7,7,7,6,7,7,6,6,6,7,6,6,6,6,6,7,7,7,7,7,8,9,8,9,9,9,9,9,10,10,10,10,9,9,9,9,8,8,9,8,8,9,9,8,7,8,8,8,10,10,10,9,10,10,9,10,10,10,10,10,11,10,10,9,10,10,9,9,10,9,8,9,10,8,8,9,8,8,8,9,8,7,8,8,7,7,7,8,9,10,10,13,14,14,13,14,16,17,18,20,20,21,22,22,21,21,22,21,23,22,21,23,23,23,24,25,23,24,23,25,26,24,26,24,24,24,25,24,25,25,24,25,25,23,24,25,23,22,23,25],[27,27,27,27,27,28,27,27,28,26,26,26,26,26,25,26,26,26,26,26,26,27,26,26,27,26,26,26,26,26,26,26,27,27,25,27,26,26,27,26,27,25,25,26,25,25,23,23,23,21,22,21,22,20,19,21,18,20,18,17,16,14,12,11,10,10,9,8,9,8,8,7,7,7,6,6,5,5,4,5,5,4,4,5,4,3,4,4,4,3,3,3,3,3,3,3,3,2,3,3,5,3,3,4,4,3,4,4,4,5,4,4,3,2,3,3,4,5,5,5,5,4,4,5,4,4,4,4,4,5,5,4,5,5,5,6,6,5,4,4,4,4,3,4,4,3,3,3,3,3,3,4,3,2,3,2,1,0,1,2,2,3,3,2,3,4,3,3,3,4,3,4,4,5,5,4,5,5,5,5,5,5,6,5,5,6,6,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,7,7,7,7,6,6,5,5,5,5,4,4,5,4,4,4,4,4,5,4,5,5,6,5,6,6,5,5,6,6,5,6,6,5,5,6,6,5,5,6,6,6,6,6,6,7,6,7,7,6,7,7,7,7,7,7,7,7,7,7,6,7,6,7,6,7,7,6,7,7,7,7,7,6,7,6,6,6,4,5,5,4,5,6,5,5,6,7,5,6,7,7,7,7,7,8,8,7,8,8,8,8,9,8,9,8,9,9,9,9,9,9,9,10,10,10,10,9,9,9,8,8,9,9,9,9,9,9,9,11,10,11,12,13,13,15,15,16,15,17,18,17,18,19,20,19,21,20,23,23,22,24,25,25,25,25,25,23,24,24,23,24,24,25,25,25,24,27,27,27,26,26,27,27,27,27,27,27,27,28,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,27,26,27,27,26,25,24,24,23,22,22,19,20,19,18,18,16,14,15,13,12,11,10,10,11,10,11,11,11,12,12,12,13,13,13,12,13,15,14,13,14,16,14,15,15,16,15,15,15,15,14,14,14,13,14,14,16,16,15,16,15,15,14,15,14,13,14,14,13,13,13,13,12,11,11,12,10,11,10,10,11,11,11,11,11,10,10,11,11,10,11,11,11,11,12,12,11,11,11,10,10,9,9,8,8,9,8,7,8,7,7,7,8,8,8,7,7,8,7,7,7,8,7,7,7,7,7,7,8,7,7,7,7,7,7,7,8,8,9,9,8,8,7,7,7,6,6,5,5,5,5,5,5,6,6,6,6,6,6,5,6,6,5,5,6,6,5,5,6,5,5,6,7,5,6,7,7,6,7,7,7,7,7,8,7,8,7,8,8,8,9,9,9,9,10,9,9,9,9,8,8,9,8,8,9,9,8,8,8,8,9,8,8,9,8,8,8,9,8,8,7,8,7,7,7,7,7,7,7,6,5,5,5,5,4,4,3,3,3,3,2,2,3,4,3,5,5,5,6,7,8,7,7,8,8,8,7,7,7,7,8,6,6,6,7,7,7,7,7,8,7,8,8,8,8,8,8,9,9,9,10,10,10,10,10,9,10,10,10,10,11,10,10,9,9,10,9,9,10,9,9,9,9,8,8,8,8,8,8,8,8,8,9,9,9,10,9,9,10,10,10,11,11,11,10,10,11,11,11,12,11,10,10,10,10,10,11,10,9,11,10,10,10,10,10,10,11,11,11,11,11,12,11,11,11,11,12,12,13,11,11,11,12,12,11,11,12,11,10,11,12,10,10,11,10,10,10,10,10,9,9,9,9,9,9,10,11,12,12,14,15,15,15,16,17,19,20,21,20,22,21,24,22,23,22,23,24,24,22,25,23,23,23,25,24,24,23,25,26,24,27,26,25,24,25,26,25,24,24,26,26,24,26,25,24,23,25,24],[28,29,29,29,29,29,29,29,29,28,27,27,28,27,27,27,28,28,28,28,27,28,28,27,27,28,27,27,28,28,26,28,28,29,27,29,27,28,28,27,28,27,26,27,27,26,24,24,25,22,22,22,22,21,21,21,19,20,19,19,17,15,12,10,9,8,7,7,6,6,6,5,6,5,5,4,4,3,3,3,3,3,3,4,3,3,4,4,4,4,3,3,3,3,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,2,3,2,3,3,3,3,4,3,3,3,4,3,3,4,4,3,4,4,4,4,5,5,6,5,5,4,4,4,3,3,3,4,3,2,3,2,2,2,2,2,2,1,1,1,1,0,1,1,3,3,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,7,6,6,5,5,5,5,4,4,4,4,3,3,4,3,3,4,4,3,3,4,4,3,4,4,4,4,5,5,5,4,4,5,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,6,6,6,6,6,6,6,6,6,7,6,6,6,7,6,6,6,6,7,6,5,6,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,6,5,6,5,6,6,6,6,7,7,7,7,7,8,7,8,9,9,8,9,8,9,9,8,9,8,8,8,7,8,8,8,7,8,9,8,10,9,10,12,13,13,14,16,16,16,17,20,19,18,21,22,21,22,24,24,25,24,25,26,27,25,26,25,24,25,24,22,25,25,25,26,25,26,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28,27,27,28,27,27,28,27,26,27,24,25,25,24,24,22,21,20,19,19,17,17,15,15,13,12,11,11,9,9,9,10,10,9,10,10,11,11,11,11,12,12,12,13,13,13,14,15,13,15,16,16,14,15,14,15,14,12,13,13,13,14,14,14,15,14,15,13,14,13,12,12,12,12,11,12,11,11,10,9,10,10,10,9,9,8,10,9,8,9,10,9,10,11,11,10,10,11,12,11,12,12,11,10,10,9,9,8,8,7,7,7,6,7,7,6,6,7,6,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,6,7,7,7,8,8,8,9,9,7,7,7,7,6,7,6,5,6,6,5,6,6,6,7,6,7,6,5,6,6,5,5,6,5,5,5,5,4,5,5,5,5,5,6,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,8,8,7,8,8,8,7,7,7,7,7,8,7,8,7,7,7,8,7,7,7,7,7,7,7,8,7,7,6,7,6,6,6,6,5,5,4,4,3,3,4,3,3,2,2,3,2,2,2,3,4,4,5,5,6,7,7,6,6,7,7,6,6,6,6,6,6,5,5,5,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,9,8,9,10,8,9,9,8,8,9,10,8,8,8,9,8,8,8,8,8,8,7,8,7,7,6,7,6,6,7,7,7,8,8,8,8,8,9,9,8,10,10,9,9,9,10,10,10,10,10,9,10,9,9,9,9,9,8,8,9,8,8,8,9,9,10,10,10,9,10,11,10,10,10,10,10,11,12,10,11,10,11,11,10,10,11,10,10,10,11,8,9,10,9,8,9,10,8,8,9,9,8,8,9,10,11,11,12,14,15,15,14,15,18,19,20,21,20,23,23,24,23,23,22,24,24,24,23,25,23,25,25,26,25,25,24,27,26,25,27,25,26,25,26,26,26,26,25,27,26,24,26,26,25,24,25,25],[27,27,26,27,27,27,27,27,27,26,26,26,25,26,26,26,26,26,26,26,26,27,26,27,26,26,27,27,26,27,26,26,28,27,25,27,26,26,27,26,27,25,25,25,26,24,22,23,23,20,21,22,21,19,20,21,18,19,19,17,15,15,12,11,10,9,9,8,6,7,6,8,7,7,6,5,5,4,4,4,5,4,4,5,5,5,6,6,6,5,5,4,5,4,4,5,4,3,4,4,3,3,4,4,3,4,4,4,4,5,4,3,3,3,3,3,3,4,5,5,5,4,4,4,4,4,5,4,4,5,5,5,6,6,6,7,6,7,6,5,5,6,5,4,5,4,4,4,4,3,3,4,3,2,2,4,2,1,1,0,1,5,2,2,2,3,3,3,3,4,4,3,5,5,5,4,5,5,5,6,5,6,6,6,6,7,6,6,6,7,7,7,8,7,7,8,8,8,8,9,8,8,9,9,8,9,9,8,7,6,6,7,6,6,6,6,6,5,6,7,5,5,6,6,6,5,6,5,5,5,5,5,6,6,6,7,5,5,6,5,5,6,6,5,6,6,6,6,7,6,6,7,7,7,7,7,8,8,8,8,7,8,8,7,8,8,8,7,8,9,8,7,9,8,8,9,8,8,8,8,7,6,7,6,5,6,7,6,6,7,8,5,7,8,7,6,7,8,8,7,8,8,8,9,9,9,9,10,9,9,10,11,10,10,11,11,11,11,10,11,10,10,10,10,9,8,9,10,8,9,9,9,10,10,11,12,12,13,15,15,15,15,16,19,16,16,19,19,18,21,21,22,22,21,24,23,24,25,26,25,23,23,23,23,25,24,25,25,25,24,26,26,28,26,27,26,27,27,27,27,27,27,27,26,27,27,27,26,27,26,28,26,27,27,26,26,26,27,26,27,26,25,26,25,23,24,23,21,20,20,18,18,17,16,16,14,15,14,12,12,11,10,10,12,10,11,12,11,12,13,13,13,13,14,13,14,16,15,15,15,16,15,16,17,17,17,17,17,16,15,16,15,16,16,15,17,16,16,17,15,15,14,16,14,13,13,15,14,13,14,13,12,12,11,13,11,11,12,11,12,11,12,12,12,11,12,12,12,12,13,13,12,13,13,13,12,12,12,11,10,11,9,9,8,8,9,9,8,9,9,9,9,9,9,9,9,9,8,8,9,9,9,8,9,9,8,8,9,9,9,8,8,8,9,8,9,9,9,10,10,9,8,8,9,8,7,7,6,7,6,7,7,8,6,7,6,7,6,6,7,6,6,6,7,6,6,7,7,6,6,8,7,6,8,9,7,7,8,8,7,8,9,9,8,9,9,9,9,9,10,10,10,10,11,10,10,11,10,9,10,10,10,9,10,10,10,10,9,10,10,9,10,10,10,9,9,10,9,9,9,9,8,8,8,8,7,7,5,6,5,5,4,4,4,3,4,3,2,4,3,2,2,4,4,5,5,6,6,7,7,6,6,7,6,8,6,6,6,6,7,5,6,6,7,7,7,8,9,9,8,10,10,9,10,10,9,10,11,10,11,11,10,10,10,10,10,11,11,11,10,11,11,10,10,11,10,10,11,9,10,10,10,9,8,8,8,9,9,9,9,10,10,10,10,10,12,10,10,11,11,10,10,11,11,10,11,10,11,11,10,11,11,10,10,11,11,10,10,11,10,10,11,11,11,10,12,11,11,12,11,12,11,11,11,11,12,12,13,12,12,11,14,12,12,12,12,12,11,11,12,12,11,12,11,12,11,11,12,11,10,11,10,12,10,11,11,13,13,15,16,17,17,16,18,19,20,22,20,23,22,22,22,23,22,23,23,24,23,25,23,24,24,25,25,26,24,25,27,25,26,25,26,25,24,24,27,26,25,26,26,25,26,26,25,23,24,25],[28,28,28,28,28,28,28,28,28,27,26,26,26,27,26,26,26,27,26,27,27,27,27,27,27,27,27,26,27,26,26,27,28,28,26,28,27,27,27,26,27,26,26,26,26,25,23,22,24,21,21,21,22,21,20,20,17,19,19,17,15,14,13,9,8,7,6,5,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,5,5,6,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,5,4,4,4,5,5,5,5,5,7,6,6,6,7,6,6,7,7,7,7,6,5,5,4,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,5,6,5,5,6,6,5,4,4,4,4,5,4,4,5,5,4,5,5,5,5,6,6,6,5,5,5,4,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,7,7,7,7,7,6,5,6,7,6,5,6,7,7,7,8,9,11,11,12,14,15,16,15,16,18,17,17,19,19,19,21,21,22,22,23,25,23,24,23,25,24,22,24,24,22,24,23,24,24,24,24,26,26,27,26,27,27,27,27,27,27,27,27,26,27,27,27,27,27,27,26,26,26,26,26,26,26,27,26,26,27,26,25,26,24,25,25,24,23,22,20,19,19,16,16,16,14,14,12,11,10,9,8,8,7,8,8,8,9,9,10,10,10,10,11,11,12,12,12,11,13,13,13,14,15,15,15,15,14,14,13,12,12,12,12,13,13,14,15,14,14,13,11,12,12,11,11,11,11,10,10,10,9,8,8,8,8,7,7,7,8,7,7,8,8,8,8,9,9,8,9,10,10,11,11,11,10,10,9,8,7,7,6,6,5,5,5,5,5,5,5,6,6,5,6,6,6,5,6,6,5,5,5,5,5,5,5,4,4,5,5,4,4,5,6,6,6,7,7,8,7,6,5,5,4,5,5,4,4,4,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,3,4,4,3,4,4,4,4,5,5,4,5,5,6,5,6,6,6,6,6,6,6,6,6,6,7,6,6,6,7,6,6,5,6,6,5,5,6,6,5,5,6,5,6,5,5,5,5,4,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,1,2,3,3,4,4,4,5,5,6,4,5,5,5,6,5,5,4,5,4,4,4,3,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,6,7,7,8,8,6,7,8,7,7,8,8,7,7,7,7,7,6,6,7,6,6,6,6,5,6,5,5,5,5,5,5,5,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,9,8,8,8,8,7,7,8,8,7,7,8,7,7,7,7,7,8,8,9,8,9,9,8,9,8,9,9,9,10,9,10,9,10,10,9,9,10,9,8,9,9,7,8,9,8,7,8,8,8,7,8,8,7,7,8,9,9,11,12,14,15,15,14,16,17,19,19,20,20,22,22,24,22,23,21,24,24,23,24,24,24,26,25,25,25,26,24,25,26,25,25,25,25,25,25,26,26,26,25,26,25,24,25,25,25,23,24,25],[29,28,28,29,29,29,29,29,29,27,28,27,28,27,27,27,28,28,27,28,28,27,28,28,27,27,28,27,28,28,27,28,29,29,28,28,28,28,28,28,29,27,27,26,27,26,24,25,25,22,23,22,23,21,21,21,20,20,19,20,17,15,12,10,8,6,6,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,1,2,1,2,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,6,6,5,6,6,6,6,5,5,4,4,4,4,4,3,4,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,3,2,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,4,4,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,3,4,4,4,4,4,5,5,5,5,6,5,5,6,6,6,6,7,7,7,6,7,7,6,6,6,5,6,7,6,5,6,7,6,7,8,9,12,12,12,16,15,17,15,17,19,18,18,20,21,21,22,23,24,25,23,26,26,26,26,26,24,25,26,24,24,25,24,25,24,25,24,27,27,27,26,27,27,27,27,28,27,26,27,27,27,27,28,27,27,27,27,28,27,27,27,27,26,27,27,26,27,26,26,27,25,26,26,24,23,22,19,21,20,17,17,16,15,14,13,12,10,9,8,7,7,7,8,7,8,8,8,9,9,9,9,10,10,11,10,11,11,12,11,12,13,13,13,13,12,12,11,11,11,11,11,12,12,12,13,13,13,12,11,11,10,10,9,9,10,10,9,8,8,8,7,7,7,6,6,6,7,7,6,6,7,7,7,7,8,7,8,8,9,9,9,9,9,8,8,7,6,6,5,5,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,5,5,4,4,5,6,5,6,7,7,7,7,6,5,5,4,4,4,4,3,4,4,4,5,5,4,5,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,5,5,5,6,5,5,5,5,4,4,4,4,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,5,5,4,4,5,5,6,5,5,5,4,4,3,3,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,6,6,6,7,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,4,5,4,5,5,6,5,6,6,6,6,6,6,7,6,7,7,7,7,7,8,8,8,7,7,7,7,7,7,7,7,7,6,7,7,7,6,6,7,7,7,8,8,8,8,8,7,8,8,8,8,8,9,8,8,8,8,8,7,7,8,7,6,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,8,9,10,10,12,13,13,12,14,15,16,19,21,20,23,23,23,21,23,22,24,25,24,24,26,24,25,26,26,25,26,25,26,26,26,28,25,26,27,24,25,26,26,26,26,27,26,26,26,25,25,26,25],[28,28,28,28,28,28,28,28,28,27,26,25,27,27,26,26,26,26,26,27,27,26,26,27,26,27,27,26,27,26,25,27,27,28,26,27,26,26,27,26,27,25,25,26,26,25,23,23,23,20,22,22,20,21,21,20,18,20,18,18,16,14,12,9,8,6,5,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,3,3,2,2,3,3,2,3,3,2,3,3,3,3,3,3,3,3,4,4,3,3,2,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,5,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,6,6,5,5,6,6,5,6,6,6,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,7,6,6,6,5,6,6,5,5,6,6,6,7,8,10,13,12,13,16,17,16,15,17,18,17,17,19,19,18,20,21,21,21,21,22,23,24,23,24,23,22,22,22,22,23,22,24,23,21,23,25,25,26,24,26,26,26,26,27,26,25,26,26,25,26,26,26,26,27,26,27,26,27,26,26,26,26,26,25,26,25,24,26,24,24,24,24,22,21,20,18,19,18,16,17,14,13,13,11,10,9,7,6,7,8,7,8,8,8,8,8,8,9,9,9,10,10,10,10,10,11,11,12,13,13,13,13,11,12,11,11,10,10,11,11,11,12,13,11,13,12,10,10,9,10,9,9,9,9,8,8,8,8,7,7,7,6,6,7,7,6,6,6,7,6,6,7,7,7,7,7,8,8,9,8,8,8,7,6,6,5,5,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,4,5,5,6,7,7,7,6,6,5,5,4,4,4,4,3,4,4,4,4,5,4,5,4,4,4,3,4,4,3,3,4,3,3,4,3,3,3,4,3,4,4,4,3,3,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,6,5,6,5,6,5,6,5,5,5,5,5,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,4,5,4,4,4,4,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,6,6,7,6,6,6,6,6,6,6,5,5,5,5,5,4,5,4,5,5,5,5,5,6,5,6,6,6,6,6,7,6,6,7,7,7,7,8,8,7,7,7,7,7,7,6,7,7,7,6,7,7,6,6,6,6,7,7,8,8,8,8,8,7,8,8,8,8,8,8,8,8,7,8,8,7,7,8,7,6,7,7,7,6,7,6,6,6,6,6,6,6,6,5,6,6,7,8,10,10,12,13,13,12,13,15,16,17,19,18,22,22,22,20,22,21,21,22,22,23,24,23,24,24,25,24,24,23,26,26,24,26,25,25,25,25,24,25,24,24,24,24,23,25,25,24,23,24,24],[28,28,28,28,27,28,28,27,28,26,26,26,26,26,26,26,26,26,27,26,26,27,26,26,26,27,27,27,27,26,26,27,27,28,27,28,27,28,28,27,28,26,26,26,26,26,24,23,24,21,21,21,22,20,20,21,18,19,18,18,15,13,11,8,7,6,5,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,6,5,5,6,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,6,6,6,6,6,6,6,5,5,6,5,5,5,6,6,7,7,8,10,10,11,13,14,15,14,15,18,16,16,18,18,18,18,20,21,21,21,22,23,24,23,24,23,21,23,22,22,22,23,24,24,23,23,26,25,26,25,26,26,27,26,27,27,26,26,26,26,26,26,26,26,26,26,27,26,26,26,26,25,26,25,25,26,24,24,25,22,24,24,22,22,20,19,17,18,16,15,14,13,12,11,10,8,7,7,7,7,7,7,7,7,8,8,8,8,8,9,9,9,10,10,10,11,11,11,12,12,13,12,12,12,11,10,10,10,9,10,11,11,12,12,12,12,11,10,11,10,9,9,9,9,8,8,8,7,7,7,7,7,7,6,7,7,6,7,7,7,6,7,7,7,7,7,7,8,8,8,8,8,7,7,6,6,6,5,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,5,5,5,6,6,7,7,6,6,5,4,4,4,4,3,3,4,4,4,4,4,5,5,5,5,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,5,6,6,6,5,6,6,5,6,6,6,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,4,4,5,5,4,4,5,5,5,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,6,6,7,6,6,6,6,6,6,6,5,5,5,5,4,5,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,7,7,7,7,6,7,7,6,6,7,7,6,6,6,6,6,7,7,7,7,7,8,7,7,7,8,8,8,8,8,8,8,9,8,7,7,8,7,7,7,7,7,7,7,6,7,6,6,6,6,6,6,5,6,6,7,7,9,9,10,12,12,11,12,13,16,17,17,17,20,21,20,20,20,21,21,22,22,21,23,21,23,23,24,23,24,22,24,25,24,26,24,24,23,23,24,24,23,23,24,24,23,24,24,22,22,23,24],[28,28,28,28,28,29,28,28,28,27,27,27,27,26,26,27,27,27,26,27,26,26,27,27,27,27,27,27,27,26,26,28,27,28,27,28,27,27,27,27,27,27,26,26,26,26,24,23,25,23,22,21,22,20,20,21,19,19,18,18,15,14,11,8,7,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,4,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,5,5,5,4,5,4,5,5,4,4,5,5,6,7,7,8,11,11,11,15,14,16,17,16,18,18,17,19,19,20,21,22,23,24,22,24,25,24,25,25,23,23,24,23,23,23,24,24,24,24,24,26,26,27,26,26,27,27,27,27,26,27,27,27,27,26,27,27,27,27,27,27,27,27,26,27,25,26,27,25,27,26,26,27,24,25,25,23,24,22,21,19,19,18,16,16,14,13,11,10,8,7,6,6,5,6,6,6,6,6,6,7,7,7,7,8,8,9,8,9,10,10,10,11,11,12,11,11,10,11,10,9,9,8,9,10,10,11,11,11,11,10,10,9,9,8,8,8,8,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,7,7,8,7,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,5,5,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,2,2,1,2,2,3,3,3,3,4,4,5,4,4,4,5,5,5,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,6,6,6,6,6,6,5,6,6,5,6,6,5,5,5,5,5,6,6,6,6,6,7,6,7,7,7,7,7,7,6,7,6,7,7,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,4,4,5,6,7,8,9,10,12,12,11,12,13,14,17,18,18,21,20,21,20,20,21,21,23,22,22,23,22,24,25,26,24,25,25,26,25,25,26,24,24,25,23,24,25,25,24,24,25,24,25,25,23,22,24,24],[29,29,29,29,29,29,29,29,29,28,28,27,28,28,28,27,28,28,28,28,28,28,28,28,28,28,29,28,29,28,28,29,29,29,28,29,28,28,28,28,28,27,27,27,27,27,25,24,25,22,24,23,23,22,21,22,19,20,19,19,16,15,11,9,7,6,5,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,5,5,5,5,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,5,5,5,4,5,5,5,5,5,5,5,6,7,8,11,11,12,14,14,16,15,16,19,18,17,19,20,20,21,22,23,24,22,25,25,25,25,26,24,25,25,24,24,24,24,25,24,25,25,26,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,27,27,27,26,27,27,26,28,27,26,28,26,26,26,25,25,22,22,20,21,18,16,16,14,13,12,10,8,7,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,9,10,9,10,11,11,10,11,10,10,9,9,9,9,9,9,9,10,10,10,10,10,9,9,8,8,8,8,8,8,7,7,7,6,6,6,5,5,5,5,6,5,5,6,6,5,6,6,6,6,6,6,7,7,7,7,7,7,6,5,5,5,4,4,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,5,5,5,5,6,7,6,5,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,4,5,4,4,4,5,4,4,4,4,4,4,5,5,5,4,5,5,5,4,4,5,4,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,5,5,4,4,4,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,4,5,5,5,5,5,6,5,5,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,5,6,6,6,6,6,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,7,7,9,9,11,12,11,11,12,13,14,16,18,19,22,22,20,19,21,21,20,24,21,23,24,23,26,25,26,25,27,25,26,26,26,26,25,26,26,24,24,26,26,25,26,25,24,25,26,24,23,26,24],[27,28,27,28,27,28,28,27,28,26,25,25,25,26,25,26,25,26,26,26,26,26,26,26,26,26,26,27,27,26,25,26,26,28,26,27,26,26,26,26,27,26,24,25,26,25,23,22,23,20,21,21,20,20,19,20,18,19,18,16,14,13,10,8,7,6,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,5,5,4,4,5,5,4,5,6,5,5,5,4,4,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,3,2,2,3,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,3,4,4,4,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,6,6,7,8,11,11,11,14,14,17,14,15,18,17,15,17,19,17,18,20,21,20,20,22,22,23,23,23,22,21,23,22,21,22,22,24,22,22,23,24,24,26,24,26,26,25,26,26,25,25,25,25,26,25,25,26,26,25,25,26,25,25,25,25,25,25,25,25,26,24,24,25,23,23,24,23,22,21,20,17,18,16,14,15,12,12,11,9,8,7,7,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,9,9,9,10,11,11,11,11,9,10,9,9,8,8,9,9,9,10,11,10,10,9,9,8,8,8,8,7,8,7,7,7,7,6,6,6,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,6,6,5,5,5,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,5,5,5,6,6,7,6,5,4,4,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,5,5,6,6,5,6,6,6,6,5,5,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,6,7,6,6,6,6,6,6,6,5,6,6,5,5,5,6,6,6,6,6,6,7,7,6,7,7,7,7,7,8,7,7,7,8,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,7,7,9,9,10,11,11,10,11,12,14,16,16,16,20,21,19,18,20,20,20,23,20,22,23,21,23,24,25,23,25,22,25,24,24,25,23,24,25,24,23,24,24,23,23,24,22,24,24,23,22,24,23],[28,28,28,28,28,28,28,28,28,27,26,27,27,26,26,27,27,27,27,27,27,27,27,27,27,27,26,27,27,27,26,28,27,28,28,28,27,28,28,27,28,27,27,27,27,26,24,23,24,22,22,22,22,20,19,20,19,18,16,18,14,13,10,8,7,6,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,5,5,6,6,8,10,11,11,13,15,15,13,15,16,16,16,18,18,18,19,20,21,22,20,23,23,24,24,24,22,22,22,22,22,22,24,24,23,22,23,24,26,26,24,25,26,26,26,26,26,26,25,26,26,26,26,26,26,26,26,26,25,26,25,26,25,27,26,24,26,26,25,26,24,24,24,24,23,20,20,18,18,16,15,14,13,12,10,9,7,6,6,6,5,5,5,6,5,6,6,7,6,7,7,8,8,8,8,9,9,9,9,9,10,10,10,10,10,9,9,8,8,8,8,8,9,9,9,10,9,8,8,8,7,7,8,7,7,6,6,6,6,5,5,6,5,5,5,5,5,5,4,5,5,5,5,6,5,5,6,6,6,6,7,6,6,5,6,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,5,5,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,5,6,6,5,5,5,6,5,5,5,5,4,5,5,4,4,5,4,4,4,5,6,7,7,7,9,11,11,10,11,12,13,14,16,16,19,20,18,18,19,19,19,20,20,20,22,21,23,23,25,23,23,23,24,23,23,25,23,22,22,22,24,24,23,23,23,23,22,24,23,22,22,24,22],[28,28,28,28,28,29,28,28,28,27,27,27,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,27,27,28,28,28,28,28,27,28,28,28,28,27,27,27,27,27,25,24,25,24,23,22,23,21,20,22,20,20,19,19,16,14,11,8,7,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,3,2,2,3,3,4,4,4,4,4,4,4,4,4,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,4,4,4,4,5,4,4,4,5,5,6,6,8,11,12,12,15,15,16,16,17,19,18,18,20,20,21,21,21,24,24,22,24,25,24,25,26,24,24,23,22,22,23,23,25,24,23,24,25,26,27,25,26,26,26,27,26,26,26,26,26,26,26,26,27,26,26,26,27,26,27,27,27,26,27,26,26,27,26,26,27,24,26,26,25,25,23,21,20,20,17,16,15,14,12,10,10,8,7,6,6,5,6,6,5,6,6,6,7,7,7,7,8,8,9,8,9,8,9,9,10,11,10,10,11,9,10,9,9,8,9,9,9,9,9,10,10,10,9,9,8,8,8,7,7,7,7,7,6,6,6,5,5,5,5,4,5,5,4,4,5,5,5,5,5,6,5,6,6,6,7,7,7,7,6,6,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,5,5,6,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,6,6,6,6,6,7,6,7,7,6,7,7,7,7,7,6,7,7,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,4,5,4,4,4,5,6,7,8,8,10,12,11,10,12,14,14,16,18,19,22,22,21,19,21,21,20,24,21,22,24,22,25,25,25,25,26,25,26,25,26,26,25,25,27,24,24,26,26,25,26,25,24,25,26,24,22,26,25],[29,28,28,29,28,29,28,28,29,27,27,27,27,27,28,27,27,28,28,28,28,28,27,28,28,27,27,28,28,27,27,28,28,29,28,28,26,28,28,27,28,27,26,27,26,26,25,24,25,22,23,23,23,21,21,21,19,21,19,19,15,13,11,8,7,6,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,4,4,4,4,4,5,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,4,4,5,5,4,4,4,5,5,4,4,5,5,5,6,6,8,10,11,11,14,15,16,15,17,19,17,17,19,21,20,20,22,22,22,23,24,24,25,25,25,23,23,24,22,23,24,24,24,24,24,24,25,25,27,25,26,26,26,27,26,26,26,27,26,26,27,27,26,27,27,27,27,27,27,26,26,26,26,27,26,27,26,25,28,25,25,26,24,25,23,22,20,20,18,15,15,14,12,11,9,8,7,6,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,9,9,9,9,8,8,8,8,8,8,8,8,8,9,9,8,9,8,8,7,7,7,7,6,7,6,6,6,6,5,5,5,4,5,4,5,5,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,5,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,4,4,4,4,4,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,3,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,6,7,8,9,10,10,10,11,12,13,15,16,17,19,20,19,17,19,19,20,21,20,20,22,21,24,23,25,24,25,24,25,25,25,27,24,25,25,24,24,25,25,24,25,24,22,24,24,23,21,24,23],[27,27,27,27,26,28,27,26,28,25,26,25,25,25,24,27,25,25,26,25,25,26,25,25,26,26,25,26,26,24,25,26,25,27,26,26,25,26,27,26,26,25,24,25,25,24,24,22,22,21,21,20,20,19,18,19,17,17,16,15,13,12,9,7,7,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,2,2,1,2,2,2,2,1,2,2,1,1,1,1,1,1,2,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,5,6,7,9,10,10,12,13,13,13,14,15,15,14,16,16,17,18,18,19,20,21,20,21,22,23,24,23,21,21,22,21,21,22,24,23,22,22,23,24,26,23,24,25,25,26,25,25,25,26,25,25,26,25,26,25,26,26,26,26,25,25,25,25,25,25,25,26,24,24,25,22,22,23,22,21,20,19,17,17,16,14,14,12,10,10,8,7,6,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,8,9,9,8,9,8,8,7,7,7,6,7,7,7,8,9,8,8,7,7,7,6,6,6,6,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,6,6,5,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,4,5,4,4,5,5,4,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,5,5,6,5,5,5,5,5,5,5,4,5,5,4,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,6,7,7,8,9,9,9,10,11,12,13,14,15,17,20,18,17,18,18,18,20,19,19,21,19,22,21,23,21,22,22,23,22,22,25,22,22,23,22,22,23,22,23,21,22,20,23,22,21,20,22,22],[29,28,28,29,28,29,28,27,28,27,27,27,26,26,26,27,26,26,27,26,26,26,26,26,26,27,26,27,27,26,25,27,27,28,26,27,26,27,27,27,27,26,25,26,26,26,24,23,23,23,23,22,22,20,19,19,18,18,17,17,14,12,10,7,6,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,4,3,4,4,4,4,4,5,5,5,6,7,8,10,11,12,13,14,13,15,15,15,15,17,17,17,19,18,20,22,21,22,23,24,24,24,22,23,23,24,22,23,23,25,24,24,23,24,25,26,25,26,26,25,26,25,25,25,25,25,26,26,26,26,26,27,26,27,27,27,26,27,24,26,26,25,26,26,26,27,23,24,24,24,24,22,19,19,18,16,15,13,12,11,10,8,7,6,5,5,5,5,5,5,5,5,5,6,6,5,6,6,7,7,7,7,8,7,8,9,9,9,9,9,8,8,8,7,7,7,7,8,8,8,9,8,8,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,6,6,6,6,5,5,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,5,6,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,4,3,3,4,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,4,3,4,4,4,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,6,6,6,6,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,3,4,5,6,7,7,8,10,10,9,10,11,12,15,17,17,18,21,18,16,18,19,19,21,20,20,21,21,24,23,23,23,24,23,24,24,23,26,22,23,23,23,23,24,23,24,23,23,22,23,23,22,21,24,24],[28,29,29,29,29,29,28,28,28,27,27,28,27,27,27,27,27,27,27,27,26,27,27,27,26,27,27,27,28,26,26,27,27,28,27,28,27,28,27,27,28,27,26,27,26,26,26,24,25,24,24,22,23,21,21,21,20,20,18,19,16,14,11,9,7,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,1,2,2,1,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,5,5,6,6,8,10,11,11,13,15,16,15,16,18,18,17,19,20,20,21,21,24,24,23,24,25,26,25,26,24,24,24,23,23,23,24,25,23,24,24,24,25,26,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,27,26,27,27,27,27,26,25,26,27,26,26,26,26,27,24,25,25,24,24,23,20,20,20,18,16,16,14,12,10,9,8,7,6,5,5,5,5,5,6,6,6,7,6,6,7,7,7,8,7,8,8,8,9,9,9,9,9,10,9,9,8,8,8,8,8,9,9,9,9,9,9,8,8,8,7,7,7,7,7,7,6,6,6,5,5,5,4,4,4,4,5,4,4,5,5,4,4,5,5,5,5,6,6,6,7,7,6,6,5,4,4,3,3,2,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,6,6,6,5,5,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,7,7,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,6,6,6,6,6,6,6,7,6,6,6,7,7,6,6,6,7,6,5,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,5,6,7,7,9,10,10,10,11,12,13,15,16,18,19,20,18,16,18,20,18,23,19,21,22,21,24,24,23,24,25,23,25,24,24,25,24,24,25,22,23,25,25,24,25,24,22,24,25,22,20,25,25],[29,29,28,29,28,29,28,28,28,27,27,27,26,26,26,27,26,26,27,26,27,27,26,26,27,27,26,26,27,25,26,27,27,28,26,27,25,27,27,26,26,26,25,26,26,25,24,22,23,22,22,21,21,20,19,19,19,18,17,16,14,12,10,7,6,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,7,9,10,9,12,13,14,13,14,16,15,15,17,17,18,18,19,21,22,21,22,23,23,24,25,22,22,22,22,22,22,23,24,22,23,23,25,25,27,24,25,26,25,26,25,25,26,26,25,26,26,26,26,26,26,26,27,26,26,25,26,25,27,27,25,26,25,24,27,23,24,24,23,23,21,20,19,18,17,15,15,14,11,10,8,7,6,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,7,6,7,7,7,7,8,8,8,8,8,7,8,7,7,7,7,7,8,8,8,8,7,7,8,7,7,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,5,5,4,4,3,3,3,3,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,5,5,6,6,5,4,3,3,3,3,3,3,2,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,3,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,4,4,4,4,4,3,3,3,3,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,5,5,5,5,4,5,5,5,4,5,4,4,4,4,5,5,5,5,5,5,6,5,6,5,5,5,6,6,5,5,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,5,6,7,7,8,9,9,10,11,12,12,15,15,17,18,21,18,17,18,19,18,22,18,21,21,21,24,23,24,23,24,23,24,24,24,25,23,23,24,22,22,24,24,24,24,23,22,23,24,22,21,24,24],[28,28,28,28,27,28,28,27,28,26,25,27,25,26,25,26,24,25,26,25,25,26,25,25,26,26,25,26,26,24,25,26,26,27,25,26,25,26,26,26,26,26,24,25,25,25,24,22,22,22,22,21,22,19,19,18,18,18,16,16,13,11,10,8,7,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,3,2,2,2,2,2,1,2,2,1,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,4,4,3,4,4,4,4,4,5,5,6,6,8,9,10,10,12,14,14,12,14,16,14,14,16,16,18,18,17,19,21,20,21,23,23,23,24,22,22,23,23,22,23,23,24,24,23,23,25,25,26,24,25,26,26,26,26,26,26,26,26,27,26,26,26,27,27,26,27,27,26,26,26,24,26,26,25,26,26,25,26,23,24,23,23,22,21,19,17,17,16,15,14,12,11,10,8,7,6,6,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,8,8,8,9,10,9,9,9,9,8,8,7,7,7,7,8,8,9,9,8,9,8,8,8,7,7,7,7,6,6,6,5,5,5,5,5,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,5,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,4,5,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,5,6,7,7,8,9,10,9,10,11,12,15,16,17,18,21,18,18,18,18,18,21,20,20,21,20,23,23,24,23,24,23,24,24,23,25,23,23,25,24,24,24,23,24,23,24,22,23,23,21,21,23,22],[28,28,28,28,28,28,27,28,28,27,27,26,27,26,26,26,25,26,25,26,26,26,26,26,26,26,26,26,26,25,25,26,26,27,26,27,26,26,27,26,27,26,26,26,25,25,24,22,24,23,22,22,22,20,18,20,18,18,18,17,14,12,10,8,7,6,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,4,4,4,5,5,4,4,4,4,5,4,4,5,5,5,6,6,7,9,10,11,12,14,15,13,15,16,15,16,17,17,18,19,19,21,22,22,23,24,25,25,25,23,23,24,23,23,23,25,25,24,24,24,25,26,27,25,26,27,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,25,27,27,26,27,27,26,26,24,25,25,24,23,22,20,19,19,17,15,15,13,12,10,9,8,7,6,6,5,5,5,5,5,5,6,6,6,6,7,7,7,8,7,7,8,9,8,9,10,10,9,10,9,9,8,8,8,7,8,9,9,9,10,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,6,6,6,5,5,4,4,3,3,3,3,3,3,3,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,5,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,5,4,5,5,4,4,5,4,4,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,3,4,4,4,3,4,5,5,7,7,9,10,10,10,11,12,14,16,17,17,19,21,18,18,19,20,19,22,20,21,22,21,25,24,24,24,25,24,25,25,24,25,24,24,24,23,25,26,25,24,25,25,23,24,25,22,21,24,24],[28,29,28,29,28,29,28,28,28,28,27,27,27,26,27,27,26,27,26,27,26,26,27,26,26,27,27,27,27,25,26,27,27,28,27,27,27,28,27,27,27,27,26,27,26,26,24,23,24,24,23,22,23,22,21,22,21,19,19,19,16,14,12,9,8,7,6,5,5,4,4,4,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,2,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,5,5,5,6,6,7,7,8,10,11,11,13,14,15,15,15,18,17,17,18,19,20,21,21,23,24,24,25,25,26,24,26,24,24,26,23,23,24,25,25,24,25,25,26,26,27,26,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,26,28,27,27,28,27,27,27,24,25,25,24,24,22,21,20,19,19,17,16,15,13,12,10,9,8,7,7,7,7,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,9,9,10,10,10,10,9,9,9,9,9,9,9,9,9,10,10,9,9,9,9,8,8,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,7,7,7,7,6,6,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,5,5,5,6,6,7,6,5,4,4,3,4,3,3,3,3,4,4,4,4,4,4,4,5,4,4,4,4,3,4,4,4,3,3,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,5,4,4,4,5,4,4,5,4,4,4,5,5,5,5,4,5,5,4,5,5,5,4,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,3,3,3,4,4,4,4,5,5,4,4,5,5,5,5,5,4,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,6,6,6,6,5,6,5,5,6,6,6,6,6,6,6,6,5,6,6,5,6,5,5,5,5,5,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,6,7,6,6,6,6,6,6,7,7,7,6,7,7,7,7,7,7,7,7,8,7,7,6,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,4,6,6,8,8,9,10,10,11,11,13,13,17,16,18,19,20,19,17,19,20,19,22,19,21,22,20,25,23,25,23,25,23,26,25,24,25,24,25,24,22,23,25,25,23,25,24,22,24,25,22,22,23,24],[28,28,27,28,27,27,28,27,27,26,25,25,26,25,25,26,26,26,26,26,25,26,26,25,26,26,25,26,26,25,25,26,26,26,26,26,24,26,26,26,26,25,24,25,25,25,24,22,23,23,21,21,21,20,20,20,19,18,17,17,14,13,11,9,8,7,6,5,5,4,4,4,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,5,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,6,6,7,7,8,10,11,11,12,14,15,13,14,16,15,16,18,18,18,18,18,20,21,21,23,23,23,23,24,23,22,23,22,21,22,23,23,22,22,22,25,25,25,23,24,25,26,25,25,25,25,25,25,25,26,26,26,26,26,25,26,26,25,26,25,25,26,25,25,26,25,24,26,24,25,24,23,22,21,20,18,18,16,15,15,13,12,11,9,8,7,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,9,9,9,10,11,11,10,10,9,9,8,8,8,8,9,9,9,10,11,10,10,10,9,9,8,8,7,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,7,7,7,7,7,7,6,5,5,4,4,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,5,5,6,6,7,7,6,5,4,4,4,4,4,3,3,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,4,4,5,5,4,4,5,4,4,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,5,5,5,5,6,5,5,5,5,5,5,5,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,5,5,6,5,6,6,6,5,6,6,6,6,6,6,6,5,5,6,6,5,5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,8,8,8,7,7,7,7,7,6,6,7,6,6,6,7,6,5,6,6,6,6,6,7,7,7,7,7,7,7,7,7,8,8,7,7,7,8,7,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,6,7,8,8,10,11,10,10,11,13,13,15,16,16,19,18,18,17,18,18,18,20,18,20,20,21,23,22,24,22,25,23,24,25,24,26,23,24,25,23,22,24,24,23,24,23,22,23,24,22,21,23,24],[28,27,27,27,27,27,27,27,27,25,25,25,25,24,24,25,25,25,25,25,25,25,25,25,25,25,24,25,25,24,24,26,25,26,25,25,24,25,25,25,25,24,24,24,24,24,24,22,22,21,21,20,21,19,19,19,18,18,17,17,14,13,11,9,9,7,6,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,3,3,3,3,3,2,3,2,2,3,3,3,3,3,3,3,3,4,4,3,3,2,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,2,1,1,1,2,2,2,2,2,2,2,3,3,3,3,4,4,5,4,5,5,5,5,6,6,6,6,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,4,3,3,4,4,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,7,7,8,8,10,12,12,12,14,15,15,14,15,16,15,16,17,18,18,18,18,20,20,21,22,22,24,23,24,22,22,23,22,21,22,22,23,22,23,23,24,24,25,23,24,25,25,26,25,25,26,26,26,26,25,26,26,26,26,25,26,26,26,26,26,24,26,25,25,25,25,25,25,23,24,24,23,22,21,20,19,18,16,15,14,13,12,11,10,9,8,7,7,7,7,7,7,7,7,7,7,8,8,8,8,9,10,9,9,11,10,11,11,12,12,11,12,10,10,9,9,9,9,9,10,10,11,12,12,11,10,10,10,9,9,9,9,8,8,8,7,7,7,6,7,6,6,7,7,6,6,7,6,6,6,7,6,6,7,6,6,7,7,8,8,7,7,7,6,6,5,5,4,4,3,4,4,4,3,4,4,4,4,5,5,4,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,5,6,6,6,7,7,7,6,6,5,5,4,4,5,4,4,4,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,6,5,5,5,6,5,6,5,6,5,6,6,6,6,6,5,6,5,6,6,6,6,6,5,5,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,4,3,3,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,5,5,5,5,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,5,5,5,6,6,6,6,6,6,7,6,6,7,7,7,7,7,8,8,8,9,8,8,8,8,8,8,7,7,8,7,7,7,7,7,6,7,6,7,7,7,7,7,7,8,8,8,8,8,8,9,8,8,8,8,8,8,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,7,7,8,8,9,10,11,10,12,12,13,15,15,16,18,18,17,17,19,18,19,20,19,20,20,20,23,21,24,23,24,22,24,25,23,25,23,24,23,23,23,24,23,22,23,23,23,24,23,22,21,23,23],[28,27,27,27,27,27,28,27,26,26,26,25,26,25,25,26,26,26,25,26,26,25,26,25,25,25,26,26,26,24,25,26,26,27,26,27,26,26,26,26,26,25,24,25,25,25,24,22,23,22,22,22,22,21,20,20,19,18,18,17,15,14,12,10,9,8,7,6,6,6,5,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,6,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,4,4,4,3,3,3,2,2,3,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,4,4,3,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,6,5,6,6,6,6,6,5,6,6,6,6,6,7,7,7,8,9,11,11,12,14,14,15,14,15,17,16,16,17,18,20,20,19,21,22,22,23,23,24,24,24,24,22,24,24,22,23,23,23,24,23,24,25,25,26,25,25,26,26,27,27,26,27,26,26,27,27,27,27,27,27,26,27,27,26,26,27,26,27,26,26,26,26,26,26,24,25,24,24,23,22,21,20,19,18,16,16,13,12,12,10,9,8,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,9,9,9,9,10,10,10,11,11,10,11,10,10,9,9,9,9,9,9,10,11,11,11,10,10,9,10,9,9,9,8,8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,7,6,6,7,7,7,7,7,8,7,7,7,6,5,5,4,4,4,3,4,4,3,3,4,4,4,3,4,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,5,5,5,6,6,7,7,6,5,4,4,4,4,4,3,4,4,4,4,4,5,5,6,5,6,5,5,5,5,5,5,5,5,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,4,5,5,4,4,5,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,3,3,3,4,3,4,4,4,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,4,4,4,5,4,4,4,5,4,4,5,4,5,5,5,5,5,5,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,8,8,7,7,8,8,7,7,7,7,8,7,6,7,7,7,6,6,7,7,8,7,7,7,7,7,7,8,7,8,8,8,8,7,7,7,8,7,7,7,7,6,6,6,6,6,6,6,6,5,5,5,6,5,5,5,5,4,5,6,6,8,8,10,11,10,11,11,13,13,15,16,16,18,17,17,17,18,20,17,20,19,19,21,21,23,22,24,22,24,23,24,24,23,24,23,23,22,22,22,24,24,22,23,22,22,21,22,22,21,22,22],[28,28,28,29,28,28,28,27,28,27,27,26,26,26,25,27,25,26,26,26,26,26,26,26,26,26,26,26,26,25,25,26,26,27,26,27,26,26,27,27,27,26,26,26,26,26,24,23,24,23,21,21,22,21,19,21,20,19,17,18,15,13,11,9,8,7,6,5,5,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,3,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,3,4,4,4,5,4,3,3,3,3,3,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,6,5,5,5,4,5,5,5,5,6,6,7,7,7,8,10,10,11,13,13,14,14,15,17,16,16,17,18,19,19,19,22,22,22,22,24,24,25,25,25,22,24,23,23,24,23,24,23,24,24,25,26,27,26,26,27,26,26,26,27,26,26,26,27,26,26,27,26,27,26,28,27,27,27,27,27,27,27,27,27,27,27,28,25,26,26,25,24,23,22,20,19,18,16,16,15,12,11,10,9,8,6,7,6,6,6,6,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,10,11,10,10,10,9,9,9,8,8,8,8,9,10,10,11,10,10,10,9,9,8,8,8,8,8,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,7,7,7,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,6,6,6,5,4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,4,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,7,7,7,6,7,6,7,7,6,6,6,7,6,5,6,6,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,5,6,7,7,9,10,10,10,11,13,14,16,16,16,19,19,18,17,18,19,19,22,20,22,22,21,23,23,24,24,24,22,24,25,24,25,24,25,25,23,23,25,24,24,24,24,22,24,24,23,21,24,24],[28,28,28,29,28,28,28,27,28,27,27,27,27,26,26,26,26,26,26,26,25,26,26,25,25,26,25,26,26,25,26,26,26,27,26,26,25,26,26,26,26,25,25,25,25,25,23,22,23,22,21,21,22,21,18,21,19,18,17,17,15,14,11,9,8,6,6,5,5,4,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,2,3,3,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,4,5,5,5,4,5,4,5,5,5,5,5,5,6,7,7,8,10,11,11,12,13,14,12,14,16,15,15,17,18,19,19,20,22,22,21,23,23,24,24,24,22,23,24,22,22,22,23,23,23,23,23,25,25,26,24,25,25,25,26,25,26,26,26,26,26,26,26,26,27,27,26,27,27,27,26,26,26,26,26,26,26,26,25,27,24,24,25,24,23,22,20,21,20,19,17,16,15,13,11,10,8,7,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,8,7,8,8,8,9,9,10,9,9,9,8,9,8,8,8,8,8,9,8,9,9,8,9,9,8,8,8,7,7,7,7,7,6,6,6,6,5,5,5,4,4,4,5,4,4,4,5,4,4,5,5,5,5,5,6,6,6,6,6,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,4,4,4,5,5,6,6,5,4,3,3,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,4,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,3,4,4,4,5,4,5,5,4,5,5,4,5,5,5,4,4,5,5,5,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,5,6,6,5,6,6,5,5,5,5,6,6,6,6,6,6,7,6,6,6,6,6,6,7,6,6,6,6,6,6,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,5,6,7,7,9,10,11,11,11,14,14,17,17,18,20,22,19,18,20,20,19,23,21,23,24,22,25,25,25,24,25,25,26,26,25,26,25,25,25,23,25,26,25,25,25,25,22,25,24,23,22,24,23],[28,27,27,28,28,28,28,27,27,26,26,25,26,25,25,26,26,27,26,26,26,26,26,26,26,26,25,25,26,25,24,26,25,26,25,25,25,25,25,24,25,25,25,25,23,24,24,22,22,21,21,21,21,20,20,20,19,18,17,16,14,13,11,9,8,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,6,6,7,7,8,10,10,10,12,12,13,12,14,14,16,15,17,17,18,18,19,21,22,20,22,22,24,24,24,22,21,23,21,21,22,22,24,23,23,23,25,25,26,24,25,24,25,26,25,25,25,25,25,25,25,25,25,25,25,25,26,26,25,26,25,25,25,26,26,26,25,25,27,24,25,25,24,23,23,21,19,20,17,16,16,14,12,11,9,8,7,6,6,6,6,6,6,6,6,6,6,7,6,7,7,7,7,7,7,8,9,8,8,10,9,9,9,8,8,7,7,8,7,7,8,8,9,10,9,10,9,8,8,7,7,7,7,7,7,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,7,7,6,6,6,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,5,5,5,6,6,6,5,4,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,6,6,5,5,6,6,5,5,5,5,5,5,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,5,5,5,6,6,6,6,6,6,7,6,7,6,6,6,7,7,6,6,6,7,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,5,4,4,4,4,4,4,5,6,7,7,9,10,11,10,10,12,13,15,16,16,18,20,16,17,18,19,18,22,20,21,21,21,24,24,23,23,25,22,23,23,24,23,21,24,24,22,22,23,23,23,23,23,22,21,24,23,22,22,23],[28,27,27,27,27,27,27,27,27,25,25,24,25,24,24,25,24,25,24,25,25,25,24,25,26,24,25,25,25,24,24,25,25,26,24,25,24,25,25,25,25,25,24,25,24,24,23,22,22,22,20,21,21,20,18,19,19,17,17,16,13,12,10,8,8,7,6,5,5,4,4,4,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,3,3,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,5,5,5,5,6,6,6,7,8,9,11,11,11,12,14,14,12,14,15,15,15,16,17,18,17,18,20,20,20,22,22,24,22,23,23,21,23,22,21,22,22,22,23,22,22,24,24,25,24,25,25,25,26,25,25,25,25,25,26,25,26,26,26,26,25,26,26,26,25,26,24,25,25,25,26,25,25,26,24,25,24,23,23,21,20,19,19,17,16,15,13,12,11,9,8,7,7,6,6,6,6,6,6,6,6,6,6,6,6,7,7,8,7,8,8,9,9,9,10,9,9,9,9,8,7,7,7,7,7,8,9,9,10,9,10,9,9,9,8,8,7,7,7,7,6,6,6,6,5,6,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,4,4,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,3,4,4,3,4,4,3,3,4,4,3,4,4,4,4,3,4,4,4,4,4,5,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,6,7,6,6,6,6,6,6,6,6,5,5,5,6,6,6,6,6,6,6,6,7,6,6,6,7,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,3,4,5,6,7,7,9,10,10,9,11,11,12,15,14,15,17,17,17,16,18,18,18,21,18,20,20,20,23,21,22,23,23,20,23,23,23,23,22,23,23,22,22,23,23,22,23,22,22,23,23,22,20,22,22],[29,28,29,29,28,29,28,28,28,28,27,27,27,26,26,27,26,27,26,26,26,26,26,26,26,26,26,26,27,25,25,26,26,26,26,26,26,26,26,26,26,25,25,25,25,25,23,23,23,23,21,21,23,20,19,21,19,18,18,18,15,13,11,9,7,6,5,5,5,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,4,4,4,5,5,4,5,5,5,6,7,7,8,10,10,11,12,13,14,13,15,16,15,15,17,17,18,19,19,21,22,22,23,24,24,24,25,24,23,25,23,23,24,24,24,24,24,24,25,25,27,25,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,26,28,27,27,27,27,26,27,27,26,27,27,26,27,24,25,25,25,24,23,21,20,19,18,17,16,15,13,11,10,8,7,6,6,6,6,6,5,6,5,6,6,6,6,7,7,7,8,7,8,8,8,9,9,9,9,9,9,8,8,8,7,8,7,8,8,9,9,9,9,9,8,9,8,8,7,7,7,7,6,6,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,5,5,4,4,3,3,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,4,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,6,5,5,6,5,5,5,5,5,6,6,6,5,6,6,6,6,6,6,6,6,6,5,6,5,6,6,5,5,5,5,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,5,5,6,6,9,11,11,10,12,15,15,18,18,18,20,21,20,19,20,20,20,23,21,23,24,22,25,25,25,25,25,23,25,25,25,25,25,24,25,23,25,25,25,24,25,25,24,25,26,24,23,26,25],[28,28,28,28,28,28,28,27,28,27,26,26,26,25,25,25,25,26,25,26,25,25,26,26,25,26,25,26,26,25,25,26,26,27,25,26,25,26,26,26,26,25,25,25,25,25,23,22,23,22,21,21,21,20,19,19,19,18,17,16,14,13,11,8,7,6,5,5,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,3,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,4,4,5,5,4,4,4,5,5,5,4,5,5,6,6,7,8,10,10,10,12,13,14,12,14,16,15,15,17,18,18,17,19,21,21,21,22,23,24,24,24,22,22,24,22,22,22,23,23,23,23,23,24,24,26,24,24,25,25,26,25,25,25,25,25,25,25,26,26,26,26,26,27,26,26,26,26,25,26,26,25,25,26,25,26,23,25,25,24,23,22,21,20,19,18,17,15,15,12,11,9,8,7,6,6,6,6,6,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,8,8,8,7,7,7,7,8,8,8,9,8,9,8,8,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,5,5,4,4,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,4,4,5,5,5,5,4,4,3,3,2,3,2,2,2,3,3,3,3,3,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,3,3,2,3,3,3,3,4,4,4,4,5,5,4,4,5,5,5,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,5,6,6,5,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,5,6,6,8,9,10,10,10,12,13,16,15,17,19,20,18,18,19,21,17,22,19,22,21,21,24,23,23,23,24,22,25,24,23,23,23,23,23,20,23,23,23,22,23,23,22,22,24,21,22,23,23],[27,27,27,27,27,27,27,27,27,25,25,24,25,24,24,25,25,26,25,26,26,26,26,26,26,25,25,25,25,25,25,26,25,26,26,26,25,25,26,25,25,25,24,24,24,24,24,22,22,22,20,20,21,19,18,19,18,17,17,16,14,13,11,9,8,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,4,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,4,5,5,6,5,6,6,7,7,8,9,11,11,12,13,13,15,12,14,16,15,15,17,18,18,18,18,20,21,20,23,22,24,22,24,22,22,22,22,21,21,23,23,22,22,22,24,24,25,24,25,24,25,26,25,25,25,25,25,25,25,26,26,25,26,26,25,25,26,25,25,25,25,25,24,26,25,26,26,24,25,25,24,23,21,21,20,19,19,15,16,13,12,11,10,9,8,7,6,6,6,6,6,6,6,6,6,6,7,7,7,7,8,7,8,9,9,9,9,10,10,10,9,9,8,8,7,7,7,8,8,9,9,10,10,10,9,9,9,8,8,8,7,7,7,7,6,6,6,6,6,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,6,6,6,5,4,3,3,3,3,3,3,3,3,4,3,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,4,3,4,4,4,4,5,5,5,5,6,6,5,5,6,6,5,5,5,5,5,5,4,4,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,6,7,6,6,6,7,6,6,7,6,5,6,5,6,6,6,6,6,6,7,6,7,6,7,6,7,7,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,5,6,7,7,9,10,10,10,10,13,13,16,16,17,19,19,18,17,19,19,19,21,20,22,21,21,23,22,23,23,24,22,23,24,24,25,23,24,24,23,22,23,24,24,24,23,22,22,23,22,20,22,23],[28,28,28,28,28,28,28,27,27,26,26,25,26,25,25,25,25,26,25,26,26,25,26,26,26,26,26,26,26,25,25,26,26,27,26,27,26,26,27,26,27,26,25,26,26,25,25,23,24,23,21,21,22,19,19,20,19,17,17,17,14,13,10,9,7,7,6,5,5,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,6,6,6,7,7,9,10,10,11,12,12,14,13,14,16,16,16,17,19,19,19,20,22,22,22,23,24,25,24,25,24,22,25,23,22,23,23,24,24,24,24,26,25,27,26,26,27,27,27,27,26,27,27,27,27,27,27,27,27,27,27,28,27,27,27,27,26,27,27,27,27,27,27,27,25,26,26,24,24,23,21,20,20,18,17,17,14,13,11,10,9,7,7,6,6,6,6,6,6,6,6,6,6,7,6,7,8,8,7,8,9,9,9,10,10,10,9,10,9,9,8,8,8,8,8,9,10,10,10,10,10,9,9,9,8,8,8,8,8,7,7,7,7,6,6,6,5,5,4,4,5,5,4,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,5,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,4,3,3,3,2,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,4,4,3,3,3,3,3,4,3,3,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,4,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,4,5,5,4,5,5,5,4,5,5,5,5,4,4,5,5,4,5,5,4,5,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,6,6,7,7,6,6,7,7,6,6,6,5,6,6,6,6,6,6,5,5,5,5,6,6,6,6,6,6,6,7,6,6,6,7,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,5,6,7,7,9,11,10,9,11,12,13,17,16,17,20,19,18,18,18,20,19,22,21,21,22,21,24,24,25,24,25,23,25,26,25,25,24,25,25,23,24,25,25,25,25,23,24,23,25,24,22,24,25],[29,28,29,29,28,29,28,28,28,27,27,27,27,26,26,26,26,27,25,27,26,25,26,26,25,26,26,26,27,25,25,26,26,27,26,27,26,26,26,26,26,26,25,25,25,25,23,22,23,22,21,21,21,19,18,20,19,18,17,17,15,13,11,9,8,6,6,5,5,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,4,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,1,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,4,5,4,5,5,5,5,5,6,6,7,7,8,10,10,11,12,13,14,13,14,16,15,15,17,18,18,18,20,21,22,22,23,23,25,23,25,23,22,24,22,21,23,24,23,23,23,24,25,24,26,25,26,25,26,26,26,25,26,26,26,26,26,26,26,26,27,26,27,26,27,26,27,25,26,27,26,27,26,25,27,24,24,25,24,23,23,21,20,20,19,17,17,15,14,12,10,9,7,6,6,6,6,6,5,6,6,6,6,6,6,7,7,7,8,7,8,8,8,8,9,9,9,9,9,9,8,8,8,8,7,8,8,8,9,9,9,9,8,9,8,8,7,7,7,7,7,6,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,6,6,6,6,6,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,4,4,5,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,6,6,6,5,5,5,5,5,6,5,5,6,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,5,6,6,7,9,11,11,11,11,14,15,18,18,18,21,23,20,19,20,22,20,24,22,22,22,22,25,24,25,24,26,24,26,26,25,25,25,25,26,23,24,26,25,24,25,25,23,25,26,23,23,25,24],[29,28,28,28,28,28,28,28,27,27,27,26,27,26,26,26,27,28,26,28,27,26,27,27,26,27,27,27,27,27,26,27,27,27,26,27,27,27,27,27,27,27,26,26,25,26,25,24,24,24,22,22,22,21,20,21,19,18,17,16,15,13,11,9,8,7,6,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,3,3,3,3,4,3,3,3,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,4,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,5,6,6,6,5,5,5,5,6,6,5,6,6,7,7,8,9,11,11,11,12,14,14,13,14,17,15,17,18,19,19,20,20,23,23,23,25,24,25,24,25,24,23,24,22,22,23,24,24,23,23,24,25,25,27,25,26,25,25,26,26,25,25,25,26,26,26,26,26,26,27,26,27,27,26,26,26,26,27,27,27,27,26,26,27,25,26,26,25,24,23,22,21,21,19,17,17,15,13,13,10,9,8,7,6,7,6,6,6,7,6,7,7,7,7,7,7,7,8,8,8,8,9,9,9,10,10,10,10,9,9,9,8,8,8,8,9,9,10,11,10,11,10,10,8,8,8,8,7,8,8,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,7,7,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,4,5,6,6,6,5,4,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,6,5,5,6,6,5,5,5,5,5,5,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,7,6,7,6,6,6,7,7,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,6,7,8,9,10,12,11,10,14,15,17,17,18,19,22,19,18,20,22,18,23,21,21,23,22,25,25,24,24,26,24,25,25,24,25,24,24,26,23,23,24,24,24,24,24,22,24,25,24,23,24,24],[27,27,27,27,27,27,27,26,27,25,25,24,25,24,24,24,24,25,24,25,25,24,25,25,25,25,25,25,25,25,24,25,26,27,24,26,25,25,25,24,26,26,25,24,24,24,23,22,23,20,20,20,20,18,17,19,18,16,17,16,14,13,11,9,9,8,7,7,6,6,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,4,4,4,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,3,2,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,5,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,6,6,6,7,7,7,6,6,6,6,6,6,6,6,7,7,8,8,10,12,12,12,13,12,14,12,15,15,15,17,18,18,17,18,19,21,21,21,23,22,24,22,23,22,21,22,22,22,22,22,22,22,22,22,24,24,25,24,25,26,26,26,25,25,25,25,25,25,25,26,26,26,26,26,27,24,26,26,26,25,25,25,25,26,26,26,26,25,25,24,24,24,23,22,20,20,17,17,16,14,13,12,11,10,9,8,8,7,7,7,6,7,7,7,8,7,7,8,8,8,9,8,9,10,10,10,11,12,11,11,11,10,10,8,8,9,9,9,11,11,10,11,11,11,10,10,10,9,9,9,8,8,8,8,7,8,7,6,6,6,6,5,5,6,5,5,6,6,5,6,6,6,6,6,6,7,8,7,7,7,6,6,5,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,5,4,3,3,3,3,3,3,3,3,4,3,4,4,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,5,5,4,4,5,4,4,4,4,4,4,5,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,5,5,5,6,5,6,6,6,6,5,6,7,6,6,6,6,5,5,4,4,4,4,5,4,4,5,4,4,4,5,4,4,5,5,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,7,8,8,8,7,8,7,7,7,7,7,7,7,7,6,6,6,7,7,7,7,7,7,8,7,8,7,7,7,8,7,7,7,7,7,7,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,6,7,8,8,10,11,10,9,11,12,13,16,17,17,20,19,18,16,18,18,19,19,19,19,20,21,22,23,23,22,23,22,23,23,23,24,22,23,24,22,21,23,23,23,24,24,22,22,24,23,20,23,23],[29,28,28,28,28,28,28,28,27,27,26,26,27,26,26,26,26,27,25,27,27,26,27,27,26,27,27,27,27,27,25,27,28,28,27,28,27,27,28,27,27,27,26,26,26,26,24,24,24,22,22,22,22,19,19,20,19,18,18,18,15,14,11,9,8,8,6,6,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,6,6,6,6,6,7,7,8,8,10,11,12,12,13,14,15,13,15,18,16,17,20,21,19,20,22,23,23,24,24,25,27,25,26,24,23,25,24,22,24,23,24,24,23,24,26,25,26,25,27,26,27,27,27,27,26,27,27,27,27,27,27,27,28,27,28,27,28,27,27,26,27,27,26,27,27,27,27,26,26,26,26,23,24,22,22,21,19,18,18,15,14,13,11,10,9,7,7,7,7,7,6,7,6,7,7,7,7,8,8,9,9,8,9,10,10,10,11,12,12,11,11,10,10,9,9,9,9,10,10,11,12,12,12,11,10,10,11,10,9,9,9,9,8,8,8,7,7,7,6,6,6,5,5,6,5,5,6,6,5,5,6,6,6,6,6,7,7,8,7,7,7,6,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,6,6,6,5,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,6,5,6,5,6,6,6,6,6,7,8,7,7,7,7,6,7,6,6,7,7,6,6,7,6,6,6,6,6,7,7,7,6,6,7,7,7,7,7,7,7,7,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,5,4,4,5,4,4,5,5,4,4,5,6,7,8,8,10,12,12,11,12,14,15,18,17,19,21,21,21,19,19,22,21,23,21,22,22,24,25,25,26,25,25,24,26,25,25,27,25,25,26,25,25,26,24,25,26,25,24,24,25,25,22,24,26],[29,29,28,28,28,28,28,28,27,27,27,26,27,26,27,26,26,27,25,27,26,25,26,26,26,26,27,26,27,26,25,26,27,27,26,27,27,26,27,27,27,26,26,26,26,26,24,23,24,23,22,21,22,21,20,20,19,18,18,18,16,14,12,10,9,8,7,6,6,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,2,3,3,3,2,3,3,3,3,3,4,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,5,4,4,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,7,6,6,6,6,7,7,6,7,7,7,8,8,9,11,12,11,13,14,15,14,15,18,17,17,19,20,19,20,21,23,22,23,24,24,25,25,25,24,22,24,22,22,23,23,24,24,24,24,25,25,27,25,26,25,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,27,27,27,27,27,27,26,26,26,25,24,24,23,23,22,19,19,18,16,14,13,12,10,8,7,8,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,10,10,10,10,11,11,10,11,10,10,10,10,9,9,9,10,10,11,11,10,11,10,10,10,9,9,9,9,8,8,8,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,8,8,7,7,7,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,7,5,4,3,3,2,3,3,3,3,3,4,3,4,4,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,5,6,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,6,7,6,6,7,8,8,7,7,7,7,6,7,7,6,7,7,6,7,7,6,6,6,6,6,7,7,7,7,7,7,7,8,7,7,7,7,8,7,7,7,7,7,7,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,6,7,8,8,9,11,11,11,11,15,16,18,16,18,21,22,20,20,21,22,20,24,21,22,24,22,24,25,25,25,26,24,26,26,25,26,26,26,26,24,25,26,25,25,25,25,23,26,26,24,24,26,24],[27,28,27,27,28,27,28,28,26,26,26,24,27,25,25,26,27,27,25,27,27,25,26,27,26,26,27,27,27,27,26,27,27,28,26,27,26,27,28,27,27,26,26,26,26,26,24,24,24,23,20,21,22,20,19,21,20,18,18,18,17,15,13,12,10,9,9,9,8,7,7,7,6,5,5,5,5,5,5,5,5,4,5,4,4,4,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,7,7,6,6,6,6,7,6,6,6,6,6,6,5,5,5,4,4,5,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,3,2,3,2,2,1,1,1,1,0,1,2,2,4,4,4,4,5,4,5,5,6,5,5,4,4,4,4,3,3,3,2,3,3,3,3,4,3,3,3,4,4,4,4,4,5,4,5,5,6,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,3,3,3,3,2,3,3,2,2,3,3,3,3,4,4,4,3,4,3,3,2,3,3,4,3,4,4,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,7,7,6,7,7,7,8,7,8,8,9,8,8,8,8,8,8,7,8,9,8,8,8,9,9,10,10,11,12,13,13,14,15,16,15,16,18,17,17,19,20,19,21,22,23,23,22,24,24,25,24,25,24,23,24,23,22,23,24,24,24,25,24,26,25,27,26,26,26,26,26,27,27,26,27,26,26,26,26,27,27,27,27,27,27,27,26,27,26,26,26,27,27,26,26,28,26,26,26,25,24,23,24,22,21,20,19,19,17,15,15,13,12,10,9,9,9,9,9,9,9,9,9,10,9,10,10,10,10,11,11,11,12,13,12,12,13,13,13,12,11,11,11,11,10,10,11,11,12,14,14,13,14,13,13,13,12,11,11,11,11,11,10,10,9,10,9,9,9,8,7,7,8,8,7,8,8,8,8,9,8,8,9,10,9,9,10,9,9,8,9,7,7,6,6,6,5,5,5,5,5,4,5,5,4,4,5,4,4,4,5,4,4,4,5,5,4,5,5,5,5,5,6,5,5,6,6,6,7,8,8,8,7,6,5,5,4,5,5,4,5,6,5,5,6,6,7,7,7,7,7,6,7,7,6,6,6,6,6,5,5,6,5,5,5,4,5,5,5,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,7,7,6,6,6,5,5,6,6,5,5,6,5,5,6,6,6,6,5,6,6,6,6,6,6,7,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,5,5,5,6,6,6,6,6,7,7,7,8,7,8,9,8,8,8,8,8,8,8,8,7,7,7,6,6,5,6,6,6,5,6,6,5,6,6,6,6,7,6,6,6,7,7,8,7,8,7,7,8,8,7,7,7,8,7,7,7,8,8,7,7,8,8,7,8,8,7,7,7,7,6,7,7,7,6,7,8,7,7,8,8,8,8,8,8,8,8,8,9,10,9,9,10,9,9,9,9,8,9,9,8,9,9,9,8,8,8,8,9,9,9,8,9,10,9,9,8,8,9,10,10,9,9,8,10,9,8,9,8,8,8,7,8,7,7,7,7,7,7,7,7,6,7,7,6,6,6,7,8,9,10,11,13,14,13,14,15,17,18,17,18,21,20,20,20,22,23,19,23,21,21,23,22,25,26,25,24,24,24,25,26,25,26,25,26,26,25,24,25,26,26,26,24,25,26,26,25,23,25,25],[28,28,28,28,28,28,28,27,28,27,26,26,27,26,26,27,27,27,27,27,27,26,26,27,26,26,28,27,27,27,26,26,28,29,27,27,27,28,28,27,28,27,26,26,27,27,25,25,25,24,23,24,23,21,20,22,21,20,19,19,18,15,14,13,12,11,10,10,9,9,8,8,7,7,7,7,7,7,7,7,7,7,7,6,5,5,5,6,5,5,6,6,5,6,6,5,6,6,6,5,7,7,6,6,8,7,6,7,7,8,8,9,8,8,8,8,8,8,8,7,7,7,6,6,6,6,6,5,5,5,5,4,4,4,4,5,4,3,4,4,4,4,4,5,6,4,5,5,5,6,6,5,6,8,6,8,7,7,8,8,9,8,8,8,8,8,8,7,7,7,7,6,6,6,6,5,5,6,5,5,5,6,4,4,5,3,3,3,3,2,2,2,2,1,0,1,2,3,4,3,5,5,4,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,5,5,6,5,6,6,6,6,7,7,7,8,9,7,7,8,7,7,7,7,6,7,6,6,5,6,5,5,4,4,5,5,5,4,5,5,4,4,3,4,3,4,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,4,4,4,4,5,5,4,4,5,5,5,5,5,6,5,5,6,7,6,7,7,7,8,8,8,8,8,8,8,10,9,9,9,9,10,10,9,9,10,11,9,10,9,10,10,10,10,10,10,11,11,12,12,13,13,14,15,15,16,17,17,19,19,19,21,22,22,22,23,24,25,25,26,26,27,25,27,26,24,26,24,24,25,25,25,25,27,26,28,26,28,27,27,27,27,27,27,27,27,28,28,27,27,28,28,28,28,27,28,28,28,28,28,28,27,28,28,28,28,28,28,27,26,26,26,25,26,25,22,23,21,21,21,18,17,17,15,14,12,11,10,11,11,10,10,11,10,11,12,11,11,12,12,13,13,12,13,14,14,14,15,16,16,15,15,13,14,12,12,13,13,14,14,14,16,16,15,16,15,15,15,13,14,14,13,13,13,12,12,12,11,10,11,11,10,9,9,10,9,9,9,10,9,9,10,9,9,9,10,10,10,10,10,10,10,10,8,8,7,6,6,6,5,6,6,5,4,6,5,5,4,5,5,5,5,5,6,4,5,6,6,5,6,6,5,6,7,7,6,6,6,7,7,8,8,8,8,7,6,5,4,5,5,4,4,5,5,5,6,6,7,6,7,8,8,8,7,8,8,7,7,7,7,6,6,7,7,5,6,7,6,5,7,7,5,5,6,6,5,6,6,6,5,6,6,6,6,8,7,7,7,8,7,7,7,7,7,6,7,7,6,6,7,7,6,7,7,7,7,6,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,7,8,8,8,7,8,7,8,7,8,7,8,7,7,8,8,8,8,9,8,9,9,10,9,8,9,10,9,9,9,9,9,8,7,8,7,8,7,8,7,7,7,7,7,7,7,7,8,7,8,8,8,8,9,9,9,9,9,9,9,8,9,9,9,9,9,9,9,8,8,9,9,9,8,9,9,9,9,8,9,8,8,9,8,8,9,9,9,9,9,9,10,9,10,10,10,9,10,10,11,11,10,11,11,10,11,11,10,11,10,10,10,11,10,10,11,10,10,11,11,10,10,10,11,10,11,10,10,10,11,11,10,10,9,10,9,9,9,10,10,9,9,9,8,8,8,8,7,7,8,8,6,8,7,6,6,7,8,9,10,10,12,14,13,13,14,14,16,18,18,19,22,22,20,19,21,21,21,24,21,22,23,22,25,25,26,25,26,24,26,26,25,26,25,25,27,25,25,26,26,26,26,25,25,26,26,26,23,26,26],[29,28,28,28,29,28,28,29,28,27,28,26,28,28,27,27,28,28,26,28,27,26,27,28,26,27,28,27,27,28,26,27,29,29,28,29,28,28,29,28,29,28,28,27,28,28,26,26,27,26,24,26,25,24,22,24,24,22,21,21,19,17,17,16,13,14,13,12,11,13,11,11,10,10,10,10,9,9,9,10,10,9,10,9,8,8,9,9,9,10,9,9,10,9,9,11,10,9,9,10,10,10,8,8,10,9,9,9,10,9,11,11,10,10,11,11,10,11,10,10,9,9,8,9,8,8,7,7,8,7,7,7,5,5,6,7,6,5,6,6,5,6,7,7,7,9,8,9,10,10,9,8,10,9,9,10,10,9,10,10,10,11,10,10,11,10,10,10,10,9,9,10,9,8,8,8,7,7,7,8,8,7,7,6,6,6,3,4,4,3,2,3,3,2,1,0,1,2,3,3,4,6,5,4,5,5,5,6,5,6,4,4,5,5,5,5,7,7,4,7,8,8,9,8,8,9,10,9,9,9,8,10,10,10,10,11,10,10,10,9,10,10,9,9,10,9,8,8,9,8,7,8,8,7,7,7,5,6,7,6,7,7,7,7,6,8,7,6,8,6,6,5,6,5,7,5,5,5,4,4,5,6,7,8,8,6,8,8,8,9,9,9,10,10,9,10,8,10,10,10,11,10,11,11,11,11,12,12,12,11,13,13,12,12,13,13,14,14,13,14,14,13,12,13,12,13,14,14,12,13,14,14,12,13,15,15,16,17,16,17,18,19,20,22,22,21,23,24,25,24,25,27,26,27,28,27,27,27,27,27,26,27,26,25,26,26,27,26,26,27,28,28,29,28,28,28,28,28,28,28,28,28,28,28,27,28,29,29,28,28,29,29,29,28,28,28,28,28,28,29,29,28,28,28,28,27,27,27,26,26,26,24,23,23,22,21,19,20,17,17,15,14,14,14,13,14,15,14,17,14,16,15,14,15,15,15,16,16,16,17,16,18,18,19,18,19,18,17,15,16,17,15,16,17,16,16,18,19,18,19,18,18,17,16,16,17,16,16,15,15,14,15,15,14,15,14,13,14,13,14,13,14,13,13,13,13,13,13,13,13,13,13,14,13,12,12,12,13,11,11,11,9,10,9,9,11,10,8,8,11,8,10,8,9,9,9,10,9,9,8,10,9,7,9,11,8,11,10,9,10,9,9,9,9,8,10,10,9,10,9,8,7,6,7,9,6,7,9,8,8,7,7,8,9,9,10,10,11,10,9,11,11,9,10,10,9,9,9,10,10,9,10,10,12,10,10,11,10,12,11,11,11,11,11,11,11,10,11,10,11,11,11,12,12,11,10,12,10,11,13,11,10,10,11,10,9,10,10,11,10,10,11,12,10,11,12,11,10,12,10,11,11,11,11,11,11,12,10,10,10,11,10,10,11,9,11,10,10,12,11,10,11,11,11,11,11,11,12,11,12,12,11,11,11,11,12,12,12,11,12,12,11,11,11,11,13,11,12,11,11,11,12,11,12,11,11,13,11,11,11,11,12,12,13,12,12,12,12,12,12,12,13,11,12,12,12,12,12,11,12,12,11,11,12,11,12,11,12,12,12,12,13,13,12,12,12,12,12,14,13,12,12,13,12,13,14,13,13,13,13,14,13,14,14,13,14,13,13,13,14,12,14,15,15,12,15,13,14,13,13,14,12,13,13,13,13,14,15,12,14,12,14,13,12,13,13,12,13,12,11,11,12,11,11,12,12,12,12,11,12,11,11,10,9,11,11,12,14,15,16,15,15,17,16,18,19,19,21,22,23,23,21,22,23,23,25,24,23,25,24,26,27,27,27,28,27,27,27,27,27,27,26,28,27,26,25,27,27,27,27,27,27,28,27,26,27,27],[28,27,28,28,28,28,28,27,27,27,26,25,26,26,26,26,26,26,25,27,26,25,26,27,26,27,27,26,27,27,26,27,28,28,27,28,27,27,28,27,28,27,27,26,27,27,25,24,26,25,22,23,24,22,21,23,22,20,21,20,19,17,16,15,12,13,13,11,11,11,10,10,9,9,8,9,8,8,9,8,9,9,8,7,7,7,7,8,7,7,8,7,7,8,7,8,8,8,8,8,9,8,8,8,10,9,8,9,10,11,10,10,10,9,10,11,11,10,10,10,10,10,9,9,9,10,8,7,8,8,7,7,6,5,5,5,6,5,6,6,6,6,7,7,8,8,7,8,7,9,9,9,10,10,9,10,10,10,10,10,10,9,10,10,9,9,9,9,9,9,9,9,8,8,9,8,7,7,7,8,7,7,6,6,5,5,4,4,4,3,3,4,3,2,2,1,0,1,2,1,2,2,3,3,3,4,4,4,4,5,4,3,3,5,5,4,5,6,6,6,7,7,7,7,9,10,9,8,9,9,8,9,9,9,10,11,10,10,10,10,9,9,9,9,10,9,9,7,9,8,7,7,7,7,7,7,5,6,6,6,6,6,7,6,6,6,6,5,5,6,7,5,4,6,6,4,4,3,3,3,4,5,6,7,7,8,7,7,7,8,8,8,8,8,9,9,9,9,8,9,10,10,10,11,10,10,11,11,11,11,13,14,12,11,12,12,13,13,14,13,13,13,12,12,11,11,13,12,11,13,14,14,13,14,15,15,16,17,16,16,17,19,20,20,20,20,21,21,23,23,24,25,26,25,26,26,27,26,26,26,24,25,25,25,25,25,25,26,26,25,28,26,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,29,28,28,28,27,28,27,28,28,28,28,28,28,28,27,27,27,26,24,25,24,23,23,22,22,19,18,19,17,16,15,15,14,14,14,14,13,14,14,14,13,15,15,14,14,16,16,14,14,17,16,16,16,19,18,18,18,16,17,15,15,15,16,16,17,17,18,18,18,19,18,18,17,15,16,16,16,16,16,15,15,15,15,14,15,12,13,12,12,12,12,12,12,12,12,12,12,12,11,11,12,11,11,12,12,12,11,11,10,10,9,9,9,8,8,9,8,7,7,8,8,7,7,8,7,7,8,7,8,7,8,7,8,7,8,8,8,8,7,7,7,8,7,8,7,8,9,8,9,8,6,6,5,5,6,5,5,7,6,6,6,6,7,7,7,8,8,9,7,7,8,8,7,8,8,7,7,8,9,8,7,8,8,7,8,8,8,8,8,8,9,9,9,9,9,10,8,10,11,10,10,11,10,11,10,9,11,9,10,9,10,8,8,9,9,8,7,8,9,10,9,7,10,9,8,8,10,8,8,9,9,10,9,9,9,9,9,8,7,8,8,8,9,8,9,10,9,9,10,9,10,9,10,10,9,10,9,10,9,11,9,8,10,11,10,11,10,10,10,10,10,9,9,8,8,10,8,9,9,9,9,9,9,10,10,10,11,10,10,10,10,11,11,10,11,11,10,10,11,11,10,10,10,11,12,10,10,11,11,10,11,11,10,10,11,11,11,11,11,11,11,12,11,12,11,11,12,12,11,11,12,12,12,11,12,13,13,12,13,13,13,12,14,13,12,13,13,13,13,14,12,13,13,14,13,14,14,13,13,12,13,13,14,13,13,12,13,13,12,11,10,11,11,12,11,11,11,10,9,11,10,9,9,10,10,9,9,10,9,9,9,9,9,9,9,10,11,11,14,13,14,15,15,17,17,18,20,20,23,21,22,21,22,22,21,23,22,22,25,22,25,24,26,25,26,24,26,26,26,27,25,25,27,26,25,26,26,26,26,26,25,26,27,26,24,26,27],[28,28,28,28,28,29,29,27,28,27,27,27,27,26,27,26,27,26,26,27,26,26,27,27,26,27,27,26,28,26,25,27,28,28,27,28,27,27,28,27,28,27,27,27,27,27,25,25,26,25,24,23,24,22,20,22,21,21,20,20,18,17,15,13,11,12,11,10,10,9,9,8,7,7,7,8,7,8,8,7,7,8,7,6,6,6,5,6,6,6,6,6,6,7,6,7,7,7,7,8,8,7,7,7,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,9,7,6,7,6,6,6,6,5,5,6,6,5,5,5,5,5,6,7,8,6,7,7,6,8,8,8,8,9,8,9,9,9,10,9,9,9,10,9,9,8,9,8,8,9,9,8,7,8,8,7,8,7,8,7,6,6,6,7,6,7,4,5,5,4,4,3,3,3,1,1,1,0,1,1,1,2,2,3,3,4,4,4,5,4,4,4,4,5,4,5,5,5,5,6,7,7,9,8,7,7,7,7,8,8,7,8,8,9,9,10,9,9,9,9,8,8,8,8,8,7,7,8,7,7,8,7,7,7,7,7,7,7,6,6,6,6,5,6,5,6,6,5,5,3,4,4,4,5,5,3,4,3,3,3,4,5,4,5,5,6,6,5,6,8,6,6,7,6,6,8,7,7,7,8,7,8,8,8,8,9,8,8,10,10,10,10,11,11,11,11,11,12,11,11,11,11,10,10,9,10,11,10,10,11,11,12,12,12,12,14,14,14,15,16,17,18,19,20,19,19,21,22,23,23,24,25,25,26,27,27,28,26,27,26,25,27,24,25,26,26,25,26,26,27,28,27,28,27,28,29,29,28,28,28,28,29,28,28,28,29,29,29,28,28,29,29,29,29,29,28,28,29,29,29,29,28,29,27,27,28,27,25,26,25,24,23,22,22,21,19,17,17,15,15,13,12,12,11,12,11,11,12,11,12,12,13,13,14,13,14,15,14,15,15,16,16,16,18,17,16,17,14,16,14,13,15,14,15,16,17,17,18,17,17,16,17,16,15,15,15,15,15,14,13,14,13,13,12,12,12,10,10,10,10,10,10,11,11,11,10,11,11,11,11,11,12,11,11,11,11,12,11,10,10,9,8,8,7,8,7,7,7,6,7,7,7,6,7,8,7,6,5,7,6,6,6,8,5,6,6,6,5,5,7,7,5,6,6,6,7,8,8,9,6,5,5,4,4,5,4,4,5,5,6,6,6,6,7,6,7,6,7,7,6,6,7,7,6,6,7,6,5,7,6,5,6,6,5,6,6,7,6,6,7,6,6,6,6,7,6,6,7,8,8,8,8,9,9,8,8,8,7,8,8,7,6,7,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,7,7,7,8,7,7,7,8,7,7,6,7,7,7,7,7,7,9,9,7,8,8,8,8,8,8,8,9,8,9,8,9,9,8,9,9,10,10,9,10,9,8,8,7,7,6,6,7,6,6,7,7,6,6,7,7,7,7,7,7,7,8,8,9,9,9,8,9,9,8,8,9,8,7,8,8,9,8,7,8,9,9,8,8,9,8,9,9,9,8,8,9,8,8,8,9,9,8,9,9,10,9,10,11,10,10,11,11,11,9,11,11,11,10,11,11,10,11,11,11,11,12,11,10,10,11,11,11,11,11,11,11,11,11,12,12,11,11,11,12,10,10,8,11,11,10,9,10,10,8,9,10,9,8,9,9,8,9,9,9,8,9,8,8,8,8,9,10,11,11,14,14,14,15,16,16,17,20,19,20,22,22,22,21,22,22,21,24,22,23,24,23,24,25,26,26,25,24,27,26,26,27,27,27,27,26,27,27,27,27,26,26,26,27,27,26,25,26,26],[29,29,29,28,29,29,29,29,28,28,28,26,28,27,28,27,28,28,27,28,27,26,28,27,26,27,28,27,28,27,25,27,28,29,27,28,27,28,28,28,29,28,28,28,28,28,26,25,27,25,23,23,25,23,22,24,23,21,21,21,20,18,15,15,13,13,12,11,12,10,10,9,10,9,9,10,8,9,9,9,9,9,11,9,8,8,7,8,6,6,8,7,7,8,7,7,8,8,7,8,8,8,8,7,9,8,8,8,9,9,10,10,9,8,10,10,9,10,9,9,9,9,8,8,8,8,8,7,7,7,7,6,6,6,5,6,5,5,5,5,5,6,5,7,7,6,7,8,8,8,8,9,9,8,8,8,8,9,9,10,9,10,10,10,9,9,10,9,9,9,8,9,8,8,8,7,8,8,8,9,7,8,8,6,7,8,6,5,5,4,4,4,5,4,1,2,2,1,0,1,1,2,3,2,3,4,4,4,4,4,4,4,3,4,4,4,5,5,5,6,7,6,9,8,8,9,10,9,9,9,9,9,10,10,11,11,9,9,11,9,8,10,10,9,9,9,8,8,9,8,9,8,9,7,8,7,7,8,7,7,7,7,6,7,6,7,8,5,6,5,6,4,5,6,6,5,5,3,3,2,3,6,6,6,6,7,6,7,8,8,9,8,8,9,9,8,9,9,9,10,9,10,10,10,12,11,10,11,11,11,11,12,12,12,12,12,12,13,13,12,13,12,12,11,11,11,13,12,12,12,13,14,13,13,13,15,16,15,16,17,17,18,19,21,20,21,24,23,23,24,25,26,26,26,27,27,28,27,27,27,26,28,24,23,26,26,26,26,26,27,28,27,28,28,29,28,28,28,28,28,28,28,29,28,28,29,29,29,29,28,29,29,29,29,29,28,29,29,29,28,29,28,29,27,28,28,27,26,26,26,26,24,24,23,22,20,20,19,17,16,16,13,13,14,13,13,12,13,14,13,13,14,13,14,14,14,16,15,15,15,17,15,16,17,17,18,18,16,16,16,15,15,15,15,16,16,18,18,17,18,17,17,16,15,15,15,16,15,15,14,15,14,13,13,13,13,12,12,12,13,12,12,12,12,13,12,12,12,12,12,12,13,12,13,13,13,12,12,11,11,11,10,10,10,9,9,9,8,8,10,9,8,8,8,7,8,7,7,7,6,7,7,8,8,8,6,7,7,7,8,7,8,8,8,7,8,9,9,9,8,6,5,5,5,5,5,5,5,6,6,5,6,7,8,7,8,9,9,8,8,9,8,8,8,8,8,7,7,8,7,7,8,8,7,8,8,8,8,8,9,9,8,8,9,10,9,9,10,9,10,10,10,12,10,10,9,10,10,9,9,9,10,7,8,9,7,9,8,8,9,8,8,10,8,8,8,9,8,9,9,9,10,10,9,9,10,9,8,9,9,9,10,9,9,9,10,9,9,10,9,9,9,8,9,10,9,10,9,11,11,10,10,10,11,10,11,10,10,10,10,10,9,9,8,8,9,8,9,9,9,8,8,9,9,9,9,10,10,9,10,11,11,11,11,9,11,11,10,9,10,10,9,9,10,10,9,9,10,10,10,10,10,10,10,10,10,11,10,9,11,10,10,10,10,10,10,11,11,12,11,11,11,11,11,11,13,12,12,12,12,11,11,12,12,11,12,12,12,11,12,12,11,11,13,11,13,12,13,11,12,13,12,12,12,11,12,12,13,11,12,10,13,11,11,11,11,11,10,10,11,10,9,10,10,11,9,10,11,9,10,10,10,10,8,10,12,12,12,14,15,15,15,16,17,19,21,20,22,24,24,23,22,24,24,22,26,23,24,25,24,26,27,27,26,27,26,26,27,26,27,26,27,27,26,26,28,27,27,27,27,27,27,29,26,26,27,27],[29,29,28,28,29,29,28,28,28,27,28,27,28,27,27,28,28,28,27,28,26,25,27,27,26,27,27,27,27,27,26,27,28,29,27,28,28,28,28,28,28,27,27,27,27,27,25,24,26,24,24,23,24,24,20,23,22,20,20,19,19,16,15,14,12,12,12,12,10,11,9,10,8,8,8,9,8,8,8,9,8,8,10,7,7,8,8,9,8,8,8,8,8,8,8,9,9,9,8,8,9,9,8,8,9,8,9,9,9,9,11,10,9,9,10,10,9,10,10,9,9,9,8,8,7,8,7,7,7,6,7,6,6,6,6,7,6,6,6,6,6,6,7,7,7,8,8,7,10,9,8,7,9,9,8,9,10,8,8,9,9,10,9,9,10,8,8,8,9,8,8,8,8,8,8,7,7,7,7,7,6,6,6,6,6,6,5,5,4,4,3,3,3,3,2,2,2,1,1,0,1,2,2,2,3,3,3,4,4,5,5,4,4,5,5,4,6,7,5,7,7,8,8,7,8,8,8,7,8,8,8,8,9,9,10,10,10,9,10,8,9,10,9,9,9,8,8,7,8,7,6,6,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,5,5,6,4,4,4,4,5,5,4,3,4,4,4,4,5,7,7,7,8,6,7,7,8,8,7,8,8,8,8,8,8,9,9,9,8,9,10,9,9,11,10,10,11,13,11,11,12,12,13,13,13,13,13,12,12,11,11,12,12,12,11,12,12,13,13,12,14,15,15,15,14,15,16,18,18,19,18,20,19,20,22,23,23,25,25,25,27,26,27,26,27,27,24,26,26,24,25,26,26,25,26,27,27,27,28,27,28,28,28,28,28,28,28,27,27,28,28,28,29,29,28,28,29,28,29,28,28,28,28,28,28,28,28,27,28,28,27,27,27,27,26,26,25,24,24,22,22,20,18,19,17,16,14,13,12,13,12,13,13,13,14,14,14,13,14,14,13,15,16,14,14,15,17,16,17,18,18,18,17,15,16,14,14,14,15,16,17,17,19,19,18,18,17,16,17,17,15,15,16,16,15,15,14,14,14,13,14,13,12,11,11,12,11,11,11,12,12,11,11,11,12,11,12,11,11,12,12,11,12,11,10,10,9,9,9,8,8,9,7,7,7,8,7,7,6,8,8,7,8,8,7,6,8,7,6,7,9,7,7,8,7,7,7,7,8,8,7,8,9,8,9,8,6,6,5,5,7,5,5,7,6,6,6,6,6,8,7,8,8,8,8,7,8,8,8,8,9,8,8,8,9,9,8,8,7,8,8,8,7,7,9,8,7,8,9,8,8,9,8,8,9,9,9,10,10,10,10,9,11,9,9,9,9,8,7,8,8,8,7,8,8,9,8,7,9,9,8,8,9,8,9,8,9,9,9,10,9,9,10,8,9,9,9,9,9,10,9,10,9,8,9,9,8,9,9,10,10,10,9,9,10,10,10,9,10,11,10,10,10,10,10,10,9,9,9,9,9,10,9,10,8,8,9,9,9,10,10,9,10,9,9,10,10,10,10,10,10,11,11,10,10,10,11,10,10,11,10,10,10,11,10,10,11,11,10,11,10,10,10,10,11,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,12,12,11,13,12,11,12,12,12,12,13,11,11,12,13,12,14,13,13,12,12,12,12,13,11,11,12,12,13,11,12,11,12,11,11,11,10,10,10,10,10,10,10,10,10,10,10,9,10,9,10,9,8,8,9,11,11,11,13,13,14,14,14,15,15,16,18,19,20,22,23,22,20,22,22,22,25,23,23,25,24,25,26,26,25,27,25,25,27,26,27,25,26,26,26,25,26,27,27,27,26,26,26,27,27,25,27,28],[28,28,28,28,28,28,28,27,28,27,26,26,27,26,27,26,27,26,26,28,26,25,27,27,25,27,27,26,27,26,25,27,28,28,26,27,27,27,28,27,28,26,26,26,27,26,25,24,25,23,23,23,23,22,20,22,21,20,20,20,18,17,15,14,12,12,12,10,10,10,9,9,9,9,8,9,8,8,8,8,9,9,9,7,7,7,7,6,7,7,7,7,8,7,7,8,8,8,8,8,9,9,8,8,10,10,10,10,10,11,10,10,10,10,10,11,11,10,10,10,10,10,9,9,9,9,8,8,7,8,8,7,6,6,6,7,6,6,6,7,6,8,8,7,7,9,7,7,8,7,9,8,8,10,9,10,10,10,10,11,9,9,10,10,9,9,9,10,9,9,9,9,9,9,9,8,8,8,8,8,7,7,7,7,6,6,6,6,6,5,5,3,4,3,3,3,2,2,1,1,0,1,1,2,2,3,4,4,4,5,5,4,5,6,5,6,6,6,7,7,8,7,7,7,8,9,9,9,9,9,8,9,9,9,10,11,10,10,10,10,9,9,9,10,11,9,9,9,9,8,8,7,8,7,8,8,7,7,7,7,6,6,6,6,7,5,7,6,7,6,7,5,4,5,5,5,4,3,4,3,5,6,6,7,6,8,6,6,7,8,8,8,8,8,8,8,9,9,8,8,9,10,9,10,10,10,11,11,11,10,12,14,12,11,12,12,13,14,13,13,14,13,12,12,11,12,12,12,12,12,13,13,12,13,14,14,14,15,15,14,16,17,18,19,19,20,20,21,22,22,23,24,25,25,26,26,27,25,26,26,25,26,25,24,26,26,26,25,26,26,28,27,28,27,28,28,28,28,28,28,28,28,28,28,28,28,29,29,28,28,29,28,29,28,28,28,27,28,28,28,28,28,28,27,27,26,27,26,25,25,23,23,23,22,22,19,18,18,16,16,15,14,13,13,13,14,13,14,15,15,14,13,15,15,14,16,16,15,15,16,17,16,17,18,17,17,17,16,17,15,15,15,16,17,17,18,19,19,18,19,17,17,18,17,16,16,16,17,16,15,16,15,14,14,14,13,13,12,12,13,13,13,12,12,13,13,13,13,12,11,13,12,12,12,13,12,12,12,11,10,10,10,10,9,8,8,8,8,7,8,8,7,7,7,7,7,7,7,8,6,8,7,7,6,8,8,8,7,7,7,6,7,7,7,7,8,7,8,10,7,6,5,5,4,5,4,5,5,5,6,5,5,6,6,7,7,7,8,7,7,7,7,7,7,8,6,7,7,7,7,6,7,6,8,8,8,7,7,8,8,7,8,9,8,9,9,8,9,10,10,9,10,10,10,10,9,11,9,9,9,9,8,8,7,8,8,8,8,7,9,8,7,8,8,7,8,9,8,8,8,8,9,8,8,8,8,8,8,7,8,8,8,8,8,9,9,9,8,8,8,9,9,9,9,9,10,9,9,9,10,10,8,9,11,10,11,10,10,10,9,8,8,9,8,8,10,8,9,8,8,9,9,9,9,10,9,10,9,10,10,10,11,10,10,10,11,10,10,11,10,10,9,10,10,11,10,8,10,10,10,9,10,10,9,10,9,10,10,10,10,10,10,11,11,11,11,11,11,11,11,12,11,11,10,11,13,12,10,12,13,11,10,13,12,11,13,13,12,12,13,12,11,12,13,12,14,13,13,13,12,12,12,13,12,12,12,12,13,11,11,10,11,11,12,10,11,11,10,10,10,11,10,10,10,10,10,9,11,9,9,9,9,9,9,11,11,11,12,14,14,14,16,16,16,17,18,20,20,23,23,22,20,22,23,21,25,22,23,26,22,25,25,26,26,26,25,27,27,26,27,26,26,27,26,26,27,27,27,27,26,26,27,27,27,25,26,27],[29,29,28,29,29,29,29,28,28,28,28,27,28,27,27,27,27,27,26,28,26,26,27,27,26,27,27,27,27,27,26,27,28,29,27,28,28,28,28,28,29,28,27,28,28,27,26,25,26,25,24,24,25,23,21,23,22,21,20,21,19,17,15,14,12,12,11,12,11,12,10,9,9,9,8,10,9,9,9,9,8,9,8,7,6,7,7,7,7,7,6,7,8,7,7,7,8,8,7,7,9,8,8,8,10,8,8,8,9,9,10,10,10,10,10,10,10,10,11,10,9,10,9,9,9,10,8,7,8,8,7,6,6,6,6,6,5,5,5,5,6,6,6,7,9,7,7,8,8,8,9,10,9,10,8,10,9,9,11,9,11,10,11,10,10,10,11,9,10,10,10,9,10,10,9,8,10,9,8,8,8,8,7,7,9,6,6,6,6,6,5,3,4,3,2,3,2,2,1,1,1,0,1,1,2,2,4,3,6,5,5,4,6,5,4,5,5,7,8,8,9,8,11,9,8,10,9,9,10,10,9,10,10,11,11,12,10,10,11,10,10,11,10,10,10,10,9,10,10,9,8,9,8,8,9,9,8,8,7,7,7,8,6,6,9,8,10,7,7,5,6,5,5,5,5,4,5,3,2,2,4,6,6,7,7,8,9,8,9,10,7,8,8,8,8,9,8,8,9,9,9,10,10,9,10,11,10,10,11,11,11,11,12,12,11,12,13,12,12,12,12,12,12,11,11,12,12,12,12,12,12,13,13,12,13,14,15,14,16,16,17,18,18,19,20,20,20,21,22,23,23,25,26,26,26,26,28,25,28,26,24,27,25,25,27,26,26,26,26,27,28,27,28,27,28,29,28,28,28,29,29,29,29,29,28,29,29,29,29,28,30,29,29,29,29,28,29,29,29,29,29,28,29,27,27,28,27,25,26,25,23,23,22,22,21,19,17,18,16,15,14,12,13,12,13,12,11,13,13,13,13,14,13,15,14,15,16,15,15,15,18,15,16,18,17,17,17,15,16,14,14,16,15,16,17,17,18,19,18,18,17,17,17,16,15,15,15,16,14,14,14,14,13,13,13,12,11,11,11,11,12,11,11,12,12,11,12,12,12,11,12,12,12,13,12,13,13,12,12,11,10,10,10,9,10,8,8,9,8,8,8,8,7,7,8,8,7,5,8,7,6,6,9,6,5,7,7,5,5,7,7,6,6,6,6,7,9,8,8,7,6,5,5,5,6,5,5,6,6,6,5,6,6,6,7,7,7,7,7,6,7,7,6,6,6,7,6,6,6,8,6,6,7,8,6,7,7,6,7,8,7,6,7,8,8,7,8,9,10,9,9,9,10,9,9,9,9,8,9,9,7,7,7,6,6,6,8,6,7,7,6,7,7,7,6,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,10,9,9,9,8,9,9,9,9,9,9,10,9,9,9,9,9,9,10,11,11,10,11,9,9,9,8,8,7,8,9,7,8,8,8,7,7,8,8,7,8,8,8,8,9,9,9,10,9,8,9,10,8,8,9,9,8,8,9,10,9,8,8,9,9,9,9,10,10,10,10,10,9,9,9,9,9,10,9,9,9,10,10,10,9,11,11,10,10,11,11,11,10,11,11,11,11,11,11,11,13,11,11,11,12,11,11,11,12,11,12,12,12,12,12,12,12,12,12,11,12,12,12,11,11,9,11,11,10,9,11,11,9,9,11,9,9,9,10,9,10,10,10,10,10,10,9,10,10,10,11,12,12,14,15,15,15,16,17,18,21,21,21,24,23,23,22,24,23,22,26,23,25,26,24,25,26,27,27,27,25,27,27,27,28,27,27,27,26,27,28,28,27,28,28,27,28,28,26,26,28,27],[29,29,29,28,29,29,29,28,28,27,28,26,28,26,27,27,27,28,25,28,27,25,27,27,25,26,28,26,26,28,25,27,28,28,27,28,27,27,28,27,28,27,27,27,27,26,26,24,25,24,22,23,23,22,20,22,21,20,20,19,17,16,15,13,12,12,12,11,11,10,10,9,9,8,8,9,8,7,8,8,8,7,8,6,6,6,6,7,7,6,7,7,6,7,7,8,6,8,7,8,7,8,8,8,9,8,8,9,9,10,11,10,10,9,10,10,10,10,10,10,10,9,8,9,9,8,7,7,7,7,7,7,6,7,7,7,6,5,6,6,5,6,6,6,6,7,7,7,7,8,8,7,7,8,8,8,9,9,9,10,10,9,9,10,9,8,9,8,8,9,9,9,8,9,9,7,7,8,7,7,6,6,7,6,6,7,7,6,6,6,6,4,4,4,3,4,4,3,2,3,1,1,0,1,2,2,3,3,4,4,4,4,4,4,5,5,5,6,6,8,6,6,7,6,7,7,7,7,8,8,8,8,9,10,10,11,9,10,10,9,9,10,10,9,10,10,8,8,9,9,8,7,8,8,8,8,7,8,8,7,8,7,7,8,6,7,7,6,7,6,6,4,5,5,5,4,4,3,3,3,4,6,6,7,7,8,7,6,6,7,7,7,8,8,9,8,8,9,9,9,9,10,9,9,10,10,10,10,11,11,11,12,11,12,12,12,13,13,12,13,13,13,12,11,11,12,13,12,11,12,12,13,13,12,14,15,16,15,16,17,17,17,18,19,19,18,20,21,21,21,22,23,24,24,25,24,26,25,26,25,23,26,25,24,26,25,24,26,25,26,27,26,28,26,27,28,28,28,28,28,28,28,28,28,28,28,29,28,28,28,29,28,28,27,27,27,27,28,27,28,28,27,28,26,26,27,26,25,24,25,23,23,22,21,21,18,17,18,16,15,14,13,12,13,12,12,12,13,14,13,14,13,13,14,14,13,15,15,14,14,16,16,16,17,16,17,17,15,15,15,15,15,15,15,17,15,18,18,17,17,17,17,16,15,15,15,15,15,15,14,13,13,13,12,13,12,13,11,12,13,12,11,12,12,12,11,12,12,11,12,12,13,12,14,13,12,13,12,11,11,10,10,10,9,9,9,9,8,8,9,9,8,8,9,8,7,8,7,7,6,7,9,8,6,7,7,8,7,7,8,6,7,7,7,7,7,9,8,8,7,6,5,5,5,6,5,4,5,6,6,5,6,6,7,7,7,8,8,8,7,8,7,8,7,8,7,6,7,8,7,6,8,7,6,7,8,8,7,8,9,8,7,9,9,9,9,8,9,9,9,9,9,11,11,10,9,9,9,9,9,10,9,7,7,8,8,9,7,8,9,8,8,9,9,7,8,9,9,9,9,9,9,10,9,9,9,9,8,8,8,8,8,8,8,8,8,8,8,9,8,8,9,9,9,10,9,9,9,10,10,9,9,10,10,10,11,10,10,9,10,10,9,9,8,8,9,8,9,9,8,9,9,9,9,10,9,9,9,9,10,11,11,11,11,9,11,11,11,10,10,12,10,10,10,11,10,10,10,11,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,10,11,11,11,12,11,11,11,12,12,11,13,12,12,12,11,12,11,12,12,11,12,12,12,11,12,12,11,11,12,11,13,12,12,11,12,13,12,12,11,11,12,12,14,12,13,11,14,12,11,12,13,12,11,12,11,10,11,11,11,11,11,11,10,10,11,11,9,10,10,11,12,12,13,14,15,16,15,16,17,19,21,19,21,23,23,23,22,23,23,22,25,23,23,25,23,26,26,27,26,27,25,27,27,27,28,27,27,27,26,26,27,27,27,27,27,27,27,28,27,25,27,27],[28,28,28,27,28,28,28,28,28,26,27,24,27,25,26,26,26,27,24,27,26,24,26,26,24,25,27,26,25,27,26,26,28,28,26,27,27,27,28,27,28,27,27,25,26,26,24,22,25,24,20,21,23,21,19,22,21,19,19,19,18,16,15,14,13,13,13,12,12,13,11,11,10,10,10,11,9,9,10,11,9,9,10,8,8,8,8,10,8,7,9,8,7,9,9,9,9,10,9,8,10,9,9,9,10,9,10,9,10,10,11,11,10,11,12,11,11,11,12,11,11,11,11,10,9,9,9,9,9,8,9,8,7,7,7,7,7,7,7,7,6,7,8,8,7,9,9,9,10,10,9,10,11,9,9,10,11,10,10,11,10,11,10,10,11,10,10,10,10,9,10,10,10,9,9,9,8,9,9,8,8,7,8,8,6,6,7,6,5,5,6,4,4,4,5,3,3,3,4,3,2,2,1,0,1,2,3,4,5,5,5,5,4,5,5,6,7,6,6,6,7,8,7,8,8,9,8,9,9,9,10,10,11,11,11,11,11,11,11,10,11,11,11,11,12,11,10,9,10,9,9,8,9,9,8,8,8,8,8,7,7,7,8,7,6,6,6,5,6,6,6,4,5,5,5,4,4,3,4,4,4,4,6,6,6,8,7,8,7,7,9,8,8,9,9,9,10,10,9,10,11,12,11,11,12,11,12,13,12,12,13,15,14,14,14,14,15,15,14,15,15,14,13,14,13,13,13,13,13,13,13,13,13,14,14,15,14,16,15,16,17,17,17,18,19,20,19,20,21,23,21,24,25,25,26,26,26,25,26,25,25,25,25,25,25,26,26,25,26,26,27,27,28,27,28,29,28,28,28,29,29,29,28,29,28,28,29,29,29,28,28,29,28,28,28,28,28,28,29,29,28,29,28,27,27,27,27,27,26,26,26,24,24,23,23,20,19,20,17,16,15,15,13,14,15,14,14,15,15,16,14,15,16,16,15,15,17,15,15,16,17,16,18,18,19,18,18,16,17,15,16,16,18,18,19,18,20,19,19,19,18,17,18,17,15,16,18,17,17,16,16,15,15,15,15,16,13,14,13,14,14,13,14,15,14,12,13,14,14,13,14,14,12,13,14,13,14,12,13,13,12,11,11,11,10,10,9,10,9,9,9,8,8,8,8,7,8,7,7,6,8,8,6,7,9,7,7,8,9,8,7,9,9,9,8,8,9,9,9,9,7,6,5,6,6,5,5,6,6,6,6,5,6,6,7,8,8,9,8,8,9,9,8,8,10,9,8,9,10,8,8,10,9,8,9,9,8,8,10,10,8,9,10,10,10,10,10,10,11,11,11,11,12,13,11,11,12,10,10,10,10,9,8,9,9,8,8,8,9,10,9,8,10,10,8,9,10,10,9,10,11,10,11,10,10,10,10,9,9,10,11,10,10,10,10,11,9,10,10,10,10,9,10,10,10,10,10,10,10,11,10,9,10,11,10,11,11,12,11,11,10,10,10,10,10,11,10,11,10,10,10,11,10,11,11,11,10,10,12,11,12,11,12,11,11,12,12,11,11,11,12,10,11,12,12,11,11,12,11,11,12,12,11,12,11,12,11,11,12,12,12,12,13,12,11,12,13,12,13,13,14,12,12,11,11,13,12,12,13,13,12,12,14,13,12,13,14,13,14,14,13,13,13,13,14,15,14,14,13,13,14,14,14,13,12,13,13,13,12,12,11,12,12,12,12,12,12,11,10,12,11,11,11,12,11,11,11,11,11,11,11,10,11,10,11,11,12,13,14,14,15,15,17,18,18,18,21,21,23,23,22,21,22,21,22,24,24,23,25,24,26,25,27,26,25,24,27,26,25,26,26,26,25,26,26,27,26,26,27,26,26,26,28,26,24,27,27],[28,28,28,28,28,28,28,27,27,27,27,26,27,26,26,27,27,27,26,27,26,25,26,27,25,26,27,26,26,27,25,26,28,28,26,27,27,27,27,27,27,26,26,25,26,26,25,23,25,22,21,23,23,20,20,22,21,20,21,20,18,17,16,14,14,14,15,13,14,13,14,13,14,13,12,13,12,11,11,11,11,12,11,9,9,8,8,7,7,8,8,8,9,9,9,8,9,11,11,10,12,13,11,12,13,12,12,11,12,12,12,12,12,13,13,14,13,13,13,13,13,13,13,13,13,13,12,12,12,12,11,10,9,9,8,8,8,8,7,9,9,9,9,10,9,9,11,11,11,12,12,12,13,13,13,13,13,13,13,13,14,11,13,14,13,12,13,13,13,13,14,13,12,13,13,12,11,13,11,12,12,11,10,11,9,10,9,8,8,7,8,8,7,7,6,5,5,5,4,4,3,3,2,1,0,1,2,4,5,6,6,3,5,7,7,8,8,10,9,11,8,10,11,11,12,12,13,12,13,13,11,13,13,13,13,13,12,13,13,13,12,14,13,13,14,13,14,13,12,13,12,11,12,12,11,10,11,10,10,11,9,11,11,10,10,9,10,8,9,8,8,7,6,6,6,5,5,6,5,4,6,7,8,7,8,9,9,10,10,11,12,11,13,13,12,12,13,13,13,12,13,14,14,13,15,14,14,15,15,15,15,18,16,16,16,17,17,16,16,15,16,16,15,14,13,15,16,15,14,15,15,15,15,16,15,15,17,16,16,17,17,17,18,20,19,20,20,21,22,23,23,24,25,25,26,26,27,27,27,26,24,26,26,26,26,26,27,26,26,26,27,27,28,27,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,28,29,28,28,27,27,27,27,27,26,25,26,25,25,24,22,24,21,19,21,19,17,17,16,16,16,16,17,16,17,16,18,16,17,19,19,17,19,20,18,16,18,20,18,18,20,19,19,19,18,19,18,19,19,20,20,20,21,21,20,20,21,19,19,19,19,18,18,20,19,19,18,18,17,18,16,18,19,15,16,15,16,17,17,17,17,17,17,16,16,16,15,16,16,15,16,17,17,16,15,16,15,15,14,14,14,13,13,14,14,12,13,13,11,11,12,12,11,11,10,10,9,11,11,8,9,11,9,9,10,10,9,7,9,8,8,7,9,9,9,9,8,7,6,5,6,6,6,5,5,5,6,4,5,5,7,8,8,8,8,7,6,7,8,7,6,8,7,7,8,8,8,7,9,9,8,10,10,10,11,12,13,11,12,12,12,13,13,13,12,14,14,14,14,14,16,15,15,14,14,13,12,13,12,11,11,12,12,11,9,11,12,11,10,11,12,10,11,11,10,10,10,11,11,11,11,11,11,10,10,9,10,9,10,10,9,11,12,12,11,10,10,12,12,12,10,11,10,10,10,9,10,10,9,10,11,11,12,12,12,12,11,11,11,11,11,11,12,12,12,12,10,14,13,12,13,14,12,13,12,14,14,14,15,14,14,14,14,14,12,13,13,13,11,12,12,13,11,11,13,13,11,12,13,12,12,13,13,14,13,13,14,14,13,14,15,14,13,14,15,15,14,15,14,14,13,13,15,13,13,16,13,12,12,16,14,13,16,15,14,16,17,14,14,16,16,15,17,16,15,16,16,16,16,16,15,14,15,14,15,15,13,12,14,15,14,14,14,16,14,14,15,15,14,14,14,14,14,14,15,13,14,15,14,14,14,14,13,14,16,17,16,17,18,19,19,21,20,21,22,24,23,24,23,25,23,23,26,24,25,27,25,27,26,28,28,27,26,28,27,26,28,27,27,27,26,27,28,28,27,28,28,28,28,28,27,26,28,28],[29,29,28,28,29,29,28,28,27,27,27,25,27,26,27,26,26,27,24,27,26,24,27,27,24,26,28,26,26,28,25,27,28,29,27,28,28,28,28,28,29,28,28,27,27,26,25,23,26,24,21,23,24,22,21,23,22,20,21,20,18,16,16,16,14,15,15,13,13,13,13,12,13,13,11,12,11,11,11,11,11,12,10,8,8,9,7,7,6,6,9,8,8,11,10,11,11,12,11,11,12,11,11,11,13,12,12,13,14,14,14,14,13,13,15,15,15,14,15,14,14,14,15,14,12,13,12,11,12,11,10,9,10,10,9,10,8,8,9,9,9,9,10,9,10,12,11,11,11,12,12,12,13,12,11,13,12,12,12,13,14,12,13,13,12,12,12,13,12,13,13,13,12,14,13,11,12,13,12,12,11,12,11,10,10,10,9,9,9,9,10,7,8,8,6,5,4,5,4,4,3,4,3,2,1,0,1,2,3,5,4,4,5,6,6,7,8,9,9,9,10,10,11,10,11,12,12,12,12,13,13,13,13,15,14,15,15,14,14,13,15,15,14,15,15,14,14,14,14,14,12,12,14,13,12,11,11,11,12,11,11,12,12,11,10,9,10,10,9,8,9,7,6,7,7,6,6,5,4,4,5,5,6,7,7,8,9,9,9,10,11,12,13,13,12,14,14,14,14,13,14,14,15,14,15,15,17,16,17,16,16,19,17,17,17,17,19,18,17,17,17,16,17,15,15,16,17,15,15,16,16,16,15,16,16,15,17,17,16,18,17,18,19,19,19,21,22,22,23,24,23,24,26,25,26,26,27,26,27,26,25,26,26,26,26,26,26,27,26,27,28,28,29,27,28,29,29,29,29,29,29,29,29,28,29,29,29,29,29,28,29,28,29,28,28,28,28,29,28,29,28,28,29,28,28,28,28,26,26,26,26,24,24,23,22,22,20,21,19,18,18,17,16,17,18,18,16,18,18,18,17,17,19,18,19,19,19,18,19,20,21,20,19,21,20,20,21,19,20,18,18,19,19,19,21,22,22,21,20,22,21,20,20,20,18,19,20,20,20,19,19,18,18,17,19,19,19,18,15,17,18,17,17,17,19,16,17,17,18,17,17,17,15,17,17,17,16,16,16,14,16,14,15,15,15,14,14,14,12,13,13,13,11,12,12,10,11,10,10,9,11,10,9,8,9,8,8,8,9,9,7,8,9,9,8,9,9,9,11,10,8,7,5,5,5,4,5,4,4,5,5,5,6,7,8,8,7,9,8,7,8,7,7,7,8,6,6,7,8,7,7,8,8,8,9,11,9,10,11,13,11,11,12,13,13,12,13,14,14,15,15,16,16,16,15,15,14,13,14,14,13,12,11,11,11,12,11,9,11,12,10,9,11,12,10,9,11,9,10,11,11,11,10,8,11,10,9,10,8,9,9,10,11,10,11,12,12,11,11,12,12,12,11,11,11,10,10,11,9,11,11,9,9,11,10,12,12,13,11,11,10,12,10,10,11,12,10,11,12,12,11,12,12,13,12,13,14,12,13,14,14,15,15,14,13,15,15,13,13,14,14,12,14,12,13,13,12,12,13,13,11,13,13,11,13,13,14,14,11,14,14,14,12,14,15,13,14,15,15,14,15,16,16,14,14,16,16,14,15,16,14,14,17,16,14,16,16,15,15,16,15,15,15,16,15,16,16,17,16,15,16,15,17,14,15,15,16,17,14,16,13,15,15,14,16,15,14,13,15,16,14,14,15,16,15,15,15,16,14,15,17,16,15,15,15,15,15,16,17,17,16,18,18,20,21,21,22,21,25,24,24,23,24,24,23,25,24,23,27,23,26,25,28,26,27,25,28,27,26,27,27,27,26,25,27,28,27,26,28,27,27,28,28,26,26,27,27],[28,28,28,28,29,29,28,28,28,27,27,27,28,27,27,27,27,28,26,28,27,25,28,28,26,27,28,26,27,28,26,27,28,28,27,28,28,27,28,27,28,27,27,26,27,27,24,24,26,24,21,24,24,22,21,24,22,20,22,21,19,17,16,15,15,13,14,13,13,12,12,11,11,11,9,10,9,9,8,9,9,8,8,7,7,7,5,6,5,6,6,6,6,7,7,8,7,8,8,8,9,8,9,9,10,10,11,12,12,11,12,13,11,10,11,13,12,14,12,14,13,10,12,13,11,10,11,10,9,9,10,9,7,8,8,9,9,7,9,7,8,7,8,7,8,8,9,8,8,9,9,10,8,9,9,9,10,10,10,11,11,9,12,11,10,9,11,10,9,10,11,9,9,12,11,9,10,12,10,10,8,9,9,8,8,9,8,8,8,7,9,9,7,7,6,6,5,5,6,5,4,4,3,3,2,1,0,1,2,4,4,2,4,4,5,5,4,6,6,8,7,7,9,7,8,10,10,8,9,10,10,10,12,12,12,12,11,12,12,13,10,12,12,12,11,12,12,11,10,12,11,9,10,11,10,10,10,11,10,11,9,9,10,10,8,9,8,9,9,7,8,7,6,7,7,6,6,5,4,3,5,4,5,5,6,8,7,8,7,8,8,9,10,11,10,10,11,11,11,11,11,13,13,11,13,14,13,13,14,14,15,15,15,15,15,16,16,16,15,15,15,14,13,14,12,14,15,13,13,14,14,15,15,14,15,16,15,16,17,18,18,18,18,19,19,20,20,21,20,23,23,23,25,24,25,25,27,26,27,26,24,27,25,25,26,26,26,27,25,26,28,27,28,28,28,28,29,28,28,28,29,29,28,28,29,29,29,29,29,29,29,29,29,29,28,28,28,29,28,29,28,28,28,27,27,28,28,26,26,26,24,24,24,22,22,21,20,20,18,17,16,15,15,15,15,16,14,16,17,16,17,17,17,18,17,18,19,18,18,19,21,19,19,22,20,20,21,20,20,18,18,19,19,19,20,21,22,22,22,22,20,21,20,19,18,19,20,19,19,18,17,18,17,16,16,16,15,15,15,16,16,15,15,16,16,15,16,16,16,15,16,16,15,17,16,16,16,15,14,14,15,14,13,13,12,12,13,12,11,11,12,12,11,10,10,10,11,9,9,9,10,10,9,9,10,9,8,8,8,8,8,8,8,8,9,9,10,9,10,9,7,7,5,6,5,4,5,4,4,5,5,6,4,6,7,7,7,7,6,6,8,6,5,6,8,6,6,8,7,6,6,8,7,8,9,9,9,10,9,10,9,11,10,11,13,12,11,12,13,13,14,14,15,15,15,12,12,13,13,13,11,10,11,10,10,11,11,9,11,10,9,11,10,10,10,10,10,10,10,11,10,10,10,10,10,10,10,9,8,8,8,8,8,7,8,9,8,8,8,8,8,9,9,9,10,8,9,9,8,10,9,8,9,10,10,11,10,11,11,11,9,10,10,9,10,11,9,11,11,10,11,12,11,12,12,11,12,12,13,13,12,13,15,13,13,14,14,13,12,14,13,12,13,12,13,13,12,12,13,14,12,12,14,13,13,12,13,12,12,13,13,12,14,14,13,12,14,14,14,14,14,14,15,14,13,14,15,15,14,14,13,13,14,14,14,15,15,15,14,16,14,14,15,15,15,16,15,16,15,15,15,15,16,14,14,15,15,15,14,14,12,14,14,13,13,14,14,13,14,15,13,14,14,14,13,14,15,16,13,14,15,14,14,14,14,14,14,15,17,17,17,18,19,20,21,20,23,23,26,23,24,24,25,24,24,27,24,26,28,24,27,27,28,27,28,27,29,28,28,28,29,28,27,26,28,28,28,28,29,28,28,29,29,28,27,28,28],[29,29,29,29,29,30,30,28,29,28,28,28,28,27,28,28,28,28,28,28,27,27,28,27,27,27,27,27,27,27,26,28,27,28,27,28,27,28,28,27,28,27,26,27,27,26,25,24,25,23,22,23,23,22,21,22,22,21,20,20,18,16,15,13,12,11,11,10,9,10,9,9,8,9,8,10,6,7,6,7,8,6,6,6,5,4,4,5,4,4,4,4,4,5,5,5,5,6,6,6,7,6,7,7,7,7,7,7,8,8,8,8,7,7,8,8,8,9,8,8,8,7,8,7,7,7,7,7,6,7,7,6,6,6,6,7,6,5,6,6,5,5,5,6,6,6,6,7,6,6,6,7,6,6,6,7,6,7,8,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,6,8,8,7,7,6,7,7,7,6,7,7,7,7,6,6,5,6,6,6,6,6,4,5,5,4,4,3,4,3,2,1,0,1,1,2,2,3,3,4,4,3,4,7,6,6,5,6,7,7,7,8,8,7,8,8,8,8,9,9,9,9,8,8,9,8,9,9,8,8,9,9,8,8,8,8,7,8,8,8,8,8,8,7,8,7,7,7,7,7,8,8,7,7,6,6,6,5,5,5,4,5,5,2,3,3,3,4,4,4,5,6,6,7,7,8,8,9,8,9,8,8,9,8,9,9,9,9,10,10,10,11,10,10,10,11,11,11,11,12,11,12,11,10,12,11,11,11,11,10,10,11,11,11,10,11,11,12,12,12,14,14,13,16,16,17,17,17,19,19,18,20,19,21,22,22,23,24,24,25,26,27,24,27,25,24,26,24,22,25,26,25,25,25,26,27,26,28,27,28,27,27,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,29,27,28,28,28,28,27,28,28,27,28,26,26,27,26,25,26,24,24,22,22,21,21,19,17,19,14,14,13,11,11,12,11,10,12,12,13,13,14,13,12,14,13,13,14,14,13,14,16,15,15,17,17,16,16,15,16,14,14,14,14,13,16,16,16,18,17,16,16,14,16,15,14,14,13,14,13,13,13,12,11,11,11,11,12,11,11,11,11,11,12,11,11,12,12,11,11,12,11,12,11,13,13,12,12,13,12,11,10,10,10,9,9,9,9,9,9,9,9,9,7,9,9,8,9,7,7,7,7,7,7,7,7,5,7,6,6,6,5,7,7,7,7,8,9,9,8,8,5,5,3,4,4,4,3,3,3,3,3,4,4,4,5,5,6,6,4,4,5,5,5,4,6,5,4,5,5,5,5,8,6,6,7,7,7,6,9,9,8,8,9,9,9,10,8,9,10,10,10,10,10,10,10,10,10,10,10,9,9,8,8,8,9,8,8,7,8,9,8,8,8,9,8,8,8,7,9,8,8,8,8,9,8,8,9,6,7,7,7,6,6,5,7,6,6,6,7,6,6,7,6,7,7,7,8,7,7,7,7,8,8,7,9,9,8,9,8,9,9,8,7,8,8,8,9,9,9,8,9,9,8,10,9,8,8,10,10,9,9,10,10,11,9,10,10,10,10,10,10,10,9,10,10,9,9,10,9,10,10,9,9,10,9,9,9,8,10,9,9,9,10,9,9,11,10,10,11,9,11,10,10,11,10,11,11,12,10,10,10,10,10,10,11,10,10,11,11,10,9,10,11,11,10,12,11,11,11,10,12,10,11,11,10,11,11,11,11,11,10,12,10,10,11,11,11,12,11,11,11,11,11,10,12,14,11,11,11,12,11,10,11,11,11,12,13,13,14,15,16,16,17,17,19,20,20,21,24,24,24,23,24,24,23,27,25,25,27,24,27,27,28,27,26,24,27,27,26,28,27,26,27,26,26,28,27,27,28,28,27,28,28,26,25,28,27],[28,28,28,28,28,29,29,28,29,27,27,27,27,27,27,27,27,28,26,28,27,26,28,28,27,27,28,27,28,27,27,28,29,29,28,29,28,28,28,28,29,27,27,27,28,27,24,24,26,23,22,23,24,22,21,22,22,20,19,19,17,15,13,11,11,10,9,9,8,8,7,7,7,7,6,6,6,6,5,5,5,4,5,4,4,3,3,4,3,3,4,3,3,5,4,5,5,5,5,5,6,5,5,6,6,6,7,6,7,7,7,6,6,6,6,7,7,7,7,7,7,6,6,6,6,5,6,6,5,5,6,6,5,5,5,6,5,5,5,4,5,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,5,6,6,6,5,6,5,6,6,6,5,5,5,6,5,5,6,5,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,5,4,4,4,4,3,4,2,3,2,1,0,1,1,1,2,2,3,4,2,2,3,4,3,5,5,6,5,5,5,5,5,6,6,6,7,7,8,9,7,7,8,7,6,7,7,6,6,7,7,6,6,6,5,6,6,7,7,6,7,7,7,6,6,6,6,6,6,5,6,5,6,7,5,4,5,4,4,3,3,4,3,2,3,3,3,3,3,4,4,5,5,5,6,5,6,6,6,6,7,7,6,7,7,7,7,8,8,9,8,8,9,9,9,10,9,10,9,9,10,10,10,10,10,10,9,10,9,9,10,10,9,10,10,10,10,11,12,14,13,13,14,15,16,15,16,18,17,18,18,19,20,21,21,23,24,24,25,25,27,25,26,25,23,26,25,22,25,26,25,25,25,26,27,27,28,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,29,28,27,28,27,27,27,27,24,25,25,24,22,22,21,20,18,17,16,14,13,12,10,10,11,10,10,10,11,11,12,11,11,12,12,12,13,14,13,13,15,14,14,14,16,16,15,15,14,14,13,13,14,14,14,15,15,16,16,16,16,15,14,15,14,13,13,13,14,13,12,12,12,11,11,11,11,10,10,10,10,10,11,10,10,10,10,10,10,10,10,11,11,11,12,12,11,11,11,10,9,9,8,8,8,7,8,7,8,7,7,8,7,7,7,7,6,7,6,6,6,7,6,6,6,6,6,5,5,5,5,4,5,5,6,6,6,7,7,8,6,5,4,3,4,3,2,3,3,3,3,2,3,3,4,5,6,6,7,6,5,6,5,3,5,6,5,4,5,5,4,4,6,5,5,5,5,6,6,6,7,7,7,7,6,7,8,6,7,8,8,8,9,9,9,9,9,9,8,9,8,9,8,7,7,7,7,6,6,6,7,6,7,6,7,6,6,6,7,8,7,6,7,7,7,6,6,7,6,6,5,6,5,6,5,5,5,5,5,5,5,5,6,6,6,7,6,6,7,6,6,7,5,7,7,8,8,7,8,7,7,6,7,6,7,7,7,8,7,7,6,7,7,7,7,8,7,8,9,9,8,9,9,9,9,9,9,9,9,8,8,8,8,8,9,9,8,8,8,8,9,8,8,8,8,8,8,8,8,8,8,8,8,9,9,8,9,9,8,10,9,9,9,10,9,9,10,10,10,9,9,9,9,9,9,9,9,9,10,10,10,9,9,10,10,10,11,10,10,10,10,11,9,10,10,10,10,11,11,10,9,9,10,9,9,10,9,9,9,9,9,9,9,9,9,9,9,9,10,9,9,9,8,9,10,10,10,12,13,14,15,15,14,16,17,17,20,20,20,22,22,23,21,22,23,22,25,23,24,25,24,26,25,26,25,26,24,27,27,25,27,26,26,26,25,25,27,27,26,27,26,26,26,27,26,24,25,26],[29,28,28,29,28,29,29,28,29,28,28,28,28,27,27,27,28,28,27,28,28,26,28,28,27,27,28,27,27,28,27,27,28,29,28,28,28,28,28,28,29,28,28,27,28,27,25,25,26,24,22,23,25,22,22,24,22,21,21,21,19,16,15,12,11,11,9,10,9,9,9,7,9,7,7,7,6,6,5,6,7,5,4,4,4,4,3,4,2,4,4,3,4,4,4,4,5,5,4,4,6,5,5,5,6,6,6,6,7,8,8,7,7,7,6,7,8,7,8,7,7,7,6,6,6,6,5,5,6,6,5,5,5,5,5,5,4,3,3,4,4,3,3,5,4,4,4,6,4,5,6,7,5,6,5,5,5,6,6,6,7,6,8,6,6,7,7,7,6,7,7,6,6,7,7,7,7,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,3,4,3,4,4,4,5,4,4,5,4,4,4,3,2,2,1,0,1,1,2,2,2,3,2,3,3,4,3,4,6,5,7,8,8,8,6,7,6,7,8,8,9,8,8,8,9,8,8,8,8,7,8,8,7,7,8,7,7,8,7,7,7,7,6,7,6,7,7,7,6,6,6,6,5,6,4,5,5,5,5,5,5,4,5,4,3,2,3,3,4,4,4,4,4,4,5,7,7,7,7,7,8,8,8,9,8,9,8,9,9,8,9,10,10,9,10,10,10,10,11,11,10,11,11,11,11,11,11,11,11,10,10,10,11,10,10,11,12,11,12,11,12,13,13,13,16,16,17,17,17,20,20,19,21,21,21,22,23,24,25,25,26,26,27,26,27,26,26,27,25,25,27,26,25,26,26,27,28,27,28,27,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,28,28,28,28,28,29,28,28,28,28,27,27,26,26,26,25,23,24,23,21,22,19,19,17,15,14,13,11,11,11,11,10,11,11,11,12,12,12,12,13,13,13,13,14,14,14,15,14,16,17,16,15,16,14,15,14,13,14,14,14,16,15,17,17,17,16,15,15,15,14,13,13,14,14,14,12,12,13,11,10,11,12,10,10,10,10,11,10,10,11,11,11,11,11,10,10,11,12,11,12,12,11,11,11,10,10,10,9,9,8,9,8,8,8,8,8,8,8,9,8,7,7,8,7,6,7,7,6,6,5,6,6,5,5,5,5,5,5,5,6,6,6,7,7,8,6,5,4,3,4,3,2,3,6,2,3,2,3,3,4,4,4,4,4,4,3,5,4,3,4,4,4,3,4,4,4,4,5,5,6,6,6,7,6,6,7,7,7,7,8,9,8,8,9,9,9,9,9,9,10,9,9,8,9,8,10,8,8,8,7,7,7,7,6,7,7,6,6,7,7,6,7,7,6,6,7,7,7,6,6,7,6,6,5,5,5,4,5,6,5,5,5,6,6,5,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,8,7,8,7,7,6,6,7,7,7,7,8,7,7,8,8,9,8,8,9,9,8,9,10,9,10,9,9,9,9,8,8,9,8,7,8,8,9,8,7,8,8,8,8,8,8,9,9,9,9,9,9,9,9,8,9,10,9,9,9,10,10,9,10,10,10,10,10,11,10,10,10,10,10,10,10,10,9,10,11,10,10,11,10,10,10,11,10,11,11,10,11,10,12,10,11,10,10,10,11,10,10,10,8,10,10,10,9,10,10,10,9,10,9,10,10,10,9,9,10,10,9,9,10,9,9,9,11,11,12,12,14,15,15,13,15,16,18,19,22,23,24,25,24,22,24,24,23,26,24,25,26,24,27,26,27,26,27,26,28,27,27,28,27,27,27,25,27,28,28,27,28,27,27,28,28,26,25,26,26],[28,28,27,28,28,28,28,28,28,27,27,26,27,26,26,26,27,27,26,27,27,26,27,27,26,27,26,26,26,26,26,27,27,28,26,27,27,27,28,27,28,26,26,26,26,26,24,24,24,22,22,23,22,21,19,21,18,19,18,18,16,15,13,11,9,9,8,7,7,7,7,6,6,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,4,4,4,3,4,5,4,4,6,5,5,5,6,5,5,6,6,7,7,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,3,3,4,3,3,3,4,4,4,5,6,5,4,5,6,5,6,5,5,6,6,5,6,5,5,6,6,6,6,6,6,6,6,7,6,5,6,7,5,6,6,5,5,5,5,5,5,5,4,4,4,3,4,4,3,3,4,3,4,4,3,4,4,4,5,4,4,4,4,3,2,1,1,0,1,1,2,2,2,2,2,3,3,3,5,6,6,6,6,6,6,6,6,6,5,6,6,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,5,6,5,5,5,5,5,5,4,5,4,4,5,4,5,4,5,4,4,4,3,3,2,2,2,3,3,3,3,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,8,8,8,8,8,9,9,9,8,9,9,9,10,10,9,9,9,8,8,8,9,8,8,9,9,9,10,10,11,12,13,12,14,15,15,14,17,17,17,17,19,19,19,21,21,21,24,23,24,24,26,25,25,24,23,25,24,23,24,24,24,25,24,24,27,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,27,26,26,27,26,26,26,25,26,26,26,24,24,23,21,22,20,20,19,18,16,15,13,11,10,10,9,10,10,10,10,10,10,10,10,11,11,12,11,12,13,11,12,13,13,13,14,15,15,14,14,13,14,13,12,12,13,13,13,15,15,15,15,15,14,15,14,13,13,12,13,12,11,11,11,11,10,10,10,9,9,9,9,9,9,9,8,9,8,9,9,9,9,9,10,10,10,11,10,10,9,9,8,8,8,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,5,5,5,6,5,6,5,5,5,6,5,4,5,4,5,4,5,6,6,7,7,9,6,6,4,3,3,3,2,2,2,2,3,3,3,3,4,4,4,4,5,3,3,4,3,3,3,4,3,3,4,4,3,4,4,4,6,4,5,5,5,5,6,6,6,6,6,7,6,6,7,8,7,7,8,7,8,7,8,8,7,7,7,7,6,7,6,6,6,7,6,7,6,5,6,6,6,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,4,5,4,5,4,5,5,5,5,5,5,5,5,6,5,5,6,5,6,6,6,5,5,5,6,6,7,7,6,6,6,5,5,5,5,5,6,5,6,6,6,6,6,6,7,7,6,7,7,7,7,8,7,8,7,8,8,8,8,8,7,7,7,6,7,7,7,6,7,7,6,6,7,6,6,7,6,7,7,6,7,7,7,7,8,7,8,8,8,8,8,8,8,8,8,8,10,9,9,9,9,9,8,9,8,8,9,9,8,9,10,8,8,8,9,9,10,10,9,9,9,10,9,10,9,9,9,10,9,8,8,8,9,9,8,8,8,8,8,7,8,8,8,8,8,9,8,8,8,8,8,8,8,8,8,9,9,11,11,13,12,13,13,14,15,16,17,19,19,22,21,20,20,21,20,19,24,21,22,23,22,25,24,25,24,25,23,26,25,24,27,25,24,25,26,25,26,25,25,25,25,24,26,25,26,23,24,25],[29,29,28,28,28,29,29,28,28,27,28,27,28,26,27,27,28,28,26,28,27,26,28,27,26,27,28,27,28,27,27,28,28,29,28,28,27,28,28,27,28,27,27,27,27,27,24,24,25,24,22,22,23,21,20,21,20,19,19,19,16,15,13,11,10,9,8,8,7,7,6,6,6,6,5,6,5,6,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,6,5,6,6,6,7,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,3,3,3,3,3,3,4,3,4,5,4,3,5,5,5,5,6,5,5,5,6,6,5,5,5,5,5,6,6,5,6,6,6,6,6,5,5,6,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,3,3,4,3,3,3,4,3,3,4,4,3,3,2,2,2,2,1,0,1,2,2,2,2,3,2,3,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,8,7,8,8,8,8,8,9,8,8,8,8,7,8,8,8,8,8,8,8,10,10,11,12,12,13,15,15,16,15,16,18,18,18,19,21,20,20,21,22,23,24,24,25,26,25,26,25,24,26,24,22,25,25,24,25,26,25,27,26,27,27,27,28,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,27,27,27,27,27,27,28,27,27,27,27,27,26,26,26,26,24,24,23,22,23,20,19,18,15,16,12,11,10,9,8,9,9,8,9,9,9,9,9,9,10,10,10,10,12,11,11,12,12,12,12,14,14,13,13,12,13,11,11,11,11,12,12,13,14,14,14,13,13,13,13,12,12,11,11,11,11,10,10,10,9,9,9,8,8,8,8,8,7,8,8,8,7,8,7,8,8,8,9,9,9,10,9,9,9,9,7,7,7,6,6,6,6,6,5,5,5,5,5,5,4,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,8,7,7,6,5,4,3,3,3,2,3,2,2,2,2,3,3,3,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,4,3,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,5,6,6,6,6,7,6,7,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,6,5,4,5,6,5,5,6,5,6,5,5,5,5,5,6,5,5,4,4,4,4,5,4,4,4,5,5,5,4,5,5,5,5,5,6,5,5,5,5,6,5,5,6,6,7,7,6,6,6,6,5,5,5,5,5,5,5,6,5,5,5,5,6,5,6,5,6,6,6,6,7,7,6,7,6,7,6,6,7,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,7,8,7,7,8,8,8,8,8,8,7,8,8,8,8,8,8,8,8,9,8,9,8,8,8,8,8,8,8,7,8,8,7,8,7,7,7,7,7,7,7,7,7,7,6,7,7,7,7,7,6,6,7,8,8,9,10,11,12,13,12,14,14,16,18,18,19,21,22,21,19,21,22,21,23,21,23,24,22,24,24,25,25,25,24,25,26,24,26,25,25,25,25,25,26,26,26,26,26,25,26,26,25,24,25,26],[29,28,29,29,29,29,29,29,29,29,29,28,29,28,28,28,28,28,27,28,28,27,28,28,27,28,28,27,28,27,27,28,28,28,28,28,28,28,28,28,28,28,27,27,27,27,25,24,25,24,23,23,24,22,21,22,21,20,19,20,17,15,13,11,9,9,7,7,7,7,6,5,5,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,2,2,1,1,1,0,1,1,1,2,1,2,2,2,2,3,3,3,3,4,3,3,3,4,4,5,5,6,6,5,5,5,5,4,5,5,4,4,5,4,4,4,4,3,4,4,4,4,4,5,4,5,4,3,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,2,2,4,3,3,4,4,3,4,4,4,4,4,5,5,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,8,8,7,8,8,8,7,8,7,7,7,8,7,7,8,9,9,8,10,12,12,12,14,15,17,16,17,19,19,18,20,20,21,21,23,24,24,25,26,26,26,25,26,25,23,26,24,24,25,26,26,25,26,26,26,27,28,26,27,27,27,28,27,27,27,27,27,27,27,28,28,28,28,28,29,28,28,28,28,27,28,28,27,28,28,28,28,26,27,26,26,25,25,24,23,23,21,21,20,18,16,15,12,11,10,8,8,8,8,8,8,9,9,9,9,8,9,10,9,10,10,10,10,11,11,11,12,13,12,12,13,11,11,11,11,10,10,11,12,12,12,14,12,12,11,12,11,11,10,10,10,10,9,9,9,9,8,8,8,8,7,7,8,7,8,7,7,8,7,8,8,8,7,8,8,8,9,9,9,9,8,8,7,7,7,6,5,5,5,5,5,4,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,7,8,8,6,4,4,3,3,3,2,2,3,3,3,2,3,3,4,4,4,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,6,5,5,6,6,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,4,5,5,5,5,4,4,4,4,4,4,4,5,5,5,6,6,5,6,6,6,6,6,6,6,7,7,7,7,6,6,5,4,4,5,5,5,4,5,5,4,5,5,5,5,6,5,5,6,6,7,7,7,7,7,7,7,7,6,6,6,6,6,6,7,7,6,6,6,6,7,6,6,6,6,7,6,7,6,6,6,6,6,7,6,6,7,7,7,8,7,7,8,7,7,7,8,8,8,8,8,8,7,7,7,7,8,7,7,8,8,7,7,8,8,7,9,8,8,8,8,9,8,8,8,8,8,9,8,8,8,8,9,8,8,7,7,7,7,6,7,7,7,7,6,7,6,7,7,6,7,7,6,6,6,8,8,10,10,11,13,13,12,13,14,15,16,18,18,21,22,20,19,21,22,21,24,21,22,23,23,25,25,25,25,25,23,26,25,25,26,24,24,25,24,24,26,25,25,26,25,24,26,26,25,23,25,25],[28,28,27,28,27,28,28,27,28,27,26,27,26,26,26,27,26,26,27,27,26,27,27,26,27,27,26,27,27,26,26,27,27,28,27,27,27,27,28,27,28,27,26,26,26,26,23,23,23,21,22,21,21,20,19,19,18,17,16,16,14,13,11,9,7,7,6,5,5,5,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,2,2,2,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,7,7,7,8,10,10,10,12,12,13,12,14,15,15,14,16,17,18,18,19,21,22,21,24,24,24,23,24,23,21,23,22,21,23,22,23,24,23,22,26,24,27,25,26,27,27,26,27,26,26,26,26,26,27,26,27,27,27,27,28,27,27,26,26,26,26,26,26,27,26,26,27,26,26,25,25,24,23,23,20,19,18,18,18,15,13,12,10,9,8,7,7,7,7,6,6,7,7,7,7,7,8,8,8,9,10,9,9,10,10,10,11,12,11,10,10,10,10,9,9,9,9,10,10,11,11,12,12,11,10,10,10,9,9,9,9,9,8,8,8,7,7,6,6,6,6,5,6,6,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,6,6,5,5,4,4,4,3,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,7,7,5,4,3,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,4,4,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,5,6,6,6,7,7,7,6,6,7,6,7,7,7,6,7,7,6,6,6,7,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,7,8,8,10,11,11,11,12,12,14,16,17,18,20,20,20,18,20,20,20,23,21,22,22,22,24,24,26,25,24,23,25,25,24,27,25,24,26,25,24,25,23,25,24,25,23,25,24,24,23,24,24],[28,28,28,29,28,29,28,28,28,28,27,27,27,26,26,27,26,27,27,27,27,27,27,27,26,27,26,27,27,26,26,26,27,27,26,27,27,27,27,26,27,27,26,26,26,25,24,23,23,22,21,21,21,20,19,20,18,18,17,16,14,13,11,9,8,7,6,5,5,5,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,3,3,4,3,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,3,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,3,3,3,3,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,6,7,8,8,9,11,12,11,12,13,14,13,14,16,16,16,18,18,19,18,19,21,22,21,24,24,25,24,25,23,22,24,22,22,22,23,23,23,22,22,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,26,26,26,26,26,26,26,26,25,25,26,26,25,26,25,25,25,25,25,23,22,21,20,19,17,17,15,13,13,11,9,8,7,7,7,7,7,6,7,7,7,7,7,8,8,7,9,9,9,9,9,10,9,10,11,11,10,11,9,10,9,9,9,9,9,10,10,11,11,11,11,10,10,10,10,9,9,9,9,8,8,7,7,7,6,6,6,5,5,5,5,5,5,5,6,5,5,6,6,5,6,6,7,7,8,7,7,7,7,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,6,6,5,4,3,3,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,4,5,5,5,5,5,5,4,4,4,3,3,3,4,3,3,3,4,3,4,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,5,5,6,5,5,6,6,6,6,6,7,7,7,7,7,6,6,6,6,6,7,6,6,6,7,6,6,6,6,6,6,7,7,6,7,7,7,7,7,7,6,7,7,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,4,5,4,4,4,5,6,7,8,8,10,11,10,10,12,13,14,17,17,17,20,21,20,18,20,21,20,22,20,22,22,21,24,23,25,24,25,24,25,25,25,26,25,24,25,23,25,25,24,25,25,25,23,25,24,23,22,25,24],[29,29,29,29,28,29,29,28,29,28,27,27,28,27,28,27,27,27,26,27,26,26,27,26,26,26,26,27,27,26,26,27,27,28,27,27,26,28,27,27,27,27,26,26,26,26,24,23,24,23,22,21,22,20,19,20,19,18,17,17,14,12,10,8,7,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,2,2,2,3,2,3,2,3,2,3,3,3,2,3,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,6,6,7,8,9,10,10,11,13,14,12,14,16,16,15,17,19,19,19,20,23,22,23,24,24,24,24,25,23,22,24,23,22,23,24,24,24,24,24,25,25,26,25,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,28,27,27,27,27,25,26,26,26,27,26,26,27,25,25,25,24,24,23,22,21,20,20,18,18,16,13,12,10,8,7,6,6,5,6,6,5,6,6,6,6,6,7,7,7,7,8,7,7,8,8,8,9,9,9,9,9,9,9,8,8,8,8,8,9,9,9,10,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,4,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,6,7,7,7,6,6,5,4,4,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,6,6,4,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,2,2,2,2,2,2,2,2,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,6,7,8,9,11,10,10,12,12,13,16,17,17,19,20,19,17,19,21,20,23,20,23,22,22,26,23,24,24,25,22,25,24,24,24,24,24,24,22,23,24,23,23,24,24,23,24,24,22,21,23,23],[28,28,28,29,28,29,29,28,29,28,27,28,27,27,27,27,27,28,27,27,27,27,27,27,27,28,27,28,28,27,26,28,27,28,28,28,28,28,28,28,28,28,27,27,27,26,25,24,25,23,22,23,22,20,19,20,19,17,18,17,14,12,10,8,7,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,3,3,2,2,2,2,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,5,4,4,5,5,5,6,6,7,9,9,9,11,13,14,12,13,15,15,14,16,17,17,18,19,20,22,20,21,23,24,24,24,23,22,23,21,22,23,23,24,24,23,23,25,25,26,25,25,25,26,26,26,26,26,26,27,26,26,26,26,26,27,26,27,27,27,27,27,26,27,27,26,27,27,26,27,26,26,26,25,23,24,21,21,20,18,16,16,14,13,12,9,8,7,6,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,8,8,8,9,9,9,9,8,8,7,7,7,7,8,8,8,9,9,8,8,8,8,8,7,7,7,7,7,7,6,6,6,5,5,5,5,4,4,4,4,5,4,4,5,4,4,5,5,5,5,5,5,6,6,6,6,5,5,4,4,4,4,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,6,6,6,4,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,5,6,5,6,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,5,6,7,7,9,10,10,10,11,12,13,15,17,18,19,20,19,18,20,19,19,22,20,23,22,21,25,23,24,24,24,23,26,24,24,25,24,24,24,23,23,25,25,23,24,24,23,24,24,24,21,24,24],[28,27,28,28,27,28,28,27,28,27,26,26,26,25,25,26,26,26,26,26,26,27,26,26,26,26,26,26,27,25,25,26,26,27,26,26,26,26,26,26,27,26,26,25,25,25,23,23,23,21,21,20,21,19,18,19,17,17,16,16,13,12,9,7,6,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,2,2,2,3,2,2,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,3,4,4,4,4,5,5,5,5,6,7,9,9,9,12,12,13,11,13,14,15,14,16,17,17,18,17,20,21,20,22,23,23,23,24,22,21,22,21,21,22,21,23,22,22,22,25,23,26,24,25,25,26,26,26,26,25,25,26,25,26,26,26,26,26,26,26,26,26,25,25,25,25,25,25,26,25,25,26,24,24,24,24,23,22,21,19,19,17,16,15,14,11,10,8,7,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,6,7,8,8,7,8,8,8,8,9,8,8,7,7,7,7,7,8,8,8,9,8,8,8,8,7,7,7,7,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,3,3,3,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,4,3,3,4,3,3,4,4,3,4,3,4,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,4,4,5,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,4,4,3,3,4,4,5,6,7,8,9,9,9,10,11,12,14,15,16,18,20,19,18,18,19,19,22,19,21,21,22,24,23,23,23,24,22,24,23,23,25,23,22,24,22,23,23,23,24,23,23,21,23,23,23,21,23,22],[29,28,28,29,28,29,28,27,28,27,27,27,26,26,26,26,25,26,26,26,26,26,26,26,26,26,26,26,27,25,25,26,26,27,25,26,26,26,26,26,27,26,25,26,25,25,24,23,24,23,22,21,22,20,19,20,19,18,18,18,14,13,10,8,6,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1,2,2,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,2,2,2,3,3,3,3,3,2,3,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4,4,4,3,4,4,4,4,5,5,5,6,6,7,9,10,10,12,13,14,13,15,16,17,15,17,18,19,19,19,21,23,21,23,24,24,24,25,23,23,25,22,23,24,23,24,24,24,24,26,26,27,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,26,26,26,26,27,26,27,26,25,26,25,24,24,23,22,21,20,19,18,17,15,12,11,9,7,6,5,5,5,5,5,4,5,5,5,5,5,6,6,6,6,7,6,6,7,7,7,8,8,8,8,8,7,8,7,7,7,6,7,8,8,8,8,8,8,7,7,7,7,7,6,6,6,6,5,5,5,5,5,4,4,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,3,3,2,2,3,2,2,3,3,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,4,3,4,4,3,3,4,3,3,4,4,3,4,3,4,4,3,3,4,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,4,5,5,4,5,5,4,4,5,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,5,5,6,7,8,10,10,9,11,12,14,16,16,17,19,19,19,18,19,20,19,22,20,22,22,22,25,24,25,23,25,23,24,24,24,25,23,23,24,23,23,24,24,23,24,23,22,24,24,23,22,23,24],[28,28,28,29,28,29,28,28,28,28,27,28,27,26,26,26,26,26,27,26,26,26,26,26,26,27,26,26,28,25,26,26,26,27,27,27,26,27,27,27,27,27,25,26,25,25,24,23,23,23,22,20,22,20,19,19,19,18,17,17,14,12,10,7,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,3,4,4,3,3,3,3,4,3,3,4,4,5,5,6,6,9,9,10,12,12,14,12,14,16,16,15,16,18,18,18,19,21,21,21,22,23,24,23,24,23,23,24,22,21,22,23,23,23,22,23,24,24,26,24,25,25,25,26,25,25,25,25,25,25,25,25,26,26,26,26,27,27,26,26,26,25,26,26,25,26,26,25,26,23,24,24,23,23,22,20,19,19,18,16,15,14,12,10,8,7,6,5,4,4,5,5,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,7,8,8,7,7,7,7,6,7,7,7,7,8,7,7,7,7,6,6,6,6,5,6,5,5,5,5,4,4,4,4,3,3,3,4,3,3,3,4,4,3,4,4,4,4,5,5,5,6,5,5,5,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,2,2,2,2,3,3,2,2,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,8,10,10,9,11,12,13,16,17,17,19,20,18,17,19,20,19,22,19,23,22,21,26,23,23,23,24,22,24,24,23,24,23,23,23,21,22,25,23,23,24,23,22,23,24,22,21,22,23],[28,28,28,29,28,29,28,27,29,28,27,28,27,27,27,27,26,27,27,27,27,28,27,27,27,27,26,27,28,26,26,27,27,27,26,27,27,28,28,27,27,27,26,26,26,25,24,23,24,22,23,22,22,21,20,21,19,19,17,17,14,12,10,7,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,3,3,2,2,3,2,2,3,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,5,5,5,7,9,9,10,12,13,14,13,14,15,15,15,17,18,18,19,19,21,22,21,23,24,24,23,23,22,21,23,22,20,22,22,23,22,22,22,24,24,26,23,25,24,25,26,25,24,24,24,24,25,26,25,25,26,26,26,26,26,26,26,26,26,26,26,25,26,25,26,26,24,24,24,24,22,21,20,19,18,17,16,15,14,12,10,9,7,6,5,5,5,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,8,8,8,8,9,8,8,7,7,7,7,7,7,8,8,9,8,8,7,8,7,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,3,4,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,5,6,7,8,10,10,9,10,12,13,15,17,17,18,20,20,18,18,20,20,22,21,23,21,22,23,25,24,24,25,23,24,23,24,25,22,23,25,22,22,24,24,24,24,24,23,24,24,23,21,24,25],[28,28,28,28,28,29,28,27,28,27,26,27,26,26,26,27,25,26,27,26,26,27,26,25,26,26,26,26,26,25,25,26,26,26,25,26,26,26,26,26,26,25,25,25,25,24,23,22,22,21,21,21,21,19,19,19,18,18,17,17,13,12,10,7,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,3,2,3,3,2,2,3,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,3,3,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,2,2,3,2,2,3,3,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,3,3,4,4,3,3,3,3,4,3,3,4,4,5,5,5,7,9,9,10,12,13,14,12,14,15,16,15,16,17,18,19,18,20,21,20,21,22,23,23,23,21,21,22,22,21,22,22,22,22,23,22,23,24,26,24,24,25,25,26,25,25,25,26,26,25,25,25,25,25,26,26,27,26,26,26,26,24,25,25,25,25,25,25,25,24,24,23,24,23,21,19,18,18,16,16,15,14,11,10,8,7,6,5,5,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,8,7,8,8,7,7,7,6,6,6,6,7,7,8,8,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,5,4,4,4,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,2,2,2,2,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,4,5,4,5,5,5,5,4,5,4,5,5,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,8,9,9,9,10,12,13,15,16,16,18,20,18,17,18,19,19,22,20,22,22,21,25,23,24,23,25,22,24,23,23,25,22,23,24,23,22,23,24,23,23,23,22,23,23,23,21,24,24],[28,28,28,29,28,28,28,28,28,27,27,28,26,26,26,26,26,26,26,26,26,27,26,26,27,27,26,27,27,25,25,26,26,27,26,26,25,26,26,26,26,26,25,25,25,25,23,22,23,22,21,21,21,20,18,20,19,18,17,17,14,12,9,7,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,2,2,1,1,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,3,3,3,2,3,2,2,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,3,3,3,3,2,2,2,1,1,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,3,3,4,4,3,3,3,3,4,3,3,4,4,5,5,6,7,8,9,10,12,13,14,13,14,15,16,15,16,17,18,19,18,20,22,21,22,22,23,24,24,22,22,23,22,22,22,22,23,22,23,23,24,24,25,23,24,25,25,25,24,25,25,25,25,25,25,25,25,25,25,25,27,25,26,26,26,25,25,26,25,25,26,25,26,23,25,24,24,24,21,20,19,18,17,16,15,14,11,10,8,7,6,5,4,4,5,4,4,5,4,5,5,5,5,6,6,6,6,6,6,6,7,7,8,8,7,8,8,7,7,7,7,7,6,7,7,7,8,8,7,7,7,7,6,6,6,6,5,6,5,5,5,5,4,4,4,3,3,3,3,4,3,3,3,4,4,3,4,4,4,4,5,5,5,6,6,5,5,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,4,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,2,2,2,2,3,3,2,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,8,9,10,9,10,12,13,15,16,17,18,20,18,16,18,19,19,21,20,22,22,21,25,23,23,22,23,22,24,24,23,24,23,23,22,23,22,23,22,23,23,22,21,22,24,22,21,23,22],[28,28,28,29,28,29,28,28,28,28,27,27,27,26,26,26,26,27,27,27,26,27,27,26,27,27,27,27,28,26,26,27,27,28,27,27,26,28,27,27,27,27,26,27,26,25,25,23,24,23,22,21,22,21,19,20,20,18,17,17,14,12,9,7,6,5,4,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,3,3,2,2,3,2,2,2,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,3,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,4,4,5,5,6,9,9,10,12,12,14,13,13,16,16,15,16,17,18,18,18,21,22,21,22,23,24,23,24,23,21,23,21,21,22,23,23,22,22,23,23,24,26,24,25,25,25,26,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,25,26,25,26,26,25,26,25,25,26,24,24,24,23,23,22,20,20,19,17,17,15,13,11,9,8,6,6,5,4,4,4,4,3,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,7,6,6,6,6,6,7,6,7,7,6,7,6,7,6,5,6,5,5,5,5,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,4,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,7,9,8,8,9,12,12,14,15,16,19,20,18,16,18,19,18,21,18,22,21,21,25,23,23,22,24,22,24,23,23,24,22,23,23,20,21,24,24,22,24,22,21,24,24,21,20,23,23],[28,27,28,28,27,28,28,27,28,27,27,26,26,25,25,26,25,26,26,26,26,26,26,26,26,26,26,27,27,25,25,26,26,27,26,27,27,26,26,26,27,26,25,25,25,25,23,22,22,22,21,20,21,19,19,19,18,18,17,17,14,12,10,7,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,2,2,3,2,2,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,3,3,3,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,3,3,4,4,3,3,3,4,4,3,3,4,4,5,5,6,7,9,10,10,13,14,14,13,14,16,15,15,16,17,17,18,18,21,21,20,22,22,23,23,23,23,21,22,20,21,22,22,23,22,22,22,24,24,25,24,25,25,25,25,25,24,24,25,24,25,24,25,25,25,25,25,27,25,26,25,25,25,25,26,25,26,25,25,26,24,23,23,24,21,21,19,17,17,15,15,14,13,11,10,8,7,6,5,4,4,5,4,4,4,4,5,5,5,5,5,5,6,6,6,6,7,7,7,8,8,7,8,8,7,7,7,6,6,6,6,7,7,8,7,7,8,7,7,6,6,6,6,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,3,3,3,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,4,5,4,5,5,5,5,5,5,4,5,5,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,8,9,9,9,10,11,12,14,16,16,17,19,18,17,17,18,19,21,19,21,20,21,24,22,22,22,23,22,22,22,22,24,21,22,23,21,22,23,22,22,22,23,21,22,23,22,20,22,23],[28,27,28,28,27,28,27,27,28,27,26,26,26,26,25,26,24,26,25,25,26,26,25,26,26,26,25,26,26,24,25,25,25,26,25,25,25,26,26,25,25,25,25,25,24,24,23,22,22,21,21,21,21,19,18,19,18,18,17,16,13,12,10,7,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,3,3,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,1,2,2,2,2,3,3,3,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,4,3,3,4,4,5,5,6,7,9,10,10,12,13,14,13,15,15,16,15,16,17,17,17,18,20,21,19,21,21,22,23,22,21,20,21,21,21,22,21,23,22,22,21,24,24,25,22,24,25,24,24,24,24,24,25,25,25,25,25,25,24,25,24,25,24,25,25,25,24,24,24,24,24,24,24,25,23,23,23,23,23,20,19,18,17,16,15,14,13,10,9,8,6,6,5,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,8,8,8,8,7,7,6,6,6,6,6,7,7,8,8,7,7,7,7,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,3,3,3,4,3,3,4,4,3,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,5,4,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,7,9,9,9,10,12,13,15,16,16,19,20,17,17,18,18,18,21,19,21,21,21,25,23,24,22,24,22,23,24,24,25,22,23,24,23,22,24,23,23,23,22,22,23,24,23,21,23,23],[28,27,28,28,27,28,28,27,28,27,26,27,26,26,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,25,26,26,27,26,26,25,26,26,26,26,26,25,25,25,25,24,22,23,22,22,21,22,20,19,21,20,19,18,18,16,13,10,8,6,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,2,1,1,2,2,2,3,3,3,3,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,3,3,4,4,5,5,6,7,10,10,11,13,14,15,14,15,17,17,16,18,19,20,19,20,22,22,22,22,23,23,23,24,22,21,23,21,22,22,22,23,22,22,23,23,24,26,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,25,26,25,25,25,25,25,24,26,25,24,25,23,23,23,23,23,21,20,19,18,17,16,15,13,11,10,8,7,6,5,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,7,7,8,7,7,7,7,6,6,7,7,7,8,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,5,5,5,6,5,5,5,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,3,3,4,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,8,9,9,10,10,12,12,14,15,15,18,19,17,16,17,19,18,21,19,20,20,20,24,22,22,21,23,21,23,22,22,23,21,22,23,20,21,22,23,21,23,22,20,22,23,20,20,22,22],[27,27,28,28,28,28,28,28,28,27,27,26,27,26,27,26,27,27,26,27,27,27,27,27,27,27,28,27,28,27,26,27,28,28,27,28,27,28,28,28,28,27,26,27,26,26,24,24,25,23,22,21,22,20,20,21,20,19,18,20,16,14,11,8,8,6,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,3,4,4,4,4,4,4,5,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,4,4,5,4,4,4,4,4,4,4,4,5,5,5,6,7,8,12,12,12,14,15,16,15,16,18,18,18,20,21,20,21,21,23,23,23,24,25,25,24,24,24,23,24,22,23,23,24,25,23,24,24,25,26,26,25,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,26,26,26,26,27,26,26,26,25,24,24,24,24,23,19,20,20,17,16,15,14,12,11,9,8,7,6,5,5,5,5,5,5,5,6,6,6,7,7,6,7,8,7,7,8,8,8,9,9,9,9,9,9,9,8,8,7,8,8,8,8,9,9,9,9,8,9,8,7,7,7,7,7,6,6,6,6,5,5,5,5,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,6,6,7,7,7,6,6,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,6,6,5,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,4,4,3,4,3,4,4,3,3,4,4,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,3,3,4,4,4,5,5,5,4,4,5,5,5,4,4,4,4,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,4,5,4,4,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,4,4,3,4,4,4,4,5,5,4,5,5,5,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,5,5,5,4,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,5,6,7,8,9,11,10,10,11,13,13,15,16,18,20,21,19,17,19,20,19,22,19,21,21,22,24,24,25,24,24,24,25,23,24,25,23,23,25,23,23,24,24,23,24,24,22,24,25,22,20,24,24],[28,28,28,28,28,28,28,28,28,27,26,26,27,26,26,27,26,27,27,27,27,27,27,27,27,27,27,28,27,26,26,27,27,28,27,28,27,27,28,27,27,27,26,26,26,26,25,23,24,23,23,22,23,21,20,21,20,20,18,19,16,14,11,9,8,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,2,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,4,4,4,5,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,4,5,5,4,4,4,5,5,4,4,5,5,6,7,8,9,12,13,12,14,15,17,15,16,18,17,17,19,20,18,20,20,22,22,22,23,24,25,24,25,24,23,24,22,22,22,23,24,23,24,24,25,25,28,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,26,26,26,25,26,26,26,26,26,26,27,24,25,24,25,23,23,21,19,20,17,16,16,14,12,10,10,8,7,6,6,5,6,6,6,5,5,6,6,6,7,6,6,7,8,7,7,8,9,8,9,10,10,9,10,9,9,8,8,7,8,8,8,9,10,10,9,9,8,8,8,7,7,7,7,7,7,6,6,6,6,5,5,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,7,6,7,7,6,6,5,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,4,4,5,5,6,6,5,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,2,3,3,3,3,4,4,4,4,5,5,4,4,5,5,5,4,4,4,4,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,4,4,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,6,6,8,8,10,10,10,11,11,13,14,16,17,17,20,20,19,18,19,19,20,22,20,21,21,22,24,24,24,23,24,23,25,24,23,26,22,24,25,23,22,24,23,24,24,23,22,23,25,23,21,24,26],[29,28,28,29,28,29,28,28,29,27,27,27,27,26,26,27,26,27,27,27,27,27,27,27,28,27,27,27,27,26,27,27,27,28,27,27,27,27,28,27,27,27,26,26,27,26,25,24,24,24,23,22,23,22,21,22,20,21,19,19,16,15,12,9,8,7,6,5,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,3,3,3,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,2,2,3,3,2,3,3,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,4,4,4,4,3,3,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,6,7,8,9,10,12,13,13,15,16,17,16,18,20,19,18,19,20,20,20,22,23,23,22,24,24,25,25,25,23,23,23,23,23,23,24,24,24,25,24,25,26,27,25,26,26,26,26,27,26,26,27,26,26,26,26,27,26,27,26,27,26,27,26,26,25,26,26,26,26,26,26,27,24,24,23,24,23,21,22,19,19,18,16,17,15,13,12,10,8,8,7,6,6,6,7,6,6,6,7,7,7,8,8,7,8,9,8,8,9,10,10,10,10,10,10,11,10,10,9,9,9,9,9,9,10,11,10,10,10,10,10,8,8,8,8,8,8,7,7,7,6,6,6,6,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,7,8,7,7,7,6,5,5,4,4,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,6,7,7,6,5,5,4,4,4,4,3,3,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,5,5,5,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,3,3,3,4,4,4,5,5,5,5,6,5,5,6,6,6,5,5,5,4,4,3,3,3,3,4,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,5,6,6,6,5,5,6,5,5,5,5,5,5,4,4,4,4,5,5,4,5,5,5,5,5,6,5,5,6,6,7,7,6,7,8,7,7,7,7,7,6,6,6,7,6,6,6,7,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,7,8,8,10,11,11,12,12,14,14,17,17,18,20,21,20,18,19,20,20,23,20,22,22,21,24,24,24,24,25,24,25,25,24,26,24,24,25,23,23,24,25,23,25,23,23,24,25,24,22,25,24],[28,29,28,29,29,29,29,29,29,28,28,28,28,27,28,27,28,28,28,29,28,28,28,28,28,28,28,28,29,28,27,28,29,29,28,29,28,28,29,28,29,28,28,28,27,27,26,25,26,26,23,23,25,22,23,24,22,22,21,22,19,16,14,12,10,8,7,6,5,5,4,4,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,4,5,5,4,4,5,4,4,5,5,5,4,5,5,5,5,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,4,3,4,4,4,4,4,4,4,4,5,6,5,5,5,5,5,4,4,4,4,4,4,3,3,4,3,4,3,3,4,4,5,5,5,5,5,4,4,4,4,4,3,3,3,2,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,6,6,7,6,7,7,7,7,7,8,7,9,8,7,6,6,6,6,5,5,4,5,5,4,3,4,4,3,2,3,3,1,1,3,2,1,0,1,1,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,5,6,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,3,4,5,5,5,5,6,6,6,6,7,7,7,6,6,7,6,5,5,5,6,6,6,6,6,7,8,9,10,12,14,14,16,16,18,18,19,19,22,22,21,23,24,22,23,24,25,24,25,26,26,27,26,26,27,26,26,22,24,26,26,25,25,26,26,27,27,27,27,27,28,28,27,28,28,28,28,29,28,28,29,28,29,28,28,28,29,28,28,28,27,28,28,28,28,27,27,27,26,26,26,25,25,24,23,22,22,20,18,18,15,14,13,11,10,10,7,6,7,7,8,7,8,9,9,9,9,10,10,10,10,11,10,11,12,12,12,12,13,13,13,13,11,12,11,10,11,11,11,12,11,13,13,11,12,12,12,11,10,10,10,10,9,10,9,8,8,7,8,6,7,6,6,6,8,7,7,8,8,7,8,8,9,8,8,9,10,9,10,10,9,9,8,8,7,6,5,5,4,4,4,5,5,5,6,5,6,6,5,5,5,5,6,6,5,5,6,5,5,5,6,6,5,7,6,6,6,6,7,7,8,8,8,9,9,8,7,6,6,6,6,5,5,6,6,6,7,8,7,8,8,9,8,8,7,7,6,6,6,6,5,6,6,5,5,5,5,5,5,5,4,4,4,4,3,4,5,4,3,4,5,4,4,5,5,5,5,5,6,7,5,5,6,6,5,5,7,6,5,7,7,7,6,6,7,7,6,6,7,6,6,6,7,7,7,6,7,7,6,5,6,6,6,5,6,6,5,5,6,5,4,4,5,5,5,5,5,6,6,6,7,7,8,8,9,7,7,8,7,7,6,6,6,6,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,6,5,5,6,7,6,7,8,8,8,8,8,8,8,8,8,8,8,7,8,8,8,7,7,7,8,7,7,7,6,6,5,5,5,5,6,5,5,6,7,6,7,8,7,7,8,8,8,8,8,9,10,9,9,9,9,9,8,8,8,8,8,8,8,8,9,7,6,7,6,7,9,9,8,9,9,9,9,9,9,9,9,10,11,9,9,8,11,10,9,9,8,9,8,8,8,8,8,8,8,8,7,8,7,7,7,7,6,6,7,8,9,10,10,12,13,14,14,13,16,16,18,19,19,22,23,21,19,22,23,21,24,22,23,24,25,26,26,27,24,26,25,26,26,25,27,25,26,27,23,24,26,26,24,26,24,24,25,26,24,23,25,26],[28,28,28,28,28,28,28,29,28,28,28,27,28,27,27,27,28,28,28,29,28,28,29,29,28,28,29,28,28,28,27,28,28,29,28,28,28,28,29,28,29,28,28,28,28,27,25,26,26,25,24,24,25,23,24,24,23,22,22,22,20,18,16,14,13,10,9,8,7,5,5,4,4,4,4,4,4,3,4,5,4,4,5,4,4,5,6,6,7,6,6,7,6,5,6,7,6,6,7,7,6,7,7,7,7,7,7,7,7,7,8,7,6,6,6,7,6,6,6,6,7,6,6,7,6,6,7,7,6,6,6,7,6,6,7,7,7,7,6,6,7,7,6,6,5,5,6,6,5,6,5,5,4,5,5,5,6,6,5,6,6,5,4,4,4,4,4,4,5,3,4,4,3,4,4,4,4,4,5,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,7,8,8,8,8,9,8,8,9,10,9,10,9,8,8,7,7,7,7,6,6,5,5,5,5,4,5,4,3,3,3,3,2,2,2,2,1,0,1,2,3,4,2,4,4,4,3,3,4,4,3,3,4,3,3,4,4,4,4,5,6,5,6,6,6,5,5,4,4,4,4,4,5,5,6,6,6,6,6,7,7,7,6,7,6,6,6,5,5,6,4,5,5,4,4,4,3,3,3,3,3,2,3,4,4,4,4,4,4,4,5,5,5,6,6,7,7,8,8,8,8,8,9,9,8,8,9,8,7,7,6,7,8,7,7,8,8,10,10,11,13,15,15,16,18,19,19,19,20,21,21,21,22,23,23,24,25,25,26,27,27,28,27,26,27,26,24,26,24,24,26,25,26,24,26,26,28,27,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,26,27,27,27,26,26,25,25,23,22,19,21,18,17,18,15,15,14,13,12,12,9,8,9,9,10,9,10,10,11,10,11,12,12,11,12,13,12,12,13,13,14,14,14,15,14,14,13,13,12,12,12,13,13,14,13,14,15,13,14,14,13,12,11,12,11,12,11,11,10,10,11,10,10,9,10,8,8,8,10,10,8,9,10,11,9,11,11,10,10,11,11,11,11,11,11,11,10,9,9,8,7,6,6,5,5,6,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,6,6,7,6,7,7,7,7,7,7,7,8,8,9,10,10,10,10,8,8,7,7,8,8,6,7,7,8,8,8,9,8,9,9,10,9,9,9,9,8,8,8,7,6,8,7,6,6,6,6,6,5,6,5,5,5,6,4,4,5,5,4,6,6,6,6,6,7,7,7,7,8,7,7,6,8,7,7,7,8,7,7,8,7,8,8,8,8,8,7,8,8,7,7,8,8,8,8,8,9,8,7,7,7,7,7,6,6,6,6,6,6,6,4,5,6,6,6,5,6,7,8,8,8,9,9,9,10,9,8,9,9,8,7,8,7,7,7,6,5,5,6,6,5,6,6,6,6,6,7,6,7,7,7,7,8,8,8,9,9,9,9,9,10,10,8,9,9,10,9,9,10,10,9,8,8,9,8,8,8,8,7,8,7,7,6,7,8,7,7,8,8,8,8,9,9,10,9,10,10,10,9,10,11,10,11,10,10,10,10,10,10,9,10,10,9,9,10,9,8,8,9,9,11,10,10,10,10,11,10,11,10,10,11,12,11,10,11,10,12,10,10,10,10,10,10,9,10,9,9,10,9,9,8,9,9,8,8,9,9,7,8,10,10,12,12,14,15,15,15,16,17,18,20,20,21,23,24,24,21,23,23,22,25,23,25,25,25,26,26,27,26,28,26,28,27,27,27,26,27,28,25,26,27,27,26,26,25,25,26,27,25,24,26,26],[29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,28,28,28,28,29,29,28,28,29,28,28,29,28,29,28,28,29,29,29,28,29,28,28,29,29,29,28,28,28,27,27,26,26,26,25,24,24,24,23,23,24,23,22,21,22,20,18,16,14,13,12,10,9,9,7,8,7,6,5,4,5,5,5,5,5,4,4,6,5,5,8,7,8,8,9,9,8,9,8,9,8,9,9,8,9,9,9,9,10,10,9,9,10,9,10,10,9,9,9,9,9,9,8,6,8,9,7,8,9,10,8,9,9,10,9,9,9,9,8,9,10,9,9,9,9,9,9,8,10,9,9,10,10,9,9,8,6,6,6,8,8,10,10,7,8,7,7,5,6,5,5,4,5,5,4,4,5,5,4,5,5,7,5,7,6,7,5,7,8,7,7,8,9,8,8,8,8,7,8,8,10,10,10,9,11,10,10,11,12,11,12,11,9,9,8,9,8,8,8,8,7,7,8,8,7,6,7,7,5,5,4,4,3,3,2,2,1,0,1,3,4,2,4,5,5,4,3,6,5,3,5,6,5,4,6,6,6,6,7,8,7,8,8,8,7,6,6,6,7,7,6,7,7,7,7,7,7,8,7,8,9,9,8,8,8,7,7,6,6,5,7,6,5,5,6,5,4,5,5,4,3,5,5,4,5,5,6,5,5,6,7,6,7,8,8,8,9,9,9,10,11,11,10,10,10,11,10,9,8,7,10,10,9,10,11,10,11,12,13,14,16,16,17,19,19,20,20,21,23,22,22,24,24,23,24,25,26,26,25,27,27,28,26,27,26,26,27,25,25,26,26,27,26,26,27,28,28,29,27,29,28,28,28,29,28,28,28,28,28,28,28,28,28,27,27,28,28,28,28,28,27,27,28,27,28,27,27,27,26,26,26,25,25,24,23,22,23,21,17,21,17,17,16,15,13,13,12,11,11,10,11,11,11,11,12,11,13,13,12,13,14,14,13,14,14,16,15,15,16,16,16,16,14,14,13,14,13,14,15,14,15,16,16,14,16,16,15,14,13,13,13,13,13,12,12,12,13,11,11,11,11,10,9,9,10,11,10,10,11,12,10,11,11,11,11,12,12,12,12,12,12,12,10,10,10,9,8,8,7,7,7,7,7,7,7,8,8,8,8,8,7,8,8,7,8,8,8,7,8,8,7,9,8,8,9,9,8,9,10,9,10,12,12,12,11,10,9,9,9,9,8,8,9,9,10,10,10,11,10,12,11,12,11,10,10,10,10,9,9,11,8,8,8,8,8,7,7,7,7,7,6,5,7,7,5,6,7,7,5,7,7,7,6,7,7,7,8,9,10,9,8,8,9,8,8,9,8,8,8,9,9,8,8,9,9,9,8,9,9,9,9,9,9,10,9,10,10,9,9,9,10,8,9,8,9,9,9,9,8,7,6,7,8,8,9,9,9,8,9,10,10,11,11,11,11,11,10,10,11,11,9,9,9,8,8,7,7,6,7,8,6,7,8,8,7,7,8,8,8,9,9,8,9,9,9,11,10,10,10,10,11,11,10,11,10,11,10,9,10,11,10,10,10,10,10,10,10,9,9,9,9,9,9,8,9,9,9,9,10,10,9,10,11,10,11,11,11,11,10,11,13,12,13,11,11,12,11,11,11,11,11,11,11,11,11,11,10,10,12,10,12,12,12,12,12,13,11,12,12,12,13,13,14,12,12,11,13,12,11,11,11,11,11,10,11,10,10,10,9,10,9,10,11,9,9,10,10,9,9,11,12,14,13,15,16,15,16,16,18,18,19,20,20,24,25,23,22,24,24,23,26,23,24,26,25,27,27,27,27,27,26,28,28,27,28,26,27,28,26,27,27,27,27,28,26,26,27,28,26,25,27,27],[29,29,29,29,29,29,29,29,29,28,28,28,29,27,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,27,29,29,30,28,29,28,28,29,28,29,28,28,28,28,28,26,26,27,25,25,25,25,24,23,25,23,22,22,23,21,19,18,16,14,14,13,11,11,9,9,8,7,7,5,6,5,4,6,7,6,6,8,8,7,8,10,11,10,10,10,11,11,9,11,11,11,9,11,11,11,11,11,12,11,12,11,11,11,11,12,11,10,9,9,9,9,9,9,9,9,8,8,10,10,9,11,10,11,11,11,11,11,10,11,11,12,11,11,11,11,11,11,11,11,12,10,9,9,8,8,8,8,7,8,8,9,8,8,9,8,7,6,7,7,6,6,6,8,5,7,7,7,5,7,7,7,7,8,8,8,7,8,9,9,9,9,10,9,10,10,10,10,10,11,12,13,12,12,13,12,12,13,14,13,14,13,11,12,11,11,11,10,11,10,10,11,9,9,8,9,8,8,6,6,5,5,4,5,4,3,2,1,0,1,5,3,5,6,6,5,4,5,5,4,5,6,4,4,6,6,5,6,8,8,9,9,8,8,8,8,7,7,9,8,9,9,9,10,9,10,10,11,11,11,12,11,10,11,11,10,11,9,9,7,9,8,6,6,7,7,5,5,6,5,4,5,6,6,7,8,8,7,7,9,8,7,10,10,10,10,13,12,11,12,12,13,13,13,13,13,13,11,10,8,11,13,11,10,13,13,13,13,13,14,18,19,18,18,20,21,21,21,23,22,21,24,24,23,25,25,26,26,26,27,27,27,27,28,26,25,25,24,25,26,25,26,25,26,27,28,28,28,27,28,27,28,28,28,28,27,28,28,28,28,28,28,28,28,27,28,28,27,28,27,27,28,27,26,28,26,26,27,26,26,27,26,25,23,23,21,22,19,18,20,17,18,17,16,15,14,13,13,13,14,13,13,13,14,15,13,15,15,17,15,16,17,16,15,16,18,17,19,19,20,19,19,17,18,16,15,16,16,17,17,16,18,20,17,19,18,16,15,15,16,15,15,15,15,14,14,16,14,13,13,13,11,11,11,13,13,12,13,13,13,13,14,14,13,14,15,15,15,16,14,15,15,13,12,11,10,10,9,8,7,8,9,9,8,9,9,10,10,11,11,9,11,10,10,10,10,11,10,9,10,11,11,10,11,11,11,10,12,12,10,12,12,13,13,12,11,11,11,11,11,11,12,11,11,12,12,12,13,13,13,13,14,13,12,12,13,12,11,12,12,11,11,11,10,11,10,10,9,10,10,8,7,9,9,6,7,9,9,6,8,10,10,8,9,10,10,9,11,11,11,11,10,11,11,10,11,12,11,11,12,13,11,12,12,12,12,10,11,11,12,11,12,11,12,13,11,12,12,11,11,11,11,11,10,10,10,10,10,10,8,7,8,9,10,8,9,9,10,12,11,11,13,13,12,13,11,12,12,12,12,10,10,11,10,11,10,8,8,10,11,7,9,10,11,9,10,11,11,10,10,11,11,11,12,13,12,12,14,13,13,13,14,13,13,14,14,13,13,12,13,13,12,12,12,12,11,12,12,11,12,12,12,12,11,12,11,10,11,12,12,12,12,14,13,14,13,14,13,13,13,15,14,14,14,14,13,13,14,14,12,13,14,13,13,13,13,13,12,14,13,14,14,13,14,14,14,13,14,14,13,14,14,16,13,15,14,15,15,13,14,14,14,13,14,14,13,13,14,13,12,13,14,12,12,12,12,12,11,11,12,13,15,14,16,17,18,18,19,20,22,22,24,22,26,26,25,25,26,25,25,26,26,25,27,26,28,28,28,27,28,27,28,28,28,28,28,28,28,27,27,28,28,28,28,27,26,28,28,27,26,28,27],[29,29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,30,29,29,29,29,29,29,29,28,28,29,28,28,27,27,27,26,26,26,26,25,26,26,24,25,23,24,21,20,18,18,16,15,14,11,11,11,9,9,8,9,7,7,6,6,8,8,7,8,9,9,9,11,11,11,12,12,12,12,13,12,13,12,13,13,13,13,13,14,14,14,13,14,13,14,13,13,13,13,14,13,10,13,13,10,9,11,13,11,12,13,13,13,13,13,14,13,13,13,15,13,13,15,14,14,14,14,13,13,13,15,13,14,14,12,12,13,12,9,10,10,11,11,14,14,9,11,10,10,9,9,10,7,7,9,8,6,7,9,7,7,9,10,9,8,12,13,12,11,11,12,11,12,12,13,13,12,13,13,13,14,13,15,15,13,15,15,16,15,16,17,17,17,16,15,14,13,13,13,12,14,12,12,12,13,12,11,12,12,11,10,8,7,8,5,7,5,5,3,2,1,0,2,2,4,5,6,4,4,7,6,5,7,9,8,8,10,11,9,11,10,12,10,11,11,12,11,12,10,11,11,11,11,12,12,13,12,13,13,13,13,14,14,14,13,14,13,13,12,10,11,11,11,10,9,9,9,10,7,9,10,7,7,9,9,9,9,9,9,9,9,10,11,11,12,13,13,13,15,14,14,14,15,15,16,14,14,15,15,11,12,9,11,13,12,12,13,14,14,15,15,18,20,20,19,22,23,23,21,24,26,24,23,26,27,24,26,26,28,27,27,28,28,28,28,29,28,27,28,26,27,27,27,27,26,28,28,29,29,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,28,28,29,29,29,29,29,29,28,29,28,29,28,27,28,26,27,26,26,25,24,24,22,23,21,19,22,17,18,19,16,17,16,15,14,16,15,15,15,14,15,16,15,16,17,18,17,18,19,19,19,18,20,21,21,21,21,22,22,19,19,18,18,18,18,18,19,18,21,22,19,22,21,18,18,19,19,17,18,19,16,16,17,17,16,15,14,15,13,13,13,14,14,16,15,17,16,16,18,17,16,17,18,17,17,16,16,15,16,16,14,15,13,12,13,11,11,11,12,12,11,12,13,13,13,12,13,12,12,12,12,13,12,13,12,12,12,12,12,11,13,13,12,12,13,13,12,16,14,16,16,15,13,13,13,12,13,12,12,11,14,13,15,16,16,14,17,16,17,15,15,15,15,13,13,14,14,12,13,12,11,12,12,11,11,11,11,10,10,12,11,10,10,11,10,10,11,11,10,11,12,12,11,12,13,13,13,13,12,12,13,13,12,14,13,12,13,14,13,13,12,13,13,12,12,13,13,13,13,13,13,15,12,14,14,12,11,13,12,13,12,11,12,12,12,12,11,10,9,10,12,12,11,12,13,13,14,14,14,15,15,16,13,13,14,14,13,12,11,12,11,11,10,9,9,10,11,9,10,12,11,10,12,13,11,12,12,13,13,12,13,14,15,13,15,14,14,15,16,15,14,16,17,16,17,13,16,16,13,13,15,14,13,14,14,13,15,11,12,12,12,14,12,14,12,14,14,13,14,15,14,15,16,15,15,15,16,18,17,17,16,17,17,15,16,16,15,16,16,15,15,16,15,14,14,15,15,14,15,16,16,16,17,15,17,16,17,17,18,20,17,18,16,18,16,15,16,17,18,15,16,17,15,16,16,16,14,15,17,14,14,15,15,14,14,14,16,15,17,17,19,19,19,19,20,20,22,23,22,22,25,26,25,25,26,25,26,27,27,26,27,26,28,28,28,28,28,27,29,29,28,29,28,28,28,28,28,28,28,28,28,28,27,28,28,27,26,27,27],[29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,28,28,29,28,28,29,28,29,29,28,29,29,29,29,28,28,29,29,29,28,29,29,29,29,28,29,28,28,29,29,28,27,27,27,24,25,26,25,24,25,25,23,23,23,23,21,19,18,16,14,15,13,11,11,10,9,9,8,7,7,8,7,7,9,9,8,9,10,11,11,12,13,14,13,15,15,14,15,14,14,13,13,11,14,14,12,13,14,13,11,13,12,11,10,12,13,10,11,10,9,10,9,8,7,7,9,8,6,9,11,8,9,11,11,10,11,13,13,13,13,13,14,14,14,13,13,14,14,12,14,15,12,12,12,12,10,10,11,9,10,11,14,11,11,10,11,11,8,9,9,8,6,8,8,6,6,7,7,5,6,7,6,6,7,9,8,9,9,12,11,11,12,14,13,13,13,14,14,14,14,15,16,15,15,16,16,16,17,16,17,16,16,16,15,13,14,15,13,14,13,13,14,13,12,12,12,10,10,10,9,8,8,7,6,4,5,4,4,3,1,0,1,2,4,5,3,4,6,6,5,7,7,6,7,8,9,9,11,10,10,9,11,11,11,11,11,10,12,12,13,13,13,14,14,14,14,15,14,14,14,14,14,15,15,15,14,14,13,13,12,13,13,11,10,11,11,8,9,10,7,7,8,9,8,7,8,8,8,9,9,10,10,10,10,10,12,13,12,13,13,13,14,12,11,12,12,12,11,11,9,10,12,11,11,11,13,14,14,14,15,17,18,18,20,21,21,21,22,24,22,22,24,25,23,25,25,26,25,26,27,26,27,27,27,26,25,25,26,25,26,26,26,27,27,26,28,27,28,28,28,28,29,28,29,28,28,29,28,28,29,28,29,28,28,28,29,28,28,28,27,27,27,28,27,27,27,26,27,25,25,25,25,23,21,21,19,20,19,16,19,17,17,17,16,15,14,13,13,13,13,14,14,15,16,17,16,16,17,18,17,18,19,18,18,18,19,19,18,21,21,21,21,19,19,18,18,17,18,18,18,18,19,21,19,20,18,17,17,17,16,17,17,15,15,17,15,15,14,14,14,14,14,13,14,14,14,15,16,16,15,16,17,16,16,16,17,16,16,16,16,16,15,15,14,15,12,12,12,10,10,13,13,13,12,13,13,15,13,13,14,13,14,13,14,13,14,15,14,13,14,15,14,13,14,15,14,14,14,15,15,15,15,15,16,15,14,16,16,15,15,14,14,14,15,15,15,16,15,15,17,17,17,16,15,16,16,15,15,16,15,14,15,14,13,14,13,13,12,14,13,12,12,13,12,10,11,12,11,10,12,12,11,13,13,12,12,13,14,14,15,14,14,14,14,14,14,16,15,13,15,15,16,15,14,16,16,14,14,15,15,14,15,15,15,16,14,14,14,14,12,13,13,13,13,12,13,12,12,13,12,12,10,13,12,12,11,12,13,14,14,14,15,14,16,15,14,14,14,14,13,11,12,11,11,12,11,10,11,12,11,10,12,12,12,12,12,13,12,13,14,13,14,14,14,15,15,15,17,16,16,16,17,17,16,17,17,18,17,17,18,17,16,15,16,15,14,14,14,13,13,12,11,12,12,13,13,13,13,14,15,15,15,15,16,17,17,17,18,17,17,17,17,18,17,18,17,17,17,15,16,17,15,15,16,16,13,15,14,15,15,16,16,16,15,16,17,16,17,17,17,18,18,18,18,18,17,18,17,18,17,17,18,17,16,18,17,17,16,17,16,16,17,15,16,15,15,14,14,14,15,15,16,16,17,18,18,18,18,19,21,21,23,22,25,25,24,25,25,24,25,25,26,25,27,26,27,26,27,27,27,26,27,28,27,28,27,27,27,28,27,27,27,27,27,27,26,26,27,26,25,27,27],[29,30,29,29,29,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,30,29,29,29,29,29,29,29,29,28,29,29,28,28,27,27,26,26,26,26,25,25,25,24,24,22,22,21,19,17,14,13,12,11,9,10,9,7,8,6,6,5,6,5,5,6,6,5,6,7,7,7,8,10,10,9,11,10,9,11,8,9,9,9,8,8,9,9,9,8,9,8,9,8,8,8,9,9,8,8,6,7,7,6,6,6,5,6,6,5,7,7,6,6,7,8,6,8,9,9,8,9,9,9,10,9,9,10,9,8,9,9,10,8,6,7,8,6,5,6,6,6,7,9,7,6,7,7,6,5,5,5,5,4,5,5,3,4,5,5,4,4,5,5,4,5,5,5,5,6,7,7,7,8,10,9,9,9,11,11,10,11,11,11,11,11,11,12,12,12,11,12,11,12,11,11,11,10,10,11,10,9,10,10,9,9,8,8,6,7,6,6,6,5,6,4,4,5,3,3,2,2,1,0,1,2,2,2,3,4,4,3,5,5,5,5,6,7,6,7,7,7,7,8,8,8,8,7,7,7,8,9,8,10,10,11,10,10,10,11,10,11,11,11,11,10,10,11,12,9,9,8,10,9,7,7,8,6,6,6,6,6,7,5,6,6,7,6,7,7,7,8,8,7,9,9,9,8,10,11,10,10,12,12,11,11,11,11,11,10,11,8,9,11,11,9,9,10,11,12,12,13,16,17,17,20,20,21,21,22,24,22,21,23,24,25,25,26,27,27,26,28,27,28,28,28,27,26,26,26,25,27,26,27,26,27,27,28,28,29,29,29,28,29,29,29,29,28,29,28,28,28,28,28,28,28,28,29,28,28,28,28,27,28,28,28,28,27,28,28,26,26,26,26,26,24,24,21,22,20,18,20,17,17,16,15,14,13,11,11,11,12,11,13,13,13,14,13,14,14,14,13,14,16,14,14,14,16,16,16,17,18,17,17,16,16,15,15,15,16,15,16,15,16,17,16,16,15,14,15,15,13,13,14,13,13,14,13,13,12,12,13,12,11,11,11,12,11,12,12,12,12,12,12,11,12,12,12,13,13,13,13,13,13,12,11,11,10,9,8,7,7,7,9,8,8,10,10,11,11,9,10,10,10,10,10,11,9,10,10,11,9,10,11,10,10,11,11,9,10,11,11,11,12,12,12,12,11,11,11,11,10,11,10,11,11,10,11,11,10,11,11,11,12,11,10,11,11,10,10,11,10,11,10,9,9,11,9,10,9,10,10,8,8,9,9,8,8,9,8,8,9,9,8,8,10,10,9,9,10,11,10,11,12,10,10,12,10,11,10,10,11,11,11,11,10,10,11,10,10,11,10,10,10,10,12,12,10,10,11,10,10,9,10,9,9,9,10,8,8,9,8,7,7,8,8,8,7,8,9,9,10,9,10,10,11,11,11,11,11,11,11,10,9,9,9,10,9,8,8,9,9,8,9,9,9,9,9,9,10,10,9,10,11,10,11,11,12,12,11,11,11,12,11,11,12,11,11,12,11,11,12,11,12,11,11,12,11,10,11,10,10,10,9,9,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,11,13,12,13,13,13,12,12,12,12,12,12,11,11,12,12,11,11,11,12,11,12,12,12,13,11,13,12,12,13,12,13,13,14,12,12,12,12,12,13,12,12,12,12,11,12,12,12,11,11,12,11,12,12,11,11,11,11,11,11,12,12,14,14,16,15,16,17,17,17,19,20,22,21,25,25,24,23,24,24,24,25,25,24,26,25,26,27,27,27,27,27,28,27,27,29,27,28,28,28,27,28,28,28,28,27,26,27,28,26,25,27,26],[29,29,29,29,29,29,28,28,29,27,27,28,28,28,27,28,27,28,27,27,28,28,28,28,28,28,27,28,28,27,27,28,28,28,27,28,28,28,28,28,28,27,27,27,27,26,25,25,26,24,24,24,24,23,22,23,21,22,20,20,18,17,14,13,11,11,10,9,8,8,7,7,6,6,5,5,5,4,5,5,5,5,6,6,6,7,8,8,8,9,8,8,8,7,8,8,6,6,8,8,6,7,8,7,6,8,8,6,6,8,8,6,6,6,5,5,5,5,4,5,6,5,6,7,6,5,6,7,6,6,7,7,8,9,8,9,9,9,8,9,8,8,8,7,8,8,6,6,6,6,5,5,5,5,5,5,6,6,5,6,6,5,4,4,4,4,4,4,4,4,3,5,4,5,4,5,5,5,5,5,5,6,6,7,7,7,9,8,8,9,9,8,9,9,9,10,10,9,9,10,10,10,11,11,11,11,11,10,10,9,9,9,9,9,8,8,7,8,8,7,7,6,6,5,5,5,5,4,4,4,3,4,4,3,3,2,1,0,1,3,2,2,2,2,3,3,4,6,4,4,4,5,6,7,7,6,7,8,8,7,7,7,7,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,7,7,8,7,6,7,7,7,6,6,7,5,5,5,6,6,6,7,7,5,7,7,7,6,8,7,7,9,9,8,8,9,10,10,10,9,10,10,10,9,9,8,9,9,10,8,9,10,11,11,12,12,14,15,15,17,18,17,17,19,20,19,19,20,20,20,22,22,24,24,23,25,25,26,26,26,25,24,24,24,25,25,25,26,25,26,25,27,27,28,26,27,26,27,27,28,27,27,27,27,27,27,27,27,27,27,27,28,27,27,27,26,27,27,27,26,27,26,26,26,24,24,25,24,23,21,21,20,20,18,16,18,16,15,14,13,12,11,11,10,11,10,11,11,11,13,12,12,13,12,13,13,13,14,13,13,14,14,15,15,17,17,17,16,15,15,15,13,13,13,13,14,14,15,16,15,16,15,13,14,12,12,13,12,12,11,12,11,11,10,10,11,10,11,10,11,11,10,10,11,10,11,11,12,11,11,12,11,11,12,12,12,11,10,10,9,9,8,7,7,6,7,8,9,8,7,9,9,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,11,11,11,12,11,10,10,9,10,9,9,8,9,10,9,10,11,10,10,11,11,11,10,10,10,10,9,9,9,9,9,9,8,8,8,8,8,8,8,9,8,8,8,9,7,7,8,9,7,8,8,8,7,9,9,9,8,9,10,9,9,10,9,9,9,10,10,9,9,10,10,10,9,10,11,10,9,10,10,10,10,10,10,10,10,10,10,9,9,9,9,8,8,8,7,8,7,7,7,6,6,5,6,7,6,6,6,8,8,9,9,9,10,11,11,10,9,10,9,9,8,9,9,8,8,8,7,7,8,8,8,8,8,9,8,9,9,9,9,9,9,10,10,10,10,10,10,11,11,11,12,12,12,12,12,12,12,12,12,12,11,11,11,11,10,11,10,10,10,9,9,9,9,9,9,10,9,10,10,10,11,11,10,12,11,12,12,12,12,12,12,13,13,12,12,12,12,12,11,12,12,11,11,12,11,9,10,11,11,11,12,11,11,11,12,13,11,12,12,12,13,13,14,12,13,11,14,13,12,12,12,12,12,11,11,11,11,11,11,11,11,11,10,10,10,9,9,9,9,10,10,12,12,14,15,16,14,15,16,19,18,20,21,23,23,23,23,24,23,22,24,25,23,25,25,25,26,27,25,26,25,26,27,26,27,26,26,27,27,26,26,27,26,27,27,26,27,27,25,25,27,26],[28,28,28,28,28,29,28,28,28,27,26,26,26,27,26,27,26,26,27,25,27,28,27,26,28,27,26,27,27,26,26,27,27,28,27,27,26,27,27,27,27,27,26,27,27,26,26,24,25,24,24,23,23,24,23,22,21,21,20,19,17,16,14,12,11,10,8,8,7,7,6,7,6,5,5,5,5,4,5,6,5,5,6,6,5,6,7,7,7,7,7,7,7,6,6,7,6,5,6,6,6,6,6,6,6,5,6,6,5,6,5,5,5,5,5,4,5,4,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,6,6,6,6,6,6,6,5,6,6,4,4,5,4,5,5,6,5,5,5,5,5,4,4,5,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,6,6,6,7,6,7,7,9,9,8,8,9,10,9,9,10,10,10,9,9,8,7,7,8,6,7,6,6,5,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,5,6,5,5,4,4,5,5,5,5,6,6,6,6,7,7,7,8,8,8,8,7,7,7,6,7,6,5,5,5,5,5,4,5,5,5,4,5,4,4,4,4,5,5,5,5,5,5,6,6,5,6,7,7,7,7,7,7,7,8,9,9,8,9,8,8,7,8,7,8,8,8,8,8,9,10,11,10,12,14,14,14,18,18,18,17,18,20,18,18,20,21,20,21,22,22,23,22,24,25,25,25,25,24,23,24,24,23,24,24,24,25,23,24,26,26,27,26,27,27,27,26,28,27,27,27,27,27,27,28,28,27,28,26,28,27,27,27,26,27,27,26,27,28,27,26,26,25,26,24,24,24,21,22,20,20,19,16,18,16,15,14,12,11,10,11,9,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,14,14,15,15,15,15,12,13,12,12,12,11,12,12,13,14,15,13,15,14,12,12,11,11,11,11,11,11,10,9,10,9,9,9,9,9,7,8,9,8,8,9,9,8,8,9,9,9,9,9,10,10,10,10,9,9,8,7,7,6,5,5,5,4,5,5,5,5,7,6,6,6,7,7,7,6,7,7,7,7,8,7,7,7,8,7,7,8,8,8,8,8,8,8,9,10,10,10,10,8,8,8,8,8,8,7,7,8,8,8,8,9,9,10,10,10,9,9,9,9,8,9,8,9,8,8,9,7,7,7,7,7,7,7,7,6,6,7,6,6,6,6,5,6,7,6,6,7,7,6,6,7,7,8,7,8,8,8,8,8,8,7,8,8,8,8,8,8,8,8,8,8,8,8,8,9,8,9,9,9,9,9,9,8,9,8,8,8,7,7,6,6,7,6,6,5,6,7,6,5,6,7,7,8,9,9,9,10,10,9,9,10,9,9,8,8,8,8,8,7,7,6,7,7,7,7,8,7,7,7,8,7,8,8,8,7,8,8,9,8,8,8,8,8,9,9,9,9,9,10,10,9,9,9,10,9,9,9,9,9,9,9,8,8,8,7,7,7,8,8,8,9,9,8,9,9,9,10,9,9,10,10,10,10,11,11,11,10,10,11,11,10,10,10,10,9,10,10,10,8,9,9,9,9,10,10,10,10,10,11,10,11,10,11,11,11,12,10,11,10,12,10,10,10,10,9,9,9,9,9,9,9,9,8,8,8,8,8,8,8,7,8,7,9,10,10,11,12,14,13,13,14,14,16,17,18,19,20,20,19,21,21,20,21,23,22,23,24,24,25,25,25,24,25,24,26,26,25,26,25,25,26,26,24,25,25,24,25,24,24,25,25,23,24,24,23],[28,28,28,28,28,28,28,27,28,27,26,26,26,26,26,26,25,27,26,26,27,27,26,27,27,27,26,27,27,26,27,27,27,28,27,27,27,27,27,27,27,26,26,27,26,26,25,24,25,24,23,22,23,23,21,22,21,20,19,20,17,16,14,12,11,9,9,8,7,6,7,6,5,4,4,5,5,4,5,5,4,4,5,5,4,5,5,6,6,6,6,6,5,5,6,5,5,5,5,6,5,5,5,5,5,5,5,4,5,5,6,5,5,4,4,4,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,6,6,5,6,5,5,5,4,4,5,4,4,4,4,3,3,4,4,4,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,2,3,3,2,2,3,2,2,3,3,3,3,4,4,3,3,4,4,4,5,5,5,5,6,6,7,7,7,7,8,8,7,8,8,8,8,8,7,7,6,7,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,2,1,0,1,1,1,1,1,2,2,2,2,3,3,3,4,4,4,4,5,5,5,4,4,3,4,4,4,4,4,5,5,5,5,5,5,6,7,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,5,5,6,5,5,6,6,6,6,6,6,7,7,8,8,7,7,8,8,8,8,7,6,8,8,8,8,8,9,9,10,10,11,13,14,14,17,16,18,16,17,18,18,18,19,20,20,21,20,22,23,22,24,25,25,24,25,24,24,24,24,24,24,24,25,24,24,25,26,26,27,25,26,27,27,27,26,26,27,27,27,27,27,27,27,27,27,26,27,27,27,26,27,26,27,26,26,27,26,26,26,24,25,25,24,23,22,22,20,20,19,17,17,15,14,14,12,10,10,9,8,9,8,8,10,9,10,10,10,10,10,10,10,11,11,11,11,12,12,12,13,14,14,14,14,11,12,11,11,10,11,11,11,12,12,14,12,14,12,12,12,10,10,10,10,10,9,10,9,9,9,8,9,8,8,7,8,8,8,8,8,8,8,8,9,8,8,9,9,8,9,9,9,8,9,9,7,7,6,5,5,4,4,5,5,4,4,6,5,5,5,6,6,6,6,6,6,6,6,6,5,5,6,6,6,6,7,6,6,6,7,8,7,8,9,9,9,8,8,6,7,6,7,6,6,6,7,7,7,8,8,8,9,9,8,8,8,8,8,7,7,7,7,6,6,7,6,6,6,6,5,5,6,5,5,5,6,5,5,5,5,5,5,6,5,4,5,6,6,5,6,7,6,6,7,7,6,6,7,7,6,6,7,7,7,7,7,7,7,7,7,8,7,7,8,8,8,8,8,8,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,6,6,5,6,6,6,7,7,8,8,9,9,9,8,8,9,8,8,8,8,8,7,7,6,6,5,6,7,6,5,7,7,6,6,7,6,6,7,7,7,7,7,8,8,8,8,8,7,8,9,9,9,9,9,9,9,8,9,9,8,9,9,9,9,9,8,8,8,8,7,7,7,8,7,7,8,8,8,8,8,8,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,9,9,10,10,8,9,9,9,8,9,9,9,9,9,10,9,10,10,10,10,11,11,10,10,10,11,10,9,9,9,9,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,6,8,9,10,10,11,12,12,12,12,14,15,15,16,17,20,19,18,19,21,18,18,20,20,20,23,21,23,23,24,22,24,23,25,25,25,26,24,25,25,24,23,25,24,23,25,24,23,25,25,22,22,24,24],[29,29,29,29,29,29,29,29,29,28,28,28,28,27,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,28,27,28,29,29,28,29,28,28,29,28,29,28,28,28,28,28,26,26,27,24,24,25,26,23,23,25,23,22,20,20,18,17,13,10,9,8,7,6,6,5,5,4,4,3,3,3,3,3,3,4,3,4,4,3,3,4,4,5,5,4,4,5,4,4,4,5,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,3,3,3,3,2,3,3,2,2,2,2,1,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,4,4,4,4,5,6,6,6,6,6,7,7,7,7,7,7,7,6,6,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,3,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,3,3,4,4,4,4,4,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,3,4,4,4,4,4,5,5,4,5,5,5,5,6,6,6,6,5,7,6,6,6,5,7,6,6,6,6,7,7,8,9,9,11,13,13,15,17,17,17,19,20,19,19,21,22,22,23,24,25,25,24,27,27,27,27,27,25,25,25,26,24,24,26,26,25,24,26,27,28,28,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,28,28,28,26,28,27,27,27,25,26,26,26,25,24,23,21,21,18,17,17,15,14,12,11,9,9,8,7,7,7,7,6,7,7,8,8,8,8,9,9,9,10,10,10,11,12,11,12,13,13,13,12,11,12,10,9,10,9,10,11,11,12,13,12,11,11,10,10,10,9,9,9,9,8,8,8,7,7,7,7,6,5,5,5,6,6,5,6,6,6,6,7,7,7,8,7,8,8,8,8,8,7,7,6,6,4,5,4,3,3,3,4,4,3,4,4,4,4,4,5,4,4,4,4,4,4,5,4,4,4,4,4,4,5,5,5,5,6,6,6,7,8,8,8,7,6,6,5,5,5,5,4,5,5,6,6,6,6,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,6,5,5,5,6,6,6,6,6,6,5,5,6,5,5,5,4,5,4,5,5,4,4,4,4,5,4,4,4,5,5,6,6,6,7,7,7,6,7,7,7,7,6,6,6,6,5,5,5,4,5,5,4,4,5,4,4,4,5,4,4,5,5,4,5,6,5,6,6,6,6,6,6,7,7,6,7,7,6,7,6,7,7,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,6,5,6,6,6,7,6,7,8,7,7,8,8,9,8,8,8,8,8,8,7,7,8,7,7,7,7,6,6,6,6,6,8,7,7,7,7,8,8,8,8,8,8,9,9,8,8,8,9,8,7,7,7,7,6,7,7,6,6,6,6,5,6,6,5,5,6,5,5,5,6,7,8,10,10,12,12,12,12,13,14,15,16,18,18,21,20,20,20,21,20,20,22,22,21,24,23,24,24,26,25,25,25,26,26,25,27,26,25,25,25,26,26,26,25,25,26,24,26,26,23,24,25,23],[29,29,28,29,29,29,29,29,29,28,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,29,28,28,27,28,28,28,28,28,27,28,28,27,25,25,26,25,25,25,25,25,23,24,21,22,20,20,18,16,13,10,9,8,7,6,5,5,5,4,4,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,6,6,6,6,7,6,6,7,7,7,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,3,4,5,4,4,4,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,4,5,5,5,6,6,5,5,7,6,5,6,5,5,7,7,6,6,7,8,8,9,10,12,13,13,16,17,18,17,18,20,19,18,20,21,21,23,22,25,25,24,26,26,26,26,27,25,24,24,24,23,24,24,25,24,24,25,26,26,27,25,27,27,27,27,28,27,27,27,27,27,27,27,27,27,27,27,28,28,28,27,28,27,27,28,27,28,27,27,28,25,26,26,26,24,23,22,20,21,19,15,18,13,13,12,11,9,8,8,7,7,7,7,7,7,7,7,7,8,8,8,8,9,10,9,9,9,10,10,10,11,11,11,12,11,11,9,9,9,9,9,10,10,11,12,10,11,10,10,9,9,9,9,9,8,8,8,7,7,7,6,6,6,5,5,6,6,5,5,6,6,5,6,6,6,6,7,7,7,7,8,7,7,6,6,5,5,4,4,3,3,3,3,3,3,3,4,4,4,5,4,4,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,7,8,8,8,7,6,6,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,4,5,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,5,6,6,6,7,7,7,6,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,6,6,7,6,6,7,6,6,6,6,6,6,6,5,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,7,8,7,7,7,7,7,7,8,6,7,7,7,6,8,7,7,8,8,9,7,8,8,8,8,8,9,8,8,7,8,8,8,7,7,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,7,7,9,9,10,11,11,11,11,13,14,16,16,17,20,20,19,18,20,20,19,22,20,21,22,23,24,24,25,24,26,24,25,25,25,26,24,25,26,23,24,25,25,24,26,24,24,25,26,23,23,24,24],[27,27,27,27,27,27,27,27,27,26,26,25,26,26,25,27,25,26,26,25,26,27,26,26,27,26,25,27,26,25,26,26,26,27,26,26,26,26,26,26,26,26,25,26,25,25,25,23,23,23,23,22,21,23,20,20,19,19,19,17,15,15,12,10,9,8,7,6,6,5,4,5,4,3,3,4,3,3,3,4,3,3,4,4,3,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,6,7,7,7,7,7,6,5,5,5,5,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,3,4,4,4,3,3,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,5,4,4,4,4,4,3,3,4,3,3,3,3,3,2,3,3,2,2,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,6,6,5,6,5,6,6,6,6,6,7,7,8,8,10,12,12,12,14,15,17,14,16,18,16,16,17,18,19,18,19,21,21,21,23,23,24,23,23,22,21,22,22,20,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,25,25,25,26,26,26,26,26,26,26,26,26,25,25,25,25,26,25,25,26,25,25,25,24,24,24,24,23,21,22,18,18,18,15,16,13,13,12,10,8,8,7,7,7,6,7,7,7,7,7,7,8,8,8,8,8,9,9,9,9,10,10,10,11,11,11,11,9,10,9,9,9,8,9,9,9,10,11,10,10,10,9,9,8,8,9,8,8,7,7,7,7,6,6,6,6,6,5,6,6,5,5,6,6,5,6,6,6,6,6,7,7,8,7,7,7,6,6,5,5,4,4,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,6,7,8,8,8,7,6,5,5,5,5,5,4,5,5,6,6,6,7,7,7,7,7,7,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,5,4,4,4,5,5,6,6,6,7,7,7,6,7,7,7,7,6,6,6,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,7,6,6,6,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,7,7,7,7,7,8,7,7,7,8,7,8,8,7,8,7,8,7,7,7,7,6,6,6,6,6,6,6,5,6,5,5,6,5,5,5,4,5,5,6,7,8,8,10,11,11,11,12,12,14,15,15,16,18,17,17,18,18,17,18,20,19,20,20,20,23,22,23,23,25,22,23,23,24,24,22,23,24,22,22,23,24,23,24,22,22,22,24,20,20,22,22],[29,29,28,28,29,29,28,28,28,27,27,26,27,27,26,27,26,27,27,26,28,27,27,28,27,27,27,28,28,27,27,27,27,28,27,28,27,28,28,28,27,27,27,27,26,26,26,24,26,24,24,23,25,23,22,23,22,21,20,21,17,15,13,10,9,8,6,6,5,4,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,4,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,5,5,5,5,5,6,6,6,6,6,6,6,5,5,4,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,3,3,4,4,3,3,2,2,2,2,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,6,6,6,5,5,6,6,5,6,6,6,7,8,8,9,11,12,12,14,16,16,15,16,18,19,19,21,22,21,22,21,24,25,22,26,27,26,25,26,25,25,24,24,23,24,23,25,25,24,25,27,26,27,26,25,26,27,26,27,26,27,27,27,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,27,26,27,26,26,26,25,24,23,23,20,20,19,17,17,15,14,12,10,9,8,8,7,6,7,7,7,7,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,11,11,10,11,10,9,8,8,9,9,9,9,10,10,11,10,10,9,9,9,8,8,8,8,8,8,8,7,7,7,6,6,6,5,5,5,6,6,5,5,6,6,5,6,6,6,6,7,7,7,7,7,7,7,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,6,5,6,7,7,8,6,6,5,4,4,4,5,4,4,4,5,5,5,6,5,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,4,3,3,3,4,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,4,5,5,4,5,6,5,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,4,4,4,5,5,5,6,6,6,7,6,6,6,6,7,6,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,8,8,8,8,8,8,7,7,7,7,7,6,7,7,7,6,6,6,7,6,7,7,6,7,6,7,7,7,7,7,7,8,8,7,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,6,7,8,8,10,10,11,10,11,13,13,15,16,17,19,18,17,18,19,17,18,21,20,20,22,21,23,24,25,23,24,23,25,24,25,25,24,25,24,23,23,24,25,24,25,23,23,25,25,22,21,24,24],[29,29,29,29,29,29,29,28,29,28,28,27,28,28,28,27,27,28,27,28,28,27,28,28,28,28,28,28,28,27,27,28,28,29,28,28,27,28,28,28,28,28,27,27,27,27,26,25,25,25,24,24,25,23,23,24,22,22,20,21,17,16,13,10,8,7,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,6,5,6,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,3,4,4,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4,4,5,5,4,5,4,5,5,5,5,5,6,6,7,7,9,11,11,12,14,16,17,16,18,20,19,18,21,22,22,22,24,24,24,24,25,26,26,26,26,24,25,25,23,23,24,24,25,24,25,24,26,25,27,25,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,27,28,26,27,28,27,27,28,27,28,25,26,27,26,26,25,23,21,22,19,17,17,15,13,12,10,8,8,6,6,5,5,6,5,5,5,6,6,6,7,7,7,8,9,8,8,9,9,9,9,10,10,10,10,9,10,8,8,8,8,9,9,9,10,10,9,9,9,9,8,8,8,8,7,7,7,7,6,6,5,5,5,4,4,4,4,4,4,4,4,5,4,4,5,5,5,6,6,6,6,7,7,6,6,5,4,4,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,4,3,3,3,4,4,3,4,4,4,4,5,5,5,6,7,7,7,6,5,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,5,5,5,5,4,5,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,6,6,6,5,6,5,5,5,4,4,4,4,4,3,3,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,6,6,6,6,6,6,7,7,6,7,7,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,6,6,6,7,6,7,7,7,7,8,7,7,7,6,7,7,6,6,6,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,3,4,5,6,8,8,10,11,11,11,12,14,14,16,17,18,20,20,19,18,21,21,20,23,21,23,24,22,25,24,26,25,25,24,26,25,25,26,25,25,25,23,24,26,26,24,26,25,25,25,26,24,23,25,24],[29,28,28,28,28,28,29,28,28,27,27,27,27,26,26,27,27,27,27,27,28,27,27,28,28,27,27,28,27,27,26,27,27,28,27,27,27,27,27,27,27,26,26,27,26,26,26,25,25,24,24,23,23,23,22,23,21,21,19,19,17,16,12,10,9,7,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,4,4,5,5,5,5,6,5,5,6,6,6,6,6,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,3,4,4,3,3,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,4,5,5,5,5,4,6,5,5,5,5,5,5,5,5,6,6,7,7,8,9,11,12,12,15,15,17,15,17,18,18,17,19,19,20,21,21,22,23,23,24,24,25,25,26,25,22,24,23,22,23,24,24,23,24,25,26,25,27,26,27,26,27,26,27,26,26,26,26,27,26,26,27,27,27,27,27,27,27,26,26,27,27,27,26,27,26,26,27,26,25,26,24,24,22,21,19,20,18,15,17,14,12,11,10,8,8,6,6,6,6,6,5,6,6,7,7,7,7,7,7,8,9,8,8,9,10,9,9,9,10,10,11,10,9,8,8,8,9,8,9,9,10,10,9,9,9,8,8,8,8,8,8,7,7,7,6,7,6,6,5,5,5,5,4,5,5,4,5,5,4,4,5,5,5,6,6,6,6,6,6,6,6,5,4,4,3,3,3,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,7,7,7,6,6,5,5,4,5,5,4,4,5,5,5,6,6,6,6,6,6,6,5,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,4,4,4,5,5,5,6,6,6,6,7,6,6,7,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,4,4,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,6,7,7,8,7,6,7,6,7,6,6,6,6,6,6,6,6,5,6,6,5,7,7,7,7,7,7,6,7,7,7,7,7,8,7,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,5,6,7,7,9,10,11,10,11,12,12,15,16,17,18,19,17,17,18,19,18,20,19,20,23,22,24,24,24,23,25,23,24,25,24,25,23,24,24,22,23,24,24,24,24,23,23,23,25,22,21,23,23],[28,27,27,27,27,27,28,27,27,26,26,25,25,25,25,26,25,25,26,25,26,26,25,26,26,26,25,26,26,24,26,26,26,26,26,26,25,26,26,26,25,26,25,25,25,24,24,23,23,22,22,23,21,22,20,20,19,18,17,17,14,14,11,9,8,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,4,5,6,5,6,5,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,4,5,5,5,5,5,4,5,5,5,5,5,6,6,8,7,9,11,12,11,13,14,15,14,15,16,15,15,16,17,18,18,18,20,21,20,22,23,23,23,22,23,21,22,22,21,22,21,23,22,22,22,25,24,25,24,25,25,25,25,25,24,24,25,25,25,25,25,25,26,26,25,26,25,26,25,25,25,26,25,25,26,25,25,25,24,24,24,23,23,21,21,19,18,17,15,15,13,12,10,9,8,7,7,6,6,6,6,6,6,6,6,6,7,7,7,7,8,8,7,8,8,8,8,9,10,9,10,9,8,8,7,7,7,7,8,8,8,9,9,9,9,8,8,8,7,7,8,7,7,7,7,6,6,6,5,5,5,5,4,4,5,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,5,5,4,4,3,3,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,6,6,7,7,5,5,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,5,5,6,5,6,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,6,6,6,5,5,6,5,5,5,4,4,4,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,6,7,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,5,6,7,7,9,10,10,10,10,12,13,14,17,14,19,17,16,17,18,16,17,19,18,19,21,20,22,21,23,21,23,22,23,23,23,24,22,22,23,20,21,23,23,22,23,22,21,21,23,21,20,22,22],[28,29,29,29,28,29,28,28,29,27,28,27,27,27,27,27,26,27,26,26,26,26,26,26,26,26,27,26,27,26,26,26,27,27,26,27,26,27,27,27,27,26,25,26,26,26,24,24,24,23,22,23,23,21,20,22,20,19,18,18,16,14,12,9,8,6,5,4,4,4,3,3,3,2,2,2,3,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,2,2,2,3,3,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,3,3,3,3,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,5,4,4,5,5,5,6,6,7,8,10,11,11,13,15,16,14,16,18,17,17,19,19,20,21,21,22,24,23,24,25,25,24,25,23,23,24,23,22,23,23,24,24,24,24,25,25,26,25,26,26,26,27,26,26,27,27,26,26,26,26,27,27,27,27,27,27,28,27,27,25,26,27,26,27,27,26,26,24,24,25,24,23,22,21,20,20,18,17,16,14,13,11,9,7,7,6,5,5,5,5,4,5,4,5,6,6,6,6,6,7,7,7,7,8,8,8,8,9,8,9,9,8,8,7,7,7,7,8,8,8,8,9,8,8,8,8,7,7,7,7,6,6,6,6,6,5,5,5,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,6,6,6,6,5,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,5,6,6,6,5,4,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,4,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,5,6,7,7,9,10,11,10,11,14,14,17,17,17,20,21,19,18,18,20,20,22,21,22,24,22,25,24,25,24,25,23,25,25,24,25,24,25,24,23,24,25,25,24,25,24,24,24,25,24,22,25,25],[29,29,29,29,29,29,29,29,29,28,28,27,28,27,28,27,28,28,28,28,28,27,28,28,28,28,28,28,29,28,27,28,28,29,28,28,28,28,28,28,28,28,27,27,27,27,25,25,25,25,24,24,25,23,22,23,21,21,20,21,17,15,13,10,8,7,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,4,3,4,4,4,4,5,5,4,4,3,3,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,5,4,5,5,5,5,5,6,6,7,7,8,10,11,12,14,15,16,16,16,19,17,17,20,21,20,21,22,24,24,23,25,25,26,25,25,23,24,24,23,24,24,23,25,24,24,24,26,26,28,24,26,27,27,27,27,27,27,27,27,27,27,27,27,28,27,27,28,28,28,27,27,26,27,28,26,28,27,26,28,25,26,25,25,24,24,23,22,21,18,16,16,15,13,12,10,8,7,6,6,5,5,6,5,6,5,5,6,6,7,7,7,8,8,8,8,8,9,9,9,9,9,9,10,9,9,8,7,8,8,8,9,9,9,9,9,9,9,8,8,7,7,7,7,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,5,5,5,4,4,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,7,7,7,6,5,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,5,5,5,5,5,4,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,3,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,6,7,6,6,7,6,6,6,6,6,6,6,6,6,5,5,5,5,5,6,6,6,6,6,7,6,7,7,6,6,7,7,6,6,6,7,6,6,6,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,5,6,7,7,9,10,11,10,11,14,14,16,17,18,20,21,20,18,19,20,19,22,20,22,23,22,25,24,25,25,25,24,25,24,25,25,24,24,25,21,23,24,24,23,24,22,23,24,25,22,21,24,24],[28,28,27,28,27,28,28,28,27,27,26,26,26,25,26,26,26,26,26,26,27,27,27,26,26,27,26,26,27,25,25,26,26,27,26,26,26,27,27,26,27,26,25,26,26,25,25,24,24,23,23,22,22,22,21,20,21,19,19,17,15,14,11,9,9,7,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,5,5,4,5,5,5,6,6,6,7,6,5,5,4,5,4,4,4,4,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,4,5,5,4,4,4,5,5,5,5,5,6,7,7,8,9,11,11,12,14,15,16,14,15,17,16,16,18,18,19,18,20,21,22,22,23,23,24,23,24,24,21,23,22,21,23,23,23,22,23,23,25,24,26,25,26,26,26,26,27,26,26,26,26,26,26,26,26,26,27,26,27,26,26,26,26,26,26,26,26,26,26,26,26,25,25,24,23,23,21,21,18,18,17,14,16,13,12,11,9,8,7,7,6,6,6,6,5,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,9,10,10,10,9,9,8,8,8,8,8,8,9,9,9,9,9,8,8,8,8,7,7,7,7,7,7,6,6,5,6,5,5,5,4,4,5,4,4,5,5,4,4,5,5,4,5,6,5,6,6,6,6,5,5,4,4,3,3,3,2,3,2,3,2,2,3,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,6,5,6,7,7,7,6,5,5,5,4,5,5,4,4,5,5,5,6,6,6,6,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,4,4,4,5,5,6,6,6,7,7,7,6,6,7,7,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,4,4,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,6,7,7,7,7,7,7,7,6,6,7,6,6,6,6,6,6,5,6,5,5,6,6,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,4,6,7,8,9,10,11,10,10,11,14,15,16,16,18,19,16,17,19,19,18,20,19,20,21,21,23,23,22,22,24,23,24,23,24,23,22,23,24,22,22,22,23,24,23,22,21,22,24,22,20,22,22],[27,27,27,27,27,27,27,27,27,26,25,25,26,25,25,25,25,26,26,26,27,26,26,27,26,26,26,26,26,25,26,26,26,27,26,27,26,27,27,27,27,26,25,26,26,26,25,24,24,24,22,22,23,22,20,21,21,19,19,18,16,14,13,10,9,8,7,6,6,6,5,5,4,3,3,4,4,3,4,4,4,3,4,3,4,4,4,5,4,4,4,5,4,5,5,4,4,5,4,4,4,5,5,4,5,5,5,4,5,5,6,5,5,4,4,5,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,4,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,5,5,5,5,5,5,6,6,6,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,5,4,4,4,5,5,5,5,5,6,6,5,5,5,5,6,6,6,6,7,7,8,8,9,11,12,12,14,15,16,15,16,18,16,17,19,20,20,20,20,22,23,22,24,24,26,25,25,23,24,25,23,22,23,24,24,23,23,23,27,26,26,25,26,26,27,27,27,26,26,26,26,26,26,27,27,26,27,27,27,26,27,26,27,25,27,26,26,27,27,26,26,24,25,25,25,23,22,22,21,20,18,17,17,15,13,12,11,8,8,8,7,7,6,7,6,6,6,7,7,7,7,8,8,8,9,8,8,9,9,9,9,10,9,10,9,9,8,8,8,8,8,8,9,9,9,10,9,10,9,9,9,8,7,8,8,7,7,8,7,7,6,6,6,5,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,7,7,6,6,6,5,4,4,3,3,3,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,5,4,5,4,5,5,5,6,7,7,6,6,5,4,4,4,5,4,4,5,5,5,5,5,6,6,6,7,7,6,6,6,6,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,5,4,4,4,4,4,4,4,4,4,5,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,6,7,7,6,6,6,6,5,6,5,5,4,5,5,4,4,5,4,4,4,5,4,4,5,5,4,5,5,5,5,6,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,7,6,7,6,7,8,7,8,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,7,6,7,7,6,7,7,6,7,7,7,7,7,7,7,7,7,6,7,6,6,6,5,5,6,5,5,5,5,5,4,5,4,4,4,4,3,4,4,5,7,8,8,10,11,11,11,10,13,14,16,17,17,19,18,18,18,20,19,18,20,19,20,21,20,23,23,23,22,23,23,23,24,24,26,23,24,23,22,22,23,24,24,24,22,22,22,23,22,21,22,23],[28,28,29,29,28,29,28,28,28,27,28,27,27,27,27,27,27,27,26,27,27,26,26,27,26,26,27,26,27,26,25,27,27,28,26,27,26,27,27,26,27,27,25,26,26,26,25,24,24,24,22,23,23,21,20,22,21,20,19,20,17,15,12,10,8,8,6,5,5,4,4,4,4,3,3,3,3,3,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,6,6,5,4,4,4,5,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,5,5,4,5,5,5,5,5,6,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,2,3,3,3,3,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,5,5,5,5,6,5,5,5,5,5,5,5,5,6,6,7,7,8,9,11,12,12,13,15,16,16,17,19,19,19,20,21,21,20,23,23,24,24,24,25,25,24,25,24,24,25,22,22,24,24,25,23,24,25,25,25,27,25,26,27,27,27,26,26,27,27,27,27,27,27,27,27,27,27,27,28,28,27,27,26,26,27,27,27,27,26,27,24,24,25,24,23,23,21,21,21,18,18,17,15,14,12,11,9,8,7,6,6,6,6,5,6,5,6,6,7,7,8,7,8,9,8,8,9,9,9,9,10,10,10,10,9,9,9,8,9,9,8,9,10,10,11,10,9,9,9,9,8,8,8,8,8,7,7,7,6,6,6,5,5,4,5,4,4,4,4,4,5,5,4,5,5,5,5,6,6,6,7,7,7,6,6,4,5,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,7,7,7,6,5,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,4,4,5,5,5,4,4,4,4,5,4,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,7,7,6,6,6,6,6,6,5,5,5,4,4,3,4,4,3,3,4,4,3,3,4,3,4,4,4,3,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,4,4,5,5,4,4,5,4,4,5,5,5,5,6,6,6,6,6,7,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,5,5,5,5,6,7,7,6,6,6,7,7,7,7,7,7,7,7,7,6,7,6,6,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,5,7,8,8,10,12,11,11,12,14,15,17,18,18,21,21,19,19,20,21,19,22,21,21,23,22,25,24,25,24,25,24,25,25,25,25,24,25,25,23,24,25,24,25,25,24,23,24,26,23,23,25,25],[29,28,28,29,28,28,29,28,28,28,27,28,28,27,27,27,27,28,27,28,28,27,28,28,27,28,28,27,28,27,27,28,28,28,27,28,27,27,28,27,28,27,27,27,27,27,26,25,26,25,24,25,25,23,23,24,22,22,21,21,18,16,14,12,10,10,9,8,7,7,6,6,6,5,4,5,5,4,5,6,4,4,5,5,4,5,6,6,6,6,6,6,6,5,6,6,5,6,6,6,5,6,6,6,6,7,6,6,6,7,8,6,6,6,6,6,5,5,5,5,5,5,4,5,5,4,5,5,5,4,5,6,5,5,5,6,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,4,5,5,5,6,6,6,6,6,6,6,5,5,4,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,5,5,4,5,5,6,6,7,7,7,7,7,8,8,7,8,8,7,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,2,3,3,3,3,3,4,4,4,5,4,4,4,3,4,4,4,3,2,3,2,1,1,1,1,1,0,1,2,3,4,4,3,2,2,3,3,2,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,3,3,4,5,5,4,4,6,5,5,6,5,6,5,6,6,6,6,7,7,7,7,6,8,7,7,7,7,7,8,8,8,8,8,10,9,10,11,12,14,14,16,17,18,17,19,20,19,19,21,22,21,22,24,25,25,24,26,25,27,26,27,25,24,26,24,22,25,24,25,24,24,24,27,26,27,26,26,26,27,27,28,27,27,27,26,27,27,27,27,27,27,27,28,28,28,27,28,27,27,28,28,28,27,27,27,25,25,26,25,23,23,22,21,21,19,18,18,15,14,13,12,10,10,9,9,9,9,9,9,9,9,9,10,9,10,10,10,11,12,11,10,11,12,12,11,12,13,13,13,11,11,11,10,10,11,10,11,11,13,13,11,13,12,12,11,11,10,11,11,10,10,9,9,9,9,8,8,7,6,6,6,7,6,5,6,7,6,6,7,7,6,6,7,7,8,8,8,8,7,6,5,5,4,5,3,3,3,3,3,2,3,3,3,3,4,3,4,4,4,5,5,4,5,5,6,5,5,5,6,6,6,7,7,6,7,7,8,8,9,9,9,8,7,7,6,7,7,6,6,6,6,7,7,7,8,7,8,9,9,9,7,8,8,7,7,8,7,7,7,7,6,6,6,6,6,6,6,5,4,5,4,5,4,4,5,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,6,7,7,7,7,7,7,7,8,7,7,8,7,7,7,8,8,7,7,7,7,6,6,7,6,5,5,6,6,6,6,6,7,7,8,8,8,9,10,10,8,8,9,9,8,8,7,8,7,7,7,7,6,7,6,6,6,7,6,6,6,7,6,6,7,7,6,7,7,7,7,7,7,8,7,8,8,8,8,8,8,8,7,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,8,8,7,8,9,8,8,8,9,8,9,9,9,9,10,10,9,10,10,10,10,9,9,9,10,9,9,10,8,8,9,9,9,9,9,9,10,9,9,9,10,10,9,9,9,10,9,9,9,10,8,8,8,8,8,7,6,7,7,6,6,6,6,5,5,5,5,5,5,4,4,5,6,8,9,9,11,11,12,12,11,14,16,17,17,19,20,19,19,20,21,21,18,23,20,22,23,22,24,25,25,24,24,24,25,25,24,25,25,25,25,23,24,25,25,24,25,24,23,25,26,23,23,24,23],[27,27,26,27,27,27,27,27,26,26,26,26,26,25,25,26,26,26,26,27,27,27,27,27,27,26,27,27,27,26,26,27,27,28,26,27,26,26,27,26,27,27,26,26,27,26,25,24,25,24,24,23,23,23,22,22,22,21,21,20,18,17,15,13,12,11,10,10,9,9,7,7,6,5,5,6,6,5,6,7,7,6,7,7,6,7,8,8,8,8,8,8,9,8,8,8,7,8,8,8,8,8,9,8,8,8,8,8,8,9,9,8,8,8,7,8,7,7,7,7,7,7,6,6,7,6,6,7,7,6,6,7,6,6,6,6,6,7,7,7,6,8,7,7,7,8,8,7,7,7,7,6,7,7,7,8,8,8,7,8,8,7,7,7,8,6,6,7,6,5,6,6,5,5,6,5,5,5,5,5,4,5,4,4,4,5,4,5,5,4,5,6,5,5,6,7,7,8,7,8,8,8,8,9,9,9,9,8,8,7,8,8,7,8,7,6,6,6,6,5,6,6,5,5,5,4,4,4,4,3,3,4,4,5,6,6,5,4,5,5,5,4,4,4,3,3,3,3,3,2,2,2,1,0,1,2,3,4,3,3,2,2,3,3,3,4,4,5,5,5,5,5,7,7,7,7,6,7,7,7,7,7,6,6,6,5,5,5,4,4,4,4,3,3,3,3,2,4,3,4,4,5,5,5,6,5,6,7,7,7,6,6,7,7,7,8,8,8,7,7,8,8,8,8,7,8,9,9,9,9,9,10,11,11,12,13,14,14,16,15,18,16,17,19,19,19,19,20,21,20,22,23,23,23,25,24,26,25,25,25,23,25,23,23,24,24,24,23,24,24,27,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,26,27,27,27,27,26,26,27,27,26,26,27,26,26,27,25,24,25,24,23,22,22,20,20,19,17,18,15,15,13,12,11,10,10,10,10,9,9,9,10,10,10,11,10,11,11,10,11,12,12,11,12,13,13,13,13,13,14,13,11,11,11,11,11,11,11,12,12,12,14,13,14,13,12,12,11,11,11,11,11,11,10,10,10,9,9,9,9,8,7,8,9,7,8,9,9,8,8,9,8,7,9,9,8,9,8,8,9,8,7,7,6,5,5,4,4,3,5,5,3,4,5,4,3,4,5,4,4,6,6,6,5,7,7,7,6,8,8,8,8,7,9,8,8,8,8,8,9,10,10,10,9,8,8,8,8,8,8,6,7,8,9,9,9,10,10,10,10,10,10,9,10,9,9,9,9,9,8,9,9,9,9,9,8,7,7,8,6,6,7,6,5,5,6,6,5,6,6,5,5,6,6,7,6,7,7,7,7,6,7,6,6,8,8,7,8,9,8,8,8,7,9,8,9,9,9,8,9,9,8,9,8,9,9,9,9,9,9,9,8,9,8,8,8,9,9,9,8,7,8,8,9,9,9,10,9,9,10,10,10,11,10,10,10,10,10,10,10,9,9,9,9,8,8,7,8,7,7,7,7,8,6,8,7,7,7,9,8,7,9,9,9,10,9,9,9,9,10,9,9,9,9,9,10,9,9,10,9,9,9,10,9,9,9,9,9,9,9,8,8,8,8,8,8,9,8,9,9,9,9,10,9,10,10,10,10,10,11,10,11,10,11,11,10,11,10,10,10,10,10,10,10,10,9,9,10,9,10,10,10,10,10,11,10,10,10,9,11,10,10,10,10,10,11,10,9,10,10,10,10,8,9,10,9,8,8,8,7,7,7,6,6,6,6,5,6,8,8,10,10,11,12,13,12,13,14,16,16,18,17,21,19,18,20,21,20,19,21,19,20,22,21,24,25,23,23,23,25,24,25,25,25,24,24,25,23,22,24,25,24,25,23,23,24,24,23,20,24,24],[29,29,29,29,29,29,30,29,29,29,29,28,29,28,29,28,29,29,28,29,29,28,29,29,28,29,29,29,29,29,28,29,29,29,29,29,28,29,29,29,29,29,28,28,28,28,27,27,28,26,26,27,26,26,25,26,25,24,23,22,21,19,18,16,14,14,14,13,12,12,11,10,9,9,8,10,9,8,9,10,10,9,10,11,9,10,10,10,10,10,10,10,10,11,10,10,10,10,10,10,11,10,9,9,11,10,10,10,10,11,13,11,11,10,10,11,10,9,9,9,8,10,10,9,9,10,9,8,9,7,8,8,7,8,7,8,7,8,7,8,8,8,8,9,10,10,9,11,10,10,10,11,11,11,10,12,11,10,11,12,12,11,10,10,11,9,9,11,9,9,10,10,8,9,9,7,6,7,6,6,6,6,5,5,5,5,5,5,6,5,6,7,5,7,7,9,9,11,10,10,10,10,10,11,11,13,11,10,10,10,9,10,8,9,9,7,9,10,7,7,8,7,7,7,8,6,6,6,7,6,5,8,7,8,8,8,8,8,7,8,7,7,7,6,6,4,4,4,3,3,3,2,1,1,0,1,3,4,3,3,2,3,3,3,4,6,7,8,6,7,7,7,9,10,10,10,9,8,9,9,7,10,8,9,9,7,7,7,6,5,7,6,5,4,5,5,3,4,5,7,7,7,6,6,7,7,7,7,8,8,8,8,7,9,9,9,10,10,9,10,11,11,10,11,9,11,12,12,13,13,13,13,14,14,15,16,18,17,19,19,20,20,21,23,22,22,23,24,24,24,25,27,27,26,27,28,28,27,28,27,26,27,26,26,27,26,27,27,26,27,28,27,28,28,28,28,28,28,28,28,28,29,29,28,28,29,28,29,28,28,29,28,28,28,28,28,28,28,28,29,28,28,28,27,28,27,27,26,26,26,24,24,21,22,22,19,19,17,16,15,14,13,13,12,12,13,10,12,11,12,13,13,13,14,13,14,15,14,14,14,15,16,15,16,15,16,16,14,14,14,13,14,14,14,15,14,15,15,16,16,16,15,14,15,14,14,13,14,14,13,12,13,12,11,11,11,13,9,8,10,8,10,9,10,9,8,10,9,9,10,10,10,11,11,11,11,10,8,8,7,6,6,5,4,4,5,5,4,4,6,5,5,6,7,7,6,7,7,7,7,7,9,7,7,10,10,11,11,10,11,12,10,11,10,10,11,11,12,12,11,10,11,10,10,10,10,9,10,10,11,11,11,11,12,13,14,13,13,12,12,12,12,12,12,12,12,10,11,11,10,11,10,11,10,10,11,10,9,10,9,7,8,9,7,7,8,7,7,7,8,7,7,9,9,9,7,8,9,8,8,9,9,10,9,10,10,10,10,10,10,10,11,11,10,11,12,11,10,11,11,11,12,12,12,12,12,12,12,11,11,11,12,12,11,12,12,12,11,12,12,11,12,12,11,12,12,12,13,13,13,12,12,13,12,11,13,12,12,12,12,12,12,10,10,11,10,9,11,11,9,10,10,10,10,11,11,10,10,10,12,12,11,11,11,11,11,11,11,11,12,12,11,12,11,12,12,11,11,12,12,11,11,12,12,12,12,11,10,11,11,11,11,11,11,11,11,11,12,11,12,12,12,12,12,12,12,13,12,12,13,13,12,12,13,13,12,13,13,12,13,12,13,12,13,12,12,13,13,13,13,13,12,13,12,12,13,13,14,12,13,11,13,13,11,11,11,11,11,10,11,10,9,10,9,10,8,8,9,8,8,8,6,8,7,9,10,12,11,14,14,14,15,14,17,19,18,19,20,20,22,19,22,22,22,19,24,23,22,24,25,25,26,26,25,24,25,26,26,26,27,25,25,27,26,25,24,25,26,26,25,25,25,26,26,24,26,26],[28,28,28,28,29,29,29,28,28,28,28,27,28,27,28,27,28,29,28,29,29,28,29,29,29,29,29,28,29,29,28,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,28,27,29,27,26,26,27,26,26,27,26,25,25,25,23,21,20,19,18,18,17,15,16,14,15,14,13,12,12,13,13,12,13,13,12,12,13,12,11,12,14,14,14,13,14,13,12,14,13,13,12,13,13,12,12,14,13,11,13,13,13,11,15,15,16,16,15,15,15,16,15,15,12,12,13,12,9,10,11,11,9,10,11,9,9,9,10,8,10,9,10,9,10,10,10,9,10,10,11,10,10,11,11,12,11,12,12,13,13,15,15,16,16,16,16,15,15,16,14,14,14,14,11,11,12,11,11,12,13,10,9,9,11,9,11,8,7,8,11,7,5,9,10,7,8,10,9,9,10,11,11,10,12,13,14,12,14,15,15,16,14,15,13,13,13,12,12,11,11,12,11,12,11,11,10,10,9,11,11,10,10,11,11,10,9,12,11,10,12,13,12,11,10,10,12,11,10,11,9,10,8,9,8,7,4,4,4,3,1,0,2,4,4,4,3,6,7,6,7,9,8,8,9,10,10,11,12,11,12,13,12,11,12,11,12,12,11,10,11,10,10,10,9,10,10,10,9,9,10,9,7,8,10,12,10,11,11,9,11,11,9,11,12,11,11,12,12,12,11,14,13,15,14,14,15,15,14,13,14,16,16,14,16,16,16,18,15,16,18,18,20,19,20,21,23,22,23,24,24,24,25,26,26,27,27,27,28,27,28,28,28,28,28,28,27,28,27,27,28,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,30,29,29,30,30,30,29,29,29,29,29,29,30,29,29,29,28,28,28,28,27,27,26,24,25,23,23,23,21,21,20,19,18,18,17,16,15,16,16,14,16,15,16,16,17,18,17,15,17,18,17,16,17,19,17,18,19,19,19,18,16,17,15,15,17,16,16,17,18,19,19,19,19,19,18,17,18,17,17,18,18,16,16,16,16,16,15,14,15,14,13,12,13,13,12,12,13,13,12,13,13,13,13,14,13,13,14,13,13,13,12,12,11,8,8,8,7,6,8,6,5,6,7,6,6,7,8,8,8,9,11,10,9,10,12,11,11,14,14,14,14,14,14,14,14,13,14,14,15,15,15,15,16,15,15,14,15,15,13,13,14,15,15,18,16,16,17,18,19,19,19,17,16,18,17,16,17,16,16,16,14,15,14,14,13,13,13,13,13,11,12,11,11,9,10,10,11,9,10,9,10,8,10,11,7,10,11,11,8,10,11,10,9,12,12,12,12,12,13,12,13,14,14,15,14,15,14,15,15,14,14,17,16,14,16,17,15,14,16,16,16,14,15,16,15,17,15,15,14,16,15,16,16,17,17,17,16,17,18,17,18,18,17,17,15,18,17,15,17,17,16,17,15,16,16,14,13,13,15,13,14,14,13,13,13,13,14,14,13,13,14,14,13,14,14,15,14,14,15,16,15,14,16,15,15,15,14,17,16,15,14,17,17,14,15,16,14,17,14,15,14,13,16,14,14,15,16,14,14,16,16,15,16,16,16,17,16,16,16,16,16,17,16,16,17,16,18,17,17,16,17,16,17,16,15,15,15,16,15,16,16,15,16,16,16,16,17,15,17,16,17,16,17,14,16,16,15,15,15,15,14,14,14,14,13,13,12,12,12,12,12,10,12,12,8,8,11,11,12,13,14,15,16,15,17,16,18,20,20,21,21,24,21,21,22,24,23,22,24,23,24,26,23,26,26,26,25,25,25,26,27,27,27,26,27,28,25,25,27,27,26,27,26,26,27,27,25,24,26,26],[28,28,28,28,29,28,29,28,28,27,28,27,28,27,28,27,29,29,27,29,29,28,28,29,28,29,29,28,29,29,28,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,28,28,29,28,26,27,27,27,26,27,26,25,25,25,23,21,20,20,19,19,18,16,16,15,15,15,13,12,14,14,13,12,14,13,14,13,14,13,10,13,15,14,15,13,14,14,12,14,14,14,12,15,15,11,13,15,15,11,14,15,15,12,14,16,16,16,15,16,15,15,14,14,13,13,14,12,11,12,12,10,9,11,10,9,9,10,8,9,11,10,10,9,11,10,9,9,11,11,11,10,10,11,11,13,11,11,13,13,13,15,15,15,15,16,15,15,14,14,15,14,14,14,13,11,12,12,11,10,11,10,10,10,9,9,11,8,7,8,9,5,6,9,5,5,10,10,11,10,9,12,11,11,12,13,13,13,13,15,15,16,15,13,13,12,12,11,12,10,12,11,11,11,9,11,12,11,10,9,12,12,10,12,11,10,10,11,11,11,12,12,11,12,12,11,12,10,11,9,10,10,9,8,8,7,6,6,5,4,3,2,0,1,2,3,4,5,7,7,6,9,9,10,10,10,11,11,12,13,14,12,13,11,11,11,9,11,11,11,11,9,9,10,9,8,10,11,9,8,9,9,7,8,10,11,12,11,11,11,12,12,12,12,12,12,12,14,13,13,13,15,15,16,14,14,16,16,15,15,14,16,18,16,16,18,18,18,20,19,19,20,22,20,21,23,24,23,23,25,24,25,26,27,27,27,27,27,28,28,28,28,29,28,29,29,28,29,28,27,28,27,28,28,27,28,29,28,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,28,29,28,28,27,26,26,25,26,24,23,23,21,21,21,19,18,19,19,18,20,19,20,17,19,17,17,18,19,20,20,18,19,20,19,18,19,21,19,20,21,20,21,20,18,17,16,17,17,19,19,19,20,20,21,21,22,21,21,20,20,19,19,20,19,19,20,18,18,19,17,17,17,15,15,14,16,15,14,16,16,14,15,16,15,16,15,15,16,16,15,14,15,14,13,15,12,11,11,8,7,7,8,9,7,7,8,8,7,8,8,8,10,11,11,12,10,13,13,12,12,14,13,14,13,15,14,14,15,14,16,15,15,16,16,17,17,15,14,15,14,13,12,11,14,14,15,16,17,17,17,18,19,19,19,18,18,18,17,15,18,17,16,15,15,14,15,15,14,13,13,14,13,12,13,12,12,11,12,12,11,10,12,10,11,10,12,12,11,12,14,14,11,13,14,12,13,14,15,13,13,15,15,12,14,14,16,15,14,15,15,15,14,15,16,17,17,16,18,18,16,16,18,17,17,15,15,17,16,17,15,15,15,15,15,16,16,15,16,17,16,17,18,17,18,19,18,18,16,18,17,16,16,18,16,17,17,15,15,14,14,14,14,13,15,15,13,14,15,13,14,15,15,13,15,17,15,17,16,17,16,15,18,18,16,17,19,18,17,17,16,20,19,17,16,19,18,15,19,18,16,18,17,17,14,14,19,16,14,17,19,16,16,19,17,17,18,19,18,19,18,19,19,19,21,19,19,19,19,18,20,20,20,18,20,20,20,18,18,18,17,19,18,18,18,17,17,19,18,18,20,18,19,18,19,18,18,17,20,17,16,16,17,16,16,15,16,15,15,15,15,13,13,16,14,12,13,13,11,8,11,10,12,14,14,16,16,17,17,16,19,20,20,21,21,24,22,21,23,24,21,22,24,23,23,26,23,26,26,26,26,26,26,27,27,27,28,27,28,28,26,26,27,28,26,27,26,26,27,27,25,24,25,26],[29,29,28,28,29,28,29,29,28,28,28,28,28,27,28,28,28,29,27,29,29,28,28,29,28,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,29,29,28,28,29,28,28,27,28,27,27,27,27,27,25,27,26,25,23,24,23,21,20,19,19,18,18,17,16,16,15,15,14,15,14,14,13,13,14,14,16,14,14,14,12,13,14,14,14,13,14,14,13,14,14,13,12,12,13,12,12,13,14,11,13,14,13,12,13,15,17,15,14,15,14,15,14,13,13,12,12,12,12,11,11,12,11,10,11,8,10,10,9,11,11,11,10,8,10,10,9,9,11,10,9,11,11,9,11,12,11,10,13,13,13,14,15,14,16,17,16,14,14,14,15,14,13,14,13,13,12,13,11,12,12,10,9,11,9,9,8,9,6,7,8,5,6,7,8,5,8,8,9,8,8,11,11,10,10,11,12,11,11,14,15,16,14,11,12,12,13,11,10,10,10,9,9,9,8,9,10,11,8,10,10,10,9,11,10,10,11,11,12,12,12,13,12,11,11,10,10,10,11,10,9,11,9,7,7,7,6,5,6,4,3,2,1,0,1,3,4,5,7,6,5,8,9,10,9,8,10,9,11,11,12,11,11,10,9,10,11,9,9,11,10,9,10,10,9,8,10,9,9,9,9,9,9,9,12,12,13,12,14,13,14,13,13,14,14,14,14,15,15,14,14,16,17,17,16,15,16,16,16,15,14,16,18,16,17,18,18,17,17,18,19,20,21,21,21,22,22,22,24,24,23,25,25,25,26,26,26,27,27,26,27,27,28,28,28,28,27,27,27,27,27,27,28,28,27,28,29,28,29,29,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,28,28,29,28,28,28,27,27,26,27,25,25,24,22,23,21,21,22,20,19,19,18,17,19,18,18,17,19,16,18,18,18,19,19,19,19,20,19,19,18,20,21,21,22,20,21,20,19,19,18,18,18,18,18,19,20,19,21,21,21,21,21,19,20,19,18,19,19,19,20,18,18,18,17,17,18,16,17,14,16,17,15,16,16,15,14,16,15,14,16,16,15,14,16,15,15,14,12,12,11,9,10,9,8,8,9,9,6,7,8,8,6,8,8,8,10,9,10,11,11,11,11,10,10,13,11,11,14,14,13,14,14,13,15,14,15,15,16,16,15,13,11,14,13,13,11,11,13,14,14,15,15,15,15,18,18,18,17,16,16,17,15,16,16,16,16,15,15,15,14,15,14,14,13,14,15,11,11,14,12,10,12,15,11,9,13,13,10,10,14,13,10,13,15,13,10,15,14,12,11,14,15,11,13,14,14,12,15,15,16,16,14,16,15,16,16,16,17,17,17,15,17,18,15,16,17,17,16,15,15,16,15,17,15,15,16,15,15,16,15,14,16,16,15,16,17,16,16,18,16,16,15,16,16,15,16,17,16,17,17,16,17,15,15,16,16,15,16,16,14,15,16,16,16,15,16,16,15,16,16,17,17,18,17,16,18,18,17,16,18,17,17,18,15,19,18,16,16,20,18,16,18,19,17,18,16,17,14,15,19,17,14,17,19,17,16,19,19,17,17,19,19,18,17,19,19,18,18,19,18,19,19,18,19,19,19,18,19,19,20,19,18,18,18,19,18,18,19,17,18,18,18,18,18,18,18,18,19,17,19,16,19,18,16,18,17,17,16,18,17,17,14,15,15,13,12,13,13,10,12,13,9,10,11,11,12,13,13,17,16,18,18,17,18,20,20,23,22,25,24,21,22,25,24,22,25,22,23,26,25,26,27,27,26,27,27,27,27,27,28,27,27,28,26,26,28,28,27,28,27,27,27,27,25,24,26,26],[29,28,28,28,28,28,29,28,28,28,27,28,28,27,27,27,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,29,29,28,28,28,29,28,28,28,28,28,28,27,27,27,27,27,27,27,25,26,26,25,23,23,22,21,19,17,17,16,15,16,15,14,14,13,13,11,10,13,12,13,12,13,13,13,14,14,11,14,13,13,14,14,13,12,14,15,13,13,13,13,13,12,15,14,13,11,15,14,13,13,14,16,16,16,14,16,15,15,14,14,15,13,13,15,12,11,12,13,11,11,13,10,10,11,9,8,10,9,9,9,9,10,10,11,11,11,11,12,12,12,12,13,15,12,15,15,14,14,15,15,16,16,16,14,14,14,16,14,13,16,15,14,14,15,11,12,14,12,9,11,12,9,8,7,8,7,7,7,5,6,7,6,7,8,7,7,8,8,10,10,8,10,10,11,11,11,12,13,12,12,11,12,11,11,11,12,9,9,11,11,10,9,10,11,7,9,11,10,7,9,10,9,8,11,10,11,12,13,11,11,10,9,11,10,10,9,8,8,8,6,6,7,6,5,5,4,3,3,2,1,0,1,3,4,6,5,5,5,6,7,6,7,8,8,10,9,9,10,9,9,11,11,9,11,10,10,10,8,8,10,8,6,8,9,7,6,8,7,7,7,9,9,10,11,11,9,11,11,10,12,11,10,10,11,12,11,11,14,14,14,13,13,13,14,13,12,11,14,15,13,15,16,14,16,15,15,17,18,19,18,19,20,20,21,21,23,22,24,24,25,25,25,25,26,27,26,27,28,27,28,28,28,27,27,27,26,27,26,28,27,28,27,28,28,29,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,28,29,29,29,28,28,29,28,28,28,28,26,26,26,24,24,23,22,23,21,19,20,18,18,17,15,15,16,16,15,13,15,12,15,14,14,17,16,15,17,19,17,17,17,19,18,19,20,19,19,19,17,17,15,15,16,16,17,17,17,18,20,19,20,19,18,18,18,17,16,17,18,16,16,17,16,15,15,13,14,12,12,10,12,12,11,11,12,10,10,11,12,10,11,13,12,11,13,13,13,12,12,11,9,8,8,8,6,7,6,7,5,5,7,7,5,5,8,7,7,7,8,8,7,8,9,8,7,10,11,11,11,12,12,11,11,12,11,11,13,13,14,13,12,11,11,12,11,12,12,11,13,13,14,13,14,13,14,16,16,14,15,15,14,15,15,14,14,15,14,13,12,13,13,13,13,13,11,12,13,9,9,10,9,8,9,10,10,7,9,9,9,8,9,10,9,10,10,10,9,10,10,9,9,9,10,10,9,11,11,10,12,10,12,12,12,13,13,13,13,13,12,13,14,13,14,15,14,14,16,15,16,14,13,15,14,15,15,14,16,15,15,16,15,15,15,15,15,14,15,15,15,15,15,15,15,15,14,14,14,15,15,15,15,15,15,12,13,14,13,11,13,13,11,12,13,12,10,13,12,11,10,12,14,14,13,13,14,12,13,13,13,14,14,14,13,15,12,15,13,13,13,17,15,13,15,15,14,15,14,14,12,14,16,14,11,13,16,13,13,15,16,13,14,16,15,15,15,15,16,16,16,16,17,16,15,16,17,16,16,15,16,16,16,16,16,15,14,15,14,16,16,14,15,16,15,16,14,15,16,15,17,14,16,13,16,15,13,14,14,13,12,13,12,11,10,10,10,10,10,9,9,9,9,9,8,9,7,10,11,12,13,16,15,15,18,16,19,21,21,23,22,25,24,20,22,25,23,22,25,23,23,27,25,26,27,27,27,27,27,27,28,27,27,27,27,28,25,26,26,28,27,27,26,26,27,27,25,25,26,27],[28,28,28,28,28,28,28,28,27,27,27,25,28,26,27,26,28,28,27,28,28,27,28,28,28,28,28,28,28,28,27,28,28,28,28,29,28,28,28,27,28,28,27,27,27,27,26,26,26,25,23,24,25,23,22,24,23,21,21,21,19,17,15,13,12,11,10,9,9,9,8,8,7,7,6,7,6,6,7,7,6,7,7,7,6,8,8,8,8,8,8,9,8,9,9,9,8,9,9,9,9,9,9,9,9,10,9,9,9,10,11,10,9,9,9,10,9,9,9,9,9,8,7,8,8,7,7,8,8,7,7,8,7,8,7,8,7,8,7,8,7,8,8,8,8,8,8,7,8,8,8,7,8,8,9,9,9,9,9,10,9,8,8,9,9,8,7,9,7,7,7,7,6,6,8,6,5,6,6,6,6,5,5,5,5,5,5,5,5,5,6,6,5,5,6,6,8,7,7,8,8,8,8,9,9,10,9,8,8,8,8,8,7,7,7,6,6,7,6,5,5,6,5,4,5,5,4,5,5,4,5,6,7,6,7,8,7,7,7,7,6,6,6,5,5,5,4,4,3,4,3,2,3,3,2,3,3,3,1,0,1,1,2,2,3,3,3,4,4,5,4,5,5,5,5,6,5,5,6,6,6,5,5,5,5,4,5,5,4,4,4,4,3,4,4,4,3,4,5,5,5,6,6,6,7,7,7,8,7,7,7,8,8,8,8,9,9,9,9,9,10,9,9,9,8,9,9,9,9,10,10,11,11,11,13,13,15,14,15,16,17,17,18,20,20,19,22,22,23,23,24,25,26,25,26,26,27,26,26,26,25,26,24,24,24,24,25,25,25,25,27,27,28,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,27,28,28,28,28,27,27,27,28,27,27,28,27,27,28,26,27,26,26,24,24,23,22,22,20,19,19,17,16,14,14,12,12,10,10,10,10,10,10,10,10,11,11,10,11,11,11,11,13,12,11,12,14,13,13,14,14,14,13,12,13,11,12,12,12,12,13,13,14,14,13,15,14,13,13,13,12,11,12,12,11,11,10,11,10,10,10,10,8,9,7,8,9,9,8,9,9,8,8,9,8,9,9,9,10,10,10,10,9,9,8,7,7,6,6,5,4,5,6,4,3,4,5,4,4,5,4,4,5,6,6,4,6,6,5,6,6,6,6,7,7,7,8,7,7,8,8,9,9,10,9,9,8,7,7,7,8,7,6,8,9,9,10,9,9,10,11,11,10,11,10,10,9,9,10,9,8,9,9,7,8,8,8,7,7,6,7,6,5,5,6,5,4,6,5,5,6,7,6,6,6,6,7,6,8,7,8,7,6,6,6,6,6,7,6,7,7,7,7,7,7,8,8,7,8,8,9,8,8,8,9,9,8,9,9,9,8,9,9,9,8,8,9,9,9,9,9,9,8,9,9,10,9,10,10,9,10,11,10,11,11,11,10,10,11,10,10,10,10,10,9,9,8,9,7,7,7,8,7,7,7,6,7,7,7,7,8,7,7,7,8,9,9,9,9,9,8,9,10,8,9,9,10,9,9,10,10,9,8,9,9,9,9,9,10,9,10,8,9,8,7,9,8,9,8,9,9,9,9,10,9,9,10,10,11,9,10,11,11,10,10,10,11,9,11,11,9,10,10,10,10,11,10,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,12,10,10,10,11,9,9,10,9,9,8,8,9,8,7,8,8,7,7,7,8,6,7,8,6,6,6,8,9,10,11,12,12,13,13,13,15,17,17,20,20,22,21,19,20,23,22,19,22,20,21,24,23,24,25,25,25,25,25,26,26,26,26,26,25,26,25,26,25,25,26,26,25,24,26,26,24,23,26,26],[28,28,28,28,28,28,28,28,28,27,27,27,27,26,27,27,27,28,27,27,27,27,28,28,27,27,28,27,28,27,26,28,28,28,27,28,27,28,28,27,28,27,27,27,27,27,25,25,25,24,23,23,24,23,22,23,22,21,21,20,18,16,14,11,9,9,7,6,6,6,5,5,5,4,4,4,5,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,7,6,5,5,5,6,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,4,4,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,3,4,5,5,5,4,5,5,5,5,5,5,6,5,5,5,4,4,4,3,3,3,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,4,5,5,5,5,4,5,4,4,4,4,4,3,3,3,3,2,3,2,2,3,2,2,3,3,2,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,4,4,4,4,4,4,5,5,4,5,5,5,4,5,6,5,5,6,6,7,6,6,7,6,6,6,6,7,7,7,7,7,8,8,8,8,10,11,13,13,14,16,17,16,17,20,18,18,21,21,21,22,23,25,24,23,26,25,26,25,26,24,24,25,23,23,24,23,25,24,24,25,26,25,27,26,27,27,27,26,27,27,27,27,27,27,27,28,27,28,27,27,28,27,27,27,27,27,27,28,26,28,27,26,27,25,26,25,25,24,24,23,21,22,18,18,18,16,15,13,11,10,9,8,7,7,7,7,6,7,7,7,7,7,8,8,8,8,10,9,9,9,10,10,10,11,11,11,12,10,11,9,9,9,9,9,10,10,12,11,10,12,11,10,9,9,9,9,9,8,8,8,7,7,7,7,7,6,6,6,5,6,5,5,5,6,5,5,5,6,5,5,6,6,7,7,7,7,7,6,5,5,4,4,3,3,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,2,3,4,3,3,4,4,3,4,4,4,4,4,5,5,5,6,7,7,7,6,5,5,4,4,4,4,4,4,5,5,5,6,6,6,7,8,7,7,6,6,6,5,5,5,5,4,5,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,4,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,6,5,5,6,6,6,5,6,5,5,5,5,5,5,5,5,4,4,4,5,5,5,5,6,6,6,7,7,6,8,8,8,7,6,7,7,7,7,6,7,6,6,5,5,4,5,5,5,4,5,5,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,7,6,5,6,6,6,6,6,6,6,6,6,6,5,5,6,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,7,8,8,7,7,7,7,7,7,7,6,6,7,7,7,7,7,7,7,7,7,8,8,8,7,8,8,7,8,7,7,7,6,6,6,6,5,5,5,5,4,4,5,5,4,4,4,3,4,4,3,3,4,6,7,8,9,10,11,10,11,12,14,15,17,18,18,21,20,19,19,21,21,18,22,19,21,22,21,23,23,24,23,24,23,24,24,24,24,23,23,25,22,23,24,23,23,25,24,22,24,24,23,22,24,24],[28,28,28,28,28,28,28,27,28,27,27,26,26,26,26,25,26,26,26,26,26,26,26,26,26,25,26,26,26,25,25,26,26,27,25,26,25,26,26,25,26,25,25,25,25,24,23,22,23,22,22,22,22,20,19,21,19,18,17,17,15,13,11,8,7,6,5,4,4,4,3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,2,2,3,3,2,2,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,7,10,10,10,12,13,14,12,14,16,16,16,18,18,18,19,19,20,22,20,22,21,23,22,23,22,21,23,22,21,22,22,23,23,22,22,25,24,26,24,25,25,25,25,25,25,25,25,25,25,26,26,25,26,26,25,26,25,26,25,26,26,26,26,25,25,25,25,26,24,23,24,23,22,22,20,19,19,17,16,16,14,12,11,9,7,6,6,5,5,5,5,4,5,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,8,8,7,7,6,6,6,6,7,7,8,8,8,8,8,8,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,5,5,5,5,5,4,4,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,4,4,4,3,3,3,2,2,3,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,4,3,3,4,4,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,4,4,4,4,4,5,5,5,5,5,5,4,5,5,4,4,5,4,4,5,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4,6,7,7,9,10,10,11,11,13,14,17,18,17,20,19,19,19,20,20,18,21,20,21,22,21,24,24,24,23,24,23,24,24,24,25,24,23,25,24,23,24,24,25,23,24,23,23,25,23,22,24,25],[28,28,28,28,28,28,28,28,28,27,27,26,27,25,26,25,26,27,26,26,26,26,26,26,25,26,26,26,26,26,25,26,26,27,25,26,25,26,26,25,26,26,25,26,25,25,24,22,24,22,22,22,22,20,19,20,19,18,18,18,15,14,11,8,7,6,5,4,4,3,3,3,3,2,2,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,3,3,4,3,4,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,3,3,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,1,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,4,4,4,4,4,5,5,5,6,6,7,9,10,10,12,13,15,14,15,16,17,15,17,18,18,18,19,21,21,21,22,22,23,23,23,22,21,23,20,22,22,21,24,22,23,23,24,25,26,24,25,26,26,26,26,26,26,26,26,26,26,26,26,26,25,25,26,26,26,26,26,24,25,26,25,25,25,24,26,24,23,24,23,23,22,21,21,20,18,17,16,15,12,11,8,7,7,5,5,5,5,5,4,5,4,5,5,5,5,5,6,6,7,6,6,7,7,7,8,8,8,8,8,8,8,7,7,7,7,7,7,7,8,8,7,8,8,7,7,7,7,6,6,6,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,5,5,5,5,5,5,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,4,5,5,5,4,3,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,4,5,5,5,4,4,5,5,5,5,4,4,4,3,3,3,2,3,3,3,2,2,2,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,4,4,3,3,4,4,3,4,4,3,4,3,4,3,3,3,3,3,3,4,3,3,4,4,3,3,4,4,4,4,5,5,6,5,5,5,5,5,5,5,4,4,5,4,4,5,4,4,4,4,4,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,3,4,6,7,7,9,9,10,11,11,15,14,17,18,19,20,20,18,18,20,20,19,22,20,22,22,21,24,23,23,22,23,22,24,23,22,24,24,23,23,23,24,24,23,23,23,23,22,24,24,22,23,24,24],[29,28,28,28,29,28,28,28,27,27,27,25,27,25,26,26,27,27,26,26,27,26,26,27,26,27,27,27,27,26,26,27,27,27,26,27,26,26,26,26,26,26,25,26,25,25,24,23,24,23,21,21,21,20,18,20,19,18,17,17,14,13,10,8,7,6,4,4,4,4,3,3,2,2,2,2,3,2,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,3,4,3,2,2,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,4,4,4,4,4,4,5,6,6,7,9,9,9,12,13,14,12,13,15,15,15,16,17,17,18,18,21,21,20,22,22,23,23,23,22,21,23,21,22,22,22,24,22,23,22,25,25,27,25,25,25,26,26,26,26,26,26,26,26,26,27,26,26,26,26,26,27,26,26,26,25,25,26,27,26,25,25,27,24,24,24,24,22,22,21,20,20,18,17,17,15,12,10,8,7,6,5,5,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,8,7,7,6,6,6,6,6,7,7,7,7,7,7,7,7,6,5,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,5,5,5,5,4,5,5,5,4,4,4,4,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,4,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,2,2,3,4,6,6,7,8,9,9,10,10,13,14,16,16,17,19,21,18,18,19,21,18,23,18,22,21,22,24,23,23,22,23,22,24,23,23,24,22,23,23,22,23,22,22,23,22,24,22,23,24,23,22,23,24],[28,28,27,27,27,27,27,27,27,26,26,24,25,24,25,25,25,26,25,26,26,25,26,26,26,26,26,26,26,25,25,26,26,27,25,26,26,26,26,25,26,25,24,25,24,24,23,22,23,22,21,20,21,20,18,19,18,17,17,16,13,12,10,7,6,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,1,2,2,3,3,3,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,3,4,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,4,3,4,4,3,3,3,4,4,3,4,4,4,5,5,6,8,9,10,10,12,12,13,11,13,14,14,14,15,16,16,16,16,19,20,19,20,21,22,22,22,22,21,22,20,21,22,21,22,21,21,21,25,24,26,24,24,24,25,24,24,25,25,25,25,25,24,25,25,26,25,25,26,25,25,25,25,25,25,25,25,24,25,24,25,24,24,24,24,22,21,21,19,19,17,16,15,14,11,11,8,6,6,5,5,4,5,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,7,7,7,6,7,6,6,6,5,6,6,6,7,6,7,7,7,7,6,7,6,6,6,6,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,1,1,2,2,1,1,2,2,1,2,2,2,2,2,3,3,3,3,4,5,5,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,2,2,2,3,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,5,5,5,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,4,5,6,6,8,8,9,10,10,14,13,17,17,17,19,19,19,17,18,19,18,21,19,19,21,21,22,23,23,22,23,22,24,22,22,24,23,22,23,22,22,22,21,22,22,23,21,22,23,22,21,23,23],[28,27,28,28,27,28,27,27,27,26,26,25,25,25,25,24,25,26,25,25,26,25,25,25,25,26,25,26,26,25,24,25,25,26,25,25,25,26,25,25,26,25,24,25,24,24,22,22,22,22,20,20,20,18,18,19,18,16,17,16,13,11,9,7,6,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,2,3,3,2,2,3,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,3,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,4,4,5,5,5,6,8,8,9,10,12,13,11,13,15,14,14,16,17,17,17,18,19,20,20,20,21,22,23,23,22,21,24,21,21,22,22,22,22,23,22,25,23,26,24,25,25,25,25,24,25,25,25,25,25,25,26,26,26,25,25,26,25,26,26,25,25,25,25,25,25,25,25,25,23,23,23,23,22,21,19,19,18,16,15,15,13,11,9,7,6,5,5,4,3,4,4,3,4,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,6,6,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,3,4,5,5,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,4,4,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,3,2,2,3,3,2,3,2,3,3,2,3,3,3,2,3,3,3,3,2,3,2,2,2,2,2,2,3,2,2,3,3,3,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,6,8,9,10,10,10,13,14,16,18,18,19,20,18,18,19,19,18,21,21,21,22,21,24,24,23,23,23,24,24,23,23,24,23,23,25,24,23,24,23,24,22,23,23,22,24,24,22,24,24],[29,28,28,29,28,28,28,28,28,27,27,26,27,26,26,25,26,27,25,25,26,25,26,26,25,26,26,26,27,26,25,26,26,26,25,26,25,25,25,25,25,25,24,24,24,24,22,21,22,21,20,20,20,19,17,19,17,16,15,15,13,11,9,6,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,2,2,3,3,3,2,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,3,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,4,4,4,4,4,6,7,8,9,11,12,13,11,12,14,14,13,15,16,16,16,16,19,20,18,20,20,21,21,22,21,21,22,20,20,21,21,22,21,21,22,24,23,26,23,24,24,24,25,24,25,25,25,25,25,24,24,24,25,25,25,26,25,26,25,25,24,25,25,24,25,25,23,25,22,22,23,23,23,22,19,20,19,17,15,15,13,11,9,8,6,5,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,6,6,5,5,5,5,5,6,5,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,3,4,5,5,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,3,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,4,4,3,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,3,2,2,3,3,2,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,6,8,9,9,10,10,13,13,16,16,17,20,21,18,18,18,20,18,21,19,22,21,21,24,24,23,22,23,22,24,23,22,24,23,23,24,21,22,24,21,23,22,24,22,23,24,22,22,23,23],[28,27,27,27,27,27,27,27,26,26,25,24,26,25,25,25,25,26,24,26,26,24,25,26,25,26,25,26,26,25,25,26,26,27,25,26,25,26,26,26,26,25,24,25,25,24,23,21,22,21,20,19,20,18,17,18,18,15,16,15,13,11,9,7,6,6,4,4,4,3,3,3,3,2,2,2,3,3,3,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,4,3,4,4,4,3,3,4,4,4,4,4,4,5,5,5,6,9,9,9,11,11,12,11,11,13,13,13,14,14,15,15,16,18,19,18,20,21,21,20,22,21,20,21,20,19,20,21,22,20,20,21,23,22,24,23,24,24,24,24,25,24,24,25,24,24,24,24,24,24,25,25,25,26,25,25,25,24,24,24,24,25,24,25,25,23,23,23,22,21,21,19,19,18,16,15,15,12,11,10,8,7,6,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,6,6,5,6,6,6,6,6,7,7,6,7,7,6,6,5,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,3,4,5,5,6,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,5,4,4,4,4,4,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,4,5,7,7,9,9,10,10,10,14,14,16,16,15,17,18,17,17,18,20,17,20,18,20,20,20,22,25,21,21,23,22,22,22,22,23,20,20,23,21,21,20,21,23,22,22,21,22,24,22,20,23,23],[28,28,28,28,28,28,27,27,27,27,26,25,26,24,25,24,25,26,25,26,26,25,26,26,25,26,26,26,26,25,25,26,27,27,26,27,26,26,26,26,26,25,26,26,25,24,24,23,23,22,21,21,21,19,17,19,18,17,16,15,13,12,9,7,6,5,4,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,3,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,4,4,3,3,3,4,4,3,4,4,4,5,5,5,7,8,9,9,11,12,13,11,13,14,14,14,16,17,17,17,18,20,20,20,22,21,23,23,23,23,21,23,22,21,22,22,22,22,22,21,25,24,26,24,25,25,25,26,25,25,25,25,25,25,26,26,26,26,26,26,27,25,26,25,26,25,25,25,26,25,26,26,26,24,24,24,24,23,22,21,20,20,18,17,16,15,11,10,8,6,6,5,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,6,6,6,7,7,7,7,7,6,6,6,5,5,5,6,6,6,7,7,6,7,6,7,6,5,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,4,4,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,3,5,5,5,4,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,3,2,2,2,2,2,3,3,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,3,4,4,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,4,5,6,6,8,9,9,10,11,13,14,15,17,17,19,20,19,17,18,19,19,21,20,21,22,21,24,25,24,23,23,23,25,23,24,25,24,23,25,23,24,24,24,25,23,24,23,23,24,24,22,24,25],[29,28,28,28,28,28,28,28,27,27,27,26,27,25,26,25,26,27,25,26,26,24,26,26,25,26,26,25,26,26,24,26,26,26,26,26,26,26,26,26,26,26,26,25,25,24,23,22,23,22,21,20,20,19,18,18,17,16,16,16,13,11,9,7,6,5,4,4,4,3,3,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,2,2,3,3,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,6,8,9,9,11,13,12,11,12,13,14,13,15,16,15,16,17,18,20,19,20,21,22,22,22,21,21,22,20,21,21,21,22,21,22,22,24,23,26,23,24,24,25,25,24,25,25,25,25,25,24,25,25,25,25,25,26,25,26,25,25,24,24,25,24,24,25,24,25,22,22,23,23,22,21,19,19,19,17,15,15,14,11,10,8,7,6,5,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,7,7,6,6,6,6,6,7,6,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,4,5,5,5,4,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,2,2,3,2,3,2,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,5,5,4,4,5,4,4,4,4,3,4,4,4,3,4,4,4,3,4,4,4,4,5,4,4,4,4,5,5,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,4,5,7,6,8,9,10,11,11,14,15,17,17,18,20,21,19,18,20,20,20,22,20,23,22,22,25,24,24,24,24,23,26,24,24,26,24,24,25,23,25,25,24,25,25,24,23,25,25,24,23,26,25],[28,28,28,28,28,27,28,28,26,26,26,24,27,24,26,24,26,27,24,27,26,25,27,26,25,27,27,26,27,26,25,26,27,27,26,27,26,27,26,26,26,26,26,25,25,24,23,21,22,21,20,20,20,19,17,18,17,16,15,15,13,11,9,7,6,6,5,4,4,4,3,3,3,2,3,3,3,3,3,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,1,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,5,4,4,5,5,5,6,6,8,8,9,9,11,11,12,11,12,13,13,13,14,15,15,15,16,17,19,18,20,21,22,21,22,21,20,22,20,20,21,21,22,21,22,22,25,24,26,24,25,25,25,25,26,25,25,25,25,25,25,25,25,26,25,26,26,26,26,25,26,25,26,26,25,25,25,24,26,24,24,24,24,24,22,21,20,20,19,17,16,15,11,11,8,7,6,5,5,5,5,5,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,8,8,7,7,7,7,7,6,7,7,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,4,4,4,3,4,4,3,4,4,4,4,4,5,5,5,6,5,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,1,2,2,2,2,2,3,3,3,4,6,6,6,4,3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,4,4,5,4,4,5,5,4,4,4,4,4,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,4,5,5,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,7,7,9,9,10,10,10,13,14,16,14,16,18,19,17,18,18,20,18,23,19,20,21,19,23,24,21,22,24,22,24,24,23,23,22,22,26,22,22,22,22,24,23,24,22,23,25,24,23,24,24],[27,27,27,27,27,27,27,27,26,26,25,24,26,24,25,24,25,26,24,25,25,23,25,24,24,25,25,25,26,24,24,24,25,26,25,25,25,25,25,25,25,25,23,24,24,23,22,20,22,21,19,19,19,17,15,17,17,15,16,15,12,11,9,7,6,6,5,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,1,2,2,3,3,2,2,3,3,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,4,4,4,5,5,4,4,5,5,5,6,6,8,8,9,9,10,11,12,11,12,13,13,13,14,15,16,15,15,18,18,18,19,20,21,20,21,21,19,21,21,19,21,21,22,20,21,21,24,22,25,23,23,24,24,25,25,25,25,25,25,25,25,26,25,25,25,25,26,26,25,24,24,24,24,24,25,25,24,24,25,23,23,22,22,22,20,19,19,18,18,16,15,14,11,11,9,7,6,6,5,5,5,5,4,5,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,7,7,8,8,7,8,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,5,5,5,5,5,5,5,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,3,3,3,4,5,5,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,5,4,5,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,4,3,3,3,3,3,3,4,3,3,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,5,5,7,6,8,9,10,9,10,13,14,15,15,17,18,17,17,16,18,18,16,20,18,18,20,20,23,23,21,22,23,21,24,22,23,23,21,22,23,22,21,22,23,23,23,22,22,23,24,22,20,22,23],[28,28,27,28,27,27,28,27,27,27,26,25,26,25,26,25,26,26,24,26,25,23,25,25,24,25,26,25,26,25,23,25,26,26,25,26,25,26,26,26,26,26,25,25,25,25,24,22,23,22,21,21,20,18,17,18,17,16,16,16,13,12,9,7,6,5,5,4,4,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,3,3,3,3,2,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,5,5,5,5,6,7,8,9,9,12,13,13,11,13,14,14,14,16,16,16,16,18,19,20,20,21,22,24,22,23,23,21,23,21,21,22,22,22,22,23,22,25,24,26,24,24,25,25,25,24,25,25,25,25,25,25,25,25,26,26,26,27,26,26,26,26,25,25,26,25,25,26,24,26,23,23,24,23,22,22,20,20,20,18,16,16,14,12,11,8,7,6,5,5,4,5,5,4,5,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,8,7,7,6,6,6,6,7,7,7,8,8,7,7,7,7,6,6,6,6,5,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,6,6,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,3,3,4,5,5,5,4,2,1,1,1,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,5,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,7,6,8,10,10,10,10,13,14,16,17,17,20,21,19,18,19,20,19,22,19,22,21,22,24,24,23,23,24,23,24,23,24,24,23,23,25,22,23,24,25,25,24,23,23,24,25,24,22,23,24],[27,28,28,28,28,27,28,28,26,27,26,25,26,25,27,25,27,27,25,27,26,24,27,26,24,26,26,25,27,27,25,27,27,27,27,27,27,27,27,27,27,27,27,26,27,26,26,24,25,23,21,21,22,21,19,20,19,18,19,18,16,13,11,9,7,7,6,5,5,4,4,4,4,3,3,3,4,3,4,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,6,6,6,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,5,6,5,5,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,6,6,5,6,6,5,5,5,5,6,6,5,6,6,7,7,7,8,9,10,11,12,14,14,12,14,16,15,15,17,17,17,18,19,20,21,20,21,22,24,23,24,24,23,25,22,21,23,23,24,24,24,24,26,25,27,26,26,26,26,26,26,26,27,27,27,26,26,27,27,27,26,27,27,27,27,27,26,26,27,27,27,27,27,25,27,24,25,25,24,23,23,21,22,20,20,18,17,16,13,12,10,9,8,6,6,6,6,6,6,6,5,6,6,6,7,7,7,7,8,8,8,8,9,9,9,8,9,10,10,9,9,8,7,8,8,8,9,8,10,10,8,9,9,9,8,7,8,8,7,7,7,7,6,7,6,6,5,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,6,6,7,7,7,6,6,5,5,4,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,6,6,6,5,3,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,3,4,3,3,4,4,4,3,3,3,4,4,4,4,4,4,5,4,5,5,4,5,5,6,5,5,5,6,6,5,5,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,6,6,6,6,6,6,6,5,6,5,5,6,6,5,5,6,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,4,5,5,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,3,4,4,4,3,4,5,7,8,7,9,11,11,11,12,15,16,17,17,20,21,21,20,17,21,21,20,23,19,23,22,23,25,24,23,25,25,23,26,25,24,24,25,25,25,23,23,25,25,25,26,24,25,25,26,24,23,25,24],[28,28,28,28,28,27,28,28,26,26,26,24,27,24,26,25,26,27,25,27,26,25,26,26,25,26,27,25,27,26,25,27,27,28,27,27,26,27,27,27,27,26,26,26,26,26,24,22,23,23,20,19,21,19,17,18,18,17,18,16,15,12,11,9,8,8,7,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,5,4,4,5,5,4,5,5,5,6,6,6,5,6,6,6,6,7,7,8,7,6,6,6,7,7,7,7,6,7,6,5,6,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,5,5,4,4,5,5,4,5,5,4,5,5,5,5,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,3,3,4,3,3,3,4,4,3,3,3,4,4,3,3,4,3,4,3,4,4,3,3,4,3,3,4,4,3,3,4,4,4,4,5,5,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,3,4,4,4,4,4,5,4,3,3,3,3,3,3,2,2,2,2,1,1,2,1,1,0,1,3,2,2,2,2,3,2,3,3,2,2,3,3,2,3,3,4,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,6,6,6,7,6,7,6,6,7,7,7,6,5,6,7,6,6,7,7,7,7,8,9,10,10,11,12,13,14,12,13,14,15,14,15,16,17,17,18,20,21,21,22,22,23,22,23,22,21,23,21,21,22,22,23,21,22,24,24,24,26,24,25,25,25,26,26,26,25,25,25,26,26,26,26,26,26,26,27,26,27,25,26,25,25,26,25,26,26,25,26,24,25,25,23,23,22,22,22,20,19,17,17,15,13,12,11,10,8,8,7,7,7,7,6,7,6,7,7,7,7,8,8,8,8,8,9,9,9,10,9,9,9,10,10,9,9,9,8,8,8,8,9,9,10,11,9,10,10,9,8,9,9,8,8,8,8,7,7,7,7,7,6,7,6,6,5,6,6,5,5,6,6,6,6,6,6,6,7,7,8,8,8,7,7,7,6,6,5,5,4,4,4,4,4,4,3,3,4,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,2,3,3,4,4,5,5,7,6,6,5,4,2,2,2,3,3,3,4,4,4,4,5,5,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,4,4,5,5,4,4,4,5,5,5,5,4,5,5,5,5,5,5,6,6,6,7,7,6,6,7,7,6,6,7,7,6,7,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,4,4,5,5,4,4,5,4,4,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,4,5,5,5,5,6,5,6,6,6,7,6,7,6,6,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,7,7,7,6,7,7,7,7,7,7,6,6,5,6,6,5,5,5,5,5,4,5,5,4,5,5,5,4,5,5,4,5,5,5,4,5,7,7,9,9,10,11,13,12,13,14,15,16,16,17,20,19,19,18,19,20,19,24,19,21,21,19,24,23,22,23,25,23,24,26,25,23,24,24,25,24,22,23,24,25,25,23,24,23,25,24,23,25,26],[27,27,27,27,27,27,28,27,26,27,25,25,26,26,26,26,26,27,25,26,26,26,26,26,25,26,26,26,26,26,25,27,28,27,26,28,27,27,28,27,28,27,26,26,26,26,24,21,24,23,20,21,21,19,18,19,18,17,17,17,15,13,11,10,9,8,8,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,5,5,5,4,5,5,5,5,5,5,6,5,5,6,6,5,5,7,6,6,7,7,7,7,7,8,8,8,8,7,7,7,8,8,7,8,7,7,7,6,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,5,5,5,5,5,6,5,6,6,5,7,6,6,6,7,6,7,7,6,7,7,7,7,7,6,7,7,6,7,6,7,6,7,6,6,7,6,6,6,6,7,6,5,6,5,5,5,4,4,4,4,4,3,3,3,3,4,4,3,3,4,4,3,3,4,4,4,4,3,3,4,4,4,4,4,3,4,4,4,4,6,5,5,5,5,6,6,6,5,6,6,5,6,6,7,7,8,7,7,7,7,7,7,7,7,6,6,6,6,5,6,5,5,6,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,1,1,1,0,1,2,2,2,2,3,3,3,4,3,4,4,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,7,6,7,7,7,7,7,8,8,8,8,8,8,8,8,8,7,8,8,7,8,8,8,9,8,8,10,10,11,11,12,13,13,13,14,14,16,16,17,18,18,17,19,21,20,20,22,21,23,22,23,22,21,23,23,21,22,22,22,22,22,23,25,24,26,24,25,26,25,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,26,27,26,26,26,26,26,27,25,27,25,24,25,24,24,23,23,22,20,19,19,18,16,14,14,12,10,10,9,8,8,8,8,8,8,7,8,8,8,9,9,9,9,10,10,10,10,11,11,11,12,12,12,12,11,11,9,9,9,10,10,11,12,12,13,12,12,12,11,10,10,10,9,10,10,9,9,8,9,8,8,8,8,6,6,6,6,7,6,6,7,6,6,6,7,7,7,7,7,8,8,9,8,8,7,6,6,6,6,6,5,6,5,5,5,5,4,4,4,4,4,4,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,4,4,4,4,5,5,6,6,7,5,4,3,3,3,4,3,4,4,4,4,4,5,5,5,6,6,6,6,5,6,5,6,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,4,4,5,4,4,5,5,4,4,5,5,5,5,5,6,5,6,5,5,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,6,5,6,6,6,6,5,6,6,6,6,6,6,7,7,6,7,7,6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,7,7,6,7,6,6,5,5,6,6,5,5,6,5,4,5,5,5,5,5,5,4,5,5,5,5,5,5,5,6,5,4,5,5,5,5,5,5,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,7,8,7,7,8,7,7,7,7,7,6,7,7,7,7,8,7,7,7,8,7,7,7,7,7,8,8,8,8,7,8,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,7,8,9,9,10,11,12,12,13,14,15,17,18,19,21,21,21,18,20,20,20,22,20,21,22,21,24,23,24,23,23,22,25,25,23,24,24,24,23,22,23,25,24,23,25,24,23,25,26,23,23,25,25],[28,28,28,28,28,28,29,28,26,26,26,24,26,25,26,26,26,27,24,27,26,25,26,26,25,26,27,26,27,27,26,27,27,28,26,27,27,27,27,26,27,26,26,26,26,26,25,23,24,23,21,22,22,20,19,21,20,18,19,19,17,14,13,11,9,9,9,7,8,7,7,7,7,6,6,7,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,6,5,5,5,6,5,5,6,6,6,6,7,6,6,7,7,8,8,8,7,6,7,8,7,8,7,7,7,7,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,5,4,5,6,5,6,6,6,6,6,6,7,6,7,7,7,7,7,7,7,7,6,6,6,6,7,6,6,6,6,6,5,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,4,4,3,3,4,4,4,4,3,4,4,4,3,3,4,3,3,4,4,4,5,4,5,5,5,5,6,6,5,5,6,6,6,7,7,8,8,7,7,7,7,6,7,7,6,6,6,6,6,6,6,5,5,5,4,5,4,5,5,5,4,4,4,4,4,4,3,4,3,3,3,2,2,2,2,2,1,0,1,2,2,2,4,3,5,4,4,4,5,5,4,5,5,5,5,5,5,5,6,5,6,5,6,7,6,7,7,7,7,7,8,7,8,8,8,8,8,8,8,8,8,8,8,8,8,7,8,9,8,8,9,9,9,9,9,10,11,12,12,12,13,13,14,15,15,17,16,18,19,20,19,21,22,23,22,24,24,24,25,24,24,22,24,24,24,24,24,25,24,23,24,26,26,28,26,26,26,26,27,27,26,27,26,27,26,27,27,27,26,26,27,28,27,27,26,26,27,27,28,27,27,26,26,27,27,26,27,26,25,25,24,24,22,22,21,20,18,16,15,13,12,10,9,9,9,8,9,8,8,8,8,8,9,9,9,9,10,11,10,9,10,12,11,11,12,12,12,12,11,11,10,9,10,11,10,11,12,13,13,13,12,12,11,11,11,10,10,10,10,10,9,9,9,9,8,9,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,9,9,8,8,8,7,7,7,6,5,5,5,6,5,4,4,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,6,7,7,5,4,3,3,3,4,3,3,4,4,5,4,5,5,6,6,6,6,7,5,5,6,6,5,5,6,5,5,5,6,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,6,5,5,5,5,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,6,5,5,6,5,6,6,6,6,6,6,6,7,6,6,6,6,6,6,7,6,7,7,7,6,8,7,7,7,7,8,7,7,7,8,7,8,7,7,7,7,6,7,5,5,6,6,5,5,6,5,5,5,6,5,5,6,6,5,6,6,7,6,6,5,5,6,6,5,5,6,5,5,6,6,7,6,6,6,6,6,6,7,6,6,7,7,7,6,6,7,7,6,7,7,7,6,7,7,6,6,7,7,7,7,7,8,8,8,8,8,7,8,8,8,7,8,8,8,8,9,8,8,8,8,8,8,8,8,8,8,9,8,8,8,7,7,8,8,7,7,6,7,7,6,6,6,6,5,6,6,6,5,5,6,6,5,6,6,5,5,6,6,5,6,7,8,10,9,11,12,13,12,13,15,16,17,17,17,21,21,20,20,22,20,19,23,20,21,24,22,24,26,24,24,25,23,24,25,26,25,24,24,26,24,25,26,26,25,25,24,25,25,26,26,24,26,27],[28,28,28,28,28,28,28,28,27,27,26,26,27,25,25,26,26,26,26,26,26,25,26,26,26,27,27,26,27,26,26,27,28,28,26,27,27,28,27,27,28,27,26,27,26,26,26,24,24,23,22,22,22,20,19,21,19,19,19,18,16,14,13,10,9,8,7,6,6,6,5,6,5,5,5,5,4,5,4,4,4,4,4,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,7,6,5,5,5,6,6,6,6,6,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,5,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,5,6,5,6,5,5,5,5,5,4,5,5,5,4,5,5,4,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,2,2,2,3,3,3,4,4,3,3,3,3,4,3,4,3,3,3,3,3,3,2,3,3,2,2,3,4,3,3,4,3,4,4,4,5,4,4,4,4,5,6,6,7,7,6,6,7,6,5,6,5,5,5,5,5,5,5,5,4,4,4,4,5,5,5,5,4,3,3,4,4,3,3,3,3,2,2,2,2,2,1,2,2,1,1,0,1,1,1,2,2,3,2,2,3,3,3,3,4,4,4,5,4,4,4,5,5,5,5,5,6,5,6,6,6,6,7,6,6,7,7,7,7,7,7,7,7,8,7,7,7,7,7,7,8,7,7,8,8,8,9,9,10,12,13,11,13,14,14,14,15,16,17,16,17,18,19,19,20,22,23,23,24,24,25,24,25,24,22,25,24,23,25,25,25,25,25,24,26,27,28,26,27,27,27,28,27,27,27,28,27,27,27,28,28,27,27,27,29,28,28,28,27,27,28,27,27,27,27,27,27,25,26,26,25,25,24,23,22,22,21,20,19,18,14,14,12,10,9,8,8,8,8,8,7,8,8,8,8,8,9,9,9,9,10,9,9,10,11,10,11,12,12,11,11,10,11,9,9,10,10,10,10,12,12,12,12,12,12,11,11,11,10,9,10,10,9,9,9,9,8,8,8,7,7,6,7,7,7,6,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,7,6,6,6,6,5,5,5,5,4,4,4,4,4,4,3,4,3,3,3,3,3,3,4,3,4,3,3,3,3,3,4,3,3,4,4,5,5,6,7,7,7,5,4,3,2,2,3,2,2,3,3,3,3,4,4,4,5,5,5,5,4,4,4,4,4,4,4,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,5,6,6,6,5,5,5,5,4,5,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,5,5,4,4,4,5,5,4,4,5,5,5,5,6,5,5,6,6,6,5,5,6,7,6,7,6,6,6,6,5,5,4,4,5,5,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,6,6,5,6,6,6,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,5,5,6,6,6,6,6,6,7,6,6,7,6,7,6,7,7,7,7,7,8,8,7,7,7,7,7,7,8,7,7,7,8,7,7,8,7,7,8,8,7,8,7,8,8,8,8,7,7,8,7,7,7,6,7,7,6,6,6,6,5,5,6,6,5,5,5,5,5,5,6,5,5,5,5,5,5,7,8,9,8,10,12,11,11,13,13,15,17,16,18,20,20,20,18,20,20,19,23,20,21,22,21,24,24,23,24,25,23,25,24,24,25,24,25,25,24,23,26,25,24,25,23,24,24,26,24,23,25,26],[29,28,28,29,28,28,28,28,28,27,27,26,28,27,27,26,27,28,26,27,28,25,27,27,26,27,27,26,27,27,26,27,28,28,27,28,27,28,28,27,28,26,26,26,26,25,24,22,24,21,20,20,21,19,17,19,18,17,16,16,13,12,10,9,8,7,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,5,5,5,6,5,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,5,4,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,4,5,4,4,4,5,5,4,4,5,4,4,5,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,3,3,3,2,3,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,6,6,5,5,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,1,1,0,1,1,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,6,6,7,6,7,7,7,7,7,7,8,9,10,11,10,12,13,13,12,13,14,14,15,16,16,17,17,17,19,21,20,22,22,23,23,24,22,21,23,23,21,22,22,22,23,22,23,24,24,26,24,25,26,25,26,26,26,26,26,26,26,26,26,27,27,27,26,27,26,27,26,26,25,26,26,26,26,26,25,26,24,24,25,24,24,22,22,21,20,20,18,18,16,13,13,11,10,8,8,7,7,7,7,7,7,8,7,8,7,7,8,8,8,9,8,9,9,10,10,10,10,10,10,10,10,10,9,9,9,9,9,10,10,11,11,11,11,10,10,9,10,9,8,9,9,8,8,8,8,7,7,7,7,7,6,7,6,6,7,6,6,6,6,6,6,6,6,7,7,7,8,8,8,7,7,6,6,5,5,5,5,4,5,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,6,7,6,4,3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,6,6,6,5,5,5,4,4,4,4,4,4,4,4,5,4,4,5,5,5,4,5,5,5,5,6,5,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,6,6,6,6,6,6,7,7,6,6,7,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,7,7,6,6,6,5,6,5,5,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,6,7,8,8,10,11,10,11,12,13,14,16,17,18,20,19,20,18,20,19,18,22,19,20,22,21,24,23,23,24,24,22,25,24,23,25,24,24,24,22,24,25,24,23,25,25,24,25,25,23,23,24,25],[28,27,27,28,27,27,27,27,27,27,26,26,26,25,26,25,26,26,25,27,26,25,26,26,26,27,27,26,27,26,25,27,28,28,27,28,27,27,27,27,27,26,26,26,26,25,24,22,24,22,20,21,21,19,18,19,18,16,17,17,14,13,11,8,7,7,6,5,5,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,3,3,3,3,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,5,5,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,0,1,1,1,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,7,7,7,8,9,10,10,12,11,12,12,13,14,14,14,15,16,17,17,18,19,21,21,21,22,23,23,24,23,21,23,22,21,22,22,23,23,23,23,24,24,27,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,26,27,26,26,26,26,25,26,26,26,25,26,26,24,25,24,24,23,22,21,22,20,19,17,18,15,13,13,10,9,8,7,7,7,6,6,7,6,6,6,7,7,7,7,7,8,9,8,8,9,9,9,10,10,11,10,10,9,10,9,8,8,9,9,10,10,11,11,11,10,10,9,9,9,8,8,8,8,8,7,7,7,7,6,6,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,4,4,4,6,5,5,5,3,2,2,2,2,2,2,2,2,3,2,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,4,4,3,4,3,3,3,4,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,5,4,4,4,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,5,5,4,4,4,4,5,4,4,5,5,4,4,5,5,4,5,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,6,6,6,6,6,5,5,5,6,6,6,6,6,6,6,7,6,7,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,6,6,8,8,10,10,10,11,12,14,14,16,17,18,20,20,20,18,21,19,20,23,20,21,22,22,24,24,24,25,24,23,25,25,24,26,24,23,24,24,24,24,25,24,24,24,22,25,24,24,22,23,24],[29,29,29,29,29,29,29,28,28,28,27,27,27,27,27,27,27,27,26,26,26,26,26,26,26,27,26,26,27,25,25,26,26,26,26,26,26,26,26,26,26,26,25,25,25,25,23,23,23,22,21,21,21,19,18,19,18,17,16,16,14,12,10,7,6,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,3,3,3,4,3,3,2,2,2,2,2,1,2,2,1,1,1,1,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,4,4,5,5,4,4,5,5,5,6,6,7,9,9,10,11,13,13,12,13,15,15,14,16,18,18,17,19,20,20,21,22,22,24,23,23,23,21,25,23,22,23,24,23,23,24,23,26,25,27,25,25,26,26,26,26,26,26,26,26,27,26,26,27,27,27,27,27,27,26,27,26,25,26,25,26,26,26,25,25,23,24,23,24,23,22,20,20,19,18,17,16,15,12,11,9,8,7,6,6,5,6,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,9,8,8,8,7,7,7,8,8,8,8,9,8,8,8,8,7,8,7,7,7,7,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,7,7,6,6,6,4,4,4,4,3,3,3,3,3,3,2,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,6,6,6,4,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,3,3,4,3,3,4,4,3,4,3,4,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,3,4,3,3,4,5,6,7,7,9,11,10,10,12,13,14,17,16,17,20,20,20,19,19,21,20,23,20,24,23,23,25,25,25,24,24,23,25,24,23,26,24,24,24,23,23,25,25,24,25,24,23,24,25,24,23,24,25],[28,28,28,28,28,28,28,28,28,27,27,26,26,26,27,26,26,27,26,26,27,25,27,27,26,27,27,27,27,26,26,27,27,28,27,28,27,27,28,27,27,27,27,26,26,26,24,23,24,23,21,21,21,19,18,20,18,17,18,17,13,12,10,7,6,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,3,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,2,1,1,2,1,1,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,4,5,5,4,4,4,4,5,4,4,5,5,5,6,6,7,9,10,10,12,14,14,13,14,15,15,14,16,16,17,18,18,20,22,21,22,23,24,23,24,23,21,23,22,22,23,23,23,24,23,22,25,24,26,25,25,26,26,26,26,26,26,26,26,26,26,27,27,26,27,26,28,26,26,26,26,26,27,27,26,27,26,26,26,25,25,25,25,23,22,21,20,20,19,17,16,15,12,11,9,8,6,6,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,8,8,9,9,8,9,8,8,7,7,7,7,8,8,9,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,7,6,5,4,4,4,4,3,3,3,2,3,3,2,2,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,6,6,6,5,3,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,4,4,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,3,3,4,3,3,4,4,3,4,3,4,4,3,3,4,3,3,3,4,3,4,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,6,5,5,5,5,5,5,5,4,4,5,4,4,5,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,5,6,7,7,9,10,10,11,12,13,13,16,16,18,20,19,19,18,19,18,19,23,20,22,23,22,24,24,24,24,24,23,26,24,24,25,23,24,24,23,23,25,25,24,24,24,24,24,24,24,22,25,25],[29,29,29,29,29,29,29,28,28,28,28,27,28,26,27,25,27,27,26,27,26,25,28,27,25,27,28,26,28,27,26,28,28,28,27,28,27,28,28,28,28,27,27,27,26,26,24,24,24,23,21,22,22,20,19,21,20,18,18,18,15,12,10,7,6,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,4,4,4,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,3,3,4,3,3,2,2,2,2,2,1,2,2,2,1,2,2,1,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,4,4,5,5,4,4,3,4,4,4,4,5,4,5,5,5,7,9,9,10,11,14,13,13,14,16,16,15,17,18,18,18,19,21,22,22,22,22,23,24,24,22,22,23,23,22,23,22,23,24,24,22,25,25,26,24,25,26,25,25,26,26,26,26,26,26,26,26,26,26,26,26,27,26,26,26,26,25,26,26,25,26,25,25,26,24,25,25,24,24,23,21,21,20,19,18,17,16,13,12,10,8,7,6,5,4,5,5,4,5,5,5,6,5,6,7,6,7,8,7,7,8,8,8,8,9,9,9,9,8,9,8,8,8,7,8,8,8,9,9,8,8,9,9,8,7,7,7,7,7,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,7,7,6,6,6,4,4,4,3,3,3,3,2,3,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,5,7,7,7,5,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,3,4,4,3,4,4,3,3,3,4,4,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,5,6,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,4,5,5,6,6,5,5,5,5,6,6,6,5,6,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,5,6,8,7,9,11,11,11,12,14,15,17,17,18,21,20,20,18,20,21,20,23,21,24,24,23,26,24,24,24,24,23,26,25,23,25,25,24,24,23,23,25,24,24,25,24,23,25,25,24,22,24,24],[27,27,28,28,28,28,27,27,28,27,26,27,26,26,26,25,25,26,25,26,26,25,26,26,25,27,26,26,27,25,25,27,27,27,26,27,27,27,27,26,27,26,26,26,26,24,24,22,23,22,22,22,21,19,18,20,19,17,17,17,13,11,9,6,6,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,2,3,3,3,3,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,2,2,1,1,2,1,1,2,1,1,1,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,4,3,3,4,4,4,5,5,6,8,9,9,10,13,13,11,13,14,14,14,15,16,16,16,17,18,19,19,20,21,21,21,22,20,20,21,21,20,21,20,22,21,21,20,23,23,25,23,23,24,24,24,25,24,24,24,24,24,25,25,25,25,25,25,26,25,25,25,24,25,25,25,24,24,24,24,25,23,23,23,23,22,20,20,20,18,17,16,15,14,12,10,8,7,6,5,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,7,7,8,8,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,6,6,6,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,3,3,3,4,5,6,6,4,3,2,2,1,2,2,3,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,4,3,4,4,3,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,5,4,4,4,4,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,7,6,8,10,9,9,11,12,13,15,16,17,18,19,19,17,18,18,19,22,19,23,21,21,24,23,24,23,24,23,25,23,24,25,22,23,23,22,22,24,23,23,24,23,23,23,24,23,21,23,24],[28,28,28,28,28,28,28,27,28,27,26,26,26,26,27,25,25,27,26,26,26,26,26,26,26,27,25,26,26,25,25,26,26,27,26,27,26,27,27,26,27,26,25,27,25,25,23,22,23,22,22,22,21,19,19,19,18,16,17,17,13,11,9,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,3,3,4,4,3,3,3,3,4,3,3,4,4,4,5,5,6,7,9,9,11,13,13,12,13,15,15,15,17,17,17,18,18,19,21,20,20,22,22,22,23,21,21,23,22,22,22,22,23,23,21,21,24,24,27,25,25,25,26,26,26,26,25,26,26,26,26,26,26,27,27,27,27,26,26,26,26,25,26,25,25,26,25,25,25,24,25,24,24,24,22,19,21,20,17,17,15,14,11,10,8,6,5,5,4,4,4,4,4,4,4,5,5,4,5,5,5,5,6,5,6,6,7,6,7,7,7,7,7,7,6,6,6,6,6,6,6,7,7,7,6,7,7,6,6,6,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,3,3,4,5,6,6,4,3,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,4,4,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,7,9,9,8,9,11,12,14,15,16,18,19,18,16,18,19,18,22,19,21,21,22,25,24,24,24,24,24,24,23,24,25,22,23,24,22,20,24,24,22,23,23,24,22,24,23,20,24,25],[28,28,28,28,28,28,28,27,27,27,27,26,26,25,26,24,25,26,25,25,26,25,25,25,26,26,25,26,26,25,25,26,25,26,25,26,25,26,25,26,25,26,25,25,24,24,22,22,22,22,22,20,20,20,18,18,18,16,16,16,13,11,9,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,2,1,1,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,4,4,4,4,5,6,7,8,9,11,12,13,12,13,14,15,14,16,16,17,17,18,19,20,19,20,21,21,22,22,21,20,22,21,21,21,21,22,22,22,21,24,23,25,23,23,24,24,25,24,24,24,24,24,24,24,24,25,25,25,24,26,24,25,24,24,24,24,24,24,24,25,24,25,23,23,22,23,23,21,20,20,18,17,16,16,14,11,9,8,6,5,4,4,3,4,4,3,4,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,6,6,6,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,5,5,4,4,4,3,3,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,5,5,5,4,3,2,2,1,2,2,1,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,2,2,3,3,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,3,4,5,6,6,7,8,9,9,10,11,11,14,14,15,17,18,16,15,17,18,17,20,17,21,20,20,23,22,21,21,23,21,23,22,21,22,22,22,22,20,21,22,22,22,23,21,21,22,23,21,20,22,23],[28,28,28,28,28,28,28,28,27,27,27,27,27,25,26,25,26,27,26,27,27,25,26,27,25,26,27,26,27,26,25,26,27,27,27,27,26,27,27,27,26,26,26,26,25,25,24,23,24,23,22,22,22,20,18,20,19,17,17,17,13,11,8,6,5,4,3,3,3,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,1,1,2,2,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,5,6,8,9,9,10,12,14,12,13,15,15,14,16,16,17,16,18,19,20,20,20,21,22,23,23,22,21,23,21,21,22,22,23,22,22,22,24,23,26,23,24,25,24,25,25,24,24,24,24,25,24,25,25,25,25,25,26,25,26,25,26,25,25,25,25,24,25,24,26,24,24,23,23,22,21,20,20,18,17,16,15,13,11,9,7,6,5,4,3,3,4,4,3,4,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,6,6,6,5,5,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,4,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,3,3,3,6,6,6,4,3,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,2,2,2,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,2,2,3,3,2,3,2,3,3,2,2,3,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,3,2,2,3,4,5,5,5,7,9,9,9,10,12,12,15,17,17,18,19,18,16,17,18,19,21,20,23,21,22,25,24,22,22,24,23,24,23,22,23,22,22,23,21,22,23,22,23,23,22,22,23,24,21,21,23,23],[28,27,28,28,28,28,28,27,28,27,27,27,27,26,26,26,26,27,26,26,27,27,26,27,27,27,27,27,28,26,26,27,26,27,27,27,26,27,27,27,27,27,26,26,26,26,24,23,23,23,23,21,21,21,19,21,19,18,17,17,14,11,8,6,5,4,3,3,3,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,2,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,3,3,2,2,3,2,2,2,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,5,6,7,9,10,12,14,16,13,14,16,16,15,16,17,17,18,19,19,20,20,20,22,23,22,23,22,21,23,21,20,22,22,24,22,22,22,25,24,27,24,25,25,25,25,25,25,25,25,25,25,25,26,26,26,25,26,26,26,26,25,26,25,25,26,25,25,26,25,26,24,24,23,24,23,22,21,20,18,17,16,15,13,10,9,8,6,5,4,4,3,4,4,3,4,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,7,6,6,6,5,5,5,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,4,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,1,1,2,2,2,3,3,5,5,6,4,3,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,3,3,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,3,3,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,4,5,6,6,7,9,9,8,10,12,13,16,17,16,19,19,19,17,17,19,20,21,20,24,21,22,25,24,23,23,24,23,23,24,24,23,21,23,24,21,21,24,23,23,24,23,23,23,24,23,20,23,23],[28,28,28,28,27,28,28,27,27,26,27,26,26,25,26,25,25,26,25,26,26,25,26,26,26,26,26,26,26,25,25,26,26,27,25,26,26,26,25,26,26,25,25,25,24,24,23,22,22,22,21,21,21,19,17,19,19,16,17,16,13,11,8,6,5,4,4,3,3,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,1,2,2,3,3,3,2,3,2,2,2,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,8,9,10,12,13,14,13,14,15,15,15,16,16,17,17,17,18,20,19,19,21,22,22,22,22,20,23,21,20,22,22,23,22,22,22,25,23,26,24,25,25,25,25,25,25,25,25,25,25,25,25,26,25,25,25,26,25,26,25,25,25,24,25,25,24,25,24,24,24,23,22,24,22,20,19,19,18,16,15,15,13,11,9,7,6,5,4,4,3,4,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,2,2,2,2,1,1,2,2,1,1,2,1,1,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,3,3,4,4,5,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,6,8,9,8,9,11,12,14,16,16,17,19,16,16,16,18,18,20,18,22,20,20,23,23,22,21,23,22,22,23,22,22,21,22,24,22,21,23,22,24,23,22,22,22,24,23,20,22,24],[28,28,28,28,28,28,28,27,27,27,27,27,26,25,26,25,26,26,25,25,26,25,25,25,25,26,26,26,27,25,25,26,26,26,26,26,26,26,26,26,26,25,25,25,25,24,24,22,22,22,21,21,22,20,18,19,18,16,17,16,13,11,9,6,5,4,3,3,3,2,2,2,2,1,2,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,2,2,2,2,2,2,3,3,2,2,3,2,2,2,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,6,7,8,9,11,13,15,12,13,16,16,15,16,17,18,18,18,20,21,20,20,22,22,22,22,21,21,22,20,20,22,21,22,22,22,22,23,23,26,23,24,24,24,25,24,24,24,24,24,24,25,25,25,25,25,25,26,25,26,25,25,25,24,25,24,24,25,24,25,23,23,23,23,22,21,19,19,18,17,16,15,13,11,9,7,6,5,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,6,6,5,5,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,3,3,5,5,5,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,4,4,3,3,3,3,2,2,2,1,2,2,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,3,4,3,3,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,6,7,9,9,9,10,12,13,15,16,16,18,19,16,16,17,19,18,20,19,22,20,21,25,24,23,23,24,21,23,23,23,23,22,22,22,21,21,22,21,22,22,22,20,21,23,21,20,22,24],[27,28,28,28,28,28,27,27,28,27,27,27,27,27,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,26,27,28,27,28,28,28,28,27,28,27,27,26,27,27,26,25,24,23,24,23,22,22,22,21,20,21,19,18,17,16,13,12,9,6,5,4,3,3,3,2,2,2,1,1,1,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,3,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,7,9,9,11,13,13,12,13,14,14,15,15,17,17,17,18,19,21,19,20,22,22,23,23,22,22,22,21,20,23,22,22,21,22,21,25,24,26,24,24,25,26,25,25,25,26,25,25,26,25,26,26,26,26,26,26,26,26,26,25,25,25,26,26,26,25,25,25,24,25,23,25,24,21,20,20,19,18,16,14,12,10,8,7,6,5,4,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,6,6,6,6,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,4,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,3,3,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,2,2,3,3,3,3,4,5,5,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,4,4,3,4,3,3,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,3,3,2,2,2,3,3,2,2,3,3,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,3,3,3,4,4,4,4,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,4,4,3,4,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,2,2,2,3,3,4,5,5,7,8,8,8,9,11,12,14,16,16,19,18,19,16,17,18,18,20,19,22,22,21,23,24,22,23,23,23,24,23,23,24,22,22,22,21,23,23,24,22,23,23,21,23,23,22,20,22,23],[27,27,28,28,28,28,27,27,28,27,25,26,26,26,26,26,26,26,26,26,26,26,26,26,27,26,26,26,26,25,25,26,26,27,25,27,26,26,27,26,26,25,25,26,24,24,24,22,23,22,22,22,22,20,19,20,19,18,17,17,14,12,9,6,5,5,4,3,3,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,3,3,3,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,5,5,6,9,9,10,13,13,14,12,13,16,15,15,16,17,18,18,18,19,21,19,20,22,23,22,23,20,20,21,19,21,22,20,24,22,21,21,23,23,26,23,23,25,25,25,26,25,25,25,25,25,25,26,25,26,26,26,26,26,25,24,25,24,25,26,24,26,24,24,25,23,24,23,24,23,22,19,20,19,17,16,15,13,10,9,8,6,5,4,4,3,4,4,3,4,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,5,5,5,4,4,3,3,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,3,3,3,4,4,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,2,2,3,3,2,3,3,2,3,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,3,3,3,4,3,3,4,3,3,3,3,3,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,4,5,6,6,7,9,8,8,9,11,12,13,15,15,19,19,18,16,16,17,18,21,19,21,19,21,24,23,22,23,23,23,23,22,22,23,20,21,23,21,19,22,22,22,22,21,22,22,23,22,19,23,24],[28,28,28,28,27,28,27,27,27,26,27,26,26,26,26,26,26,27,26,26,27,26,26,26,27,26,26,27,26,26,25,26,26,27,25,26,25,26,26,26,26,25,25,25,25,24,23,22,22,22,21,21,21,20,18,21,19,17,18,18,15,12,10,7,6,5,4,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,4,4,5,5,5,6,8,10,10,12,13,15,13,15,16,16,16,17,17,18,18,18,20,21,20,21,22,22,23,23,22,20,22,21,21,22,21,24,22,22,22,25,24,26,24,24,25,26,26,25,25,25,25,25,25,25,25,25,25,26,25,26,25,26,25,25,24,24,25,24,25,25,25,25,24,23,23,24,23,21,20,19,18,16,16,15,13,11,9,8,6,5,4,4,3,4,4,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,7,6,6,6,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,4,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,4,4,4,4,4,3,3,2,2,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,3,4,4,3,3,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,4,5,6,6,7,9,9,9,10,12,12,15,16,15,17,18,16,16,17,18,17,21,18,20,20,21,24,24,23,21,23,22,22,22,22,23,21,21,23,20,21,22,22,23,23,22,21,21,23,21,19,22,23],[28,27,28,28,28,28,27,27,28,27,26,27,26,26,26,25,25,26,26,25,26,26,25,25,27,26,26,26,26,26,26,26,26,26,25,26,25,25,26,25,26,25,24,25,24,24,23,22,22,23,21,21,21,20,18,20,19,18,17,17,15,12,10,7,6,5,4,3,3,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,3,4,4,4,4,3,3,3,4,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,1,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,4,4,4,5,5,7,9,10,11,12,14,15,14,14,16,16,16,17,18,18,18,19,21,21,20,21,22,22,22,23,21,21,21,20,21,21,21,23,22,22,22,24,24,26,23,24,24,24,25,25,24,24,25,24,24,24,25,25,25,25,24,25,25,25,25,25,24,25,25,24,24,24,24,25,24,23,23,23,23,21,20,20,18,17,17,14,13,10,9,8,6,5,4,4,3,3,4,3,3,3,4,4,4,4,5,5,5,6,5,6,6,6,6,7,7,7,7,8,7,6,6,6,5,5,5,6,6,7,7,7,7,7,7,6,6,6,5,5,5,4,4,4,4,3,3,3,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,5,4,5,4,4,3,3,2,2,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,2,2,3,2,3,2,2,2,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,3,4,4,5,5,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,4,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,4,5,6,6,8,9,9,10,10,14,13,15,17,18,19,20,18,17,19,19,19,22,20,22,21,22,24,23,23,23,23,22,24,23,22,23,22,22,22,20,22,22,22,22,22,22,20,22,23,20,21,23,23],[28,28,28,28,28,28,28,28,28,27,26,26,27,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,26,26,27,28,28,27,27,27,27,27,27,27,27,26,27,26,26,24,24,25,24,22,22,22,20,20,21,20,19,18,19,16,13,10,8,6,5,4,4,3,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,3,3,3,3,2,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,4,4,3,4,4,4,4,5,6,8,9,11,11,13,15,15,15,15,16,17,17,18,17,18,19,20,21,22,21,22,23,23,23,23,22,22,23,21,21,23,22,24,21,23,23,26,25,27,25,25,26,26,26,25,25,26,26,26,26,25,26,26,26,25,26,26,26,26,26,26,26,25,26,26,26,26,26,26,24,24,24,24,23,22,20,20,19,17,15,14,12,11,10,8,7,6,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,8,7,7,6,6,6,6,6,7,7,8,7,7,7,7,7,7,6,6,6,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,4,4,3,3,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,5,5,4,3,3,2,2,3,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,4,4,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,4,3,4,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,3,4,4,4,5,4,5,5,4,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,8,9,9,9,10,12,13,15,16,17,19,19,19,17,17,19,19,21,19,23,21,21,24,24,22,23,23,23,24,23,23,24,22,23,24,21,21,23,22,23,23,21,22,22,24,22,20,23,23],[28,27,28,28,28,28,28,27,28,27,26,26,26,26,26,26,26,27,26,27,27,26,27,27,26,26,27,26,27,26,25,26,27,28,26,26,26,26,27,26,26,25,25,25,25,25,24,23,24,23,21,22,22,21,20,22,20,19,18,19,16,14,10,8,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,3,3,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,3,3,2,2,3,3,3,3,4,3,4,3,3,3,3,3,2,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,3,3,3,3,3,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,2,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,4,4,3,4,4,4,5,6,6,7,9,10,11,13,15,15,15,15,17,17,16,18,18,18,19,19,20,21,20,21,21,22,22,23,21,21,22,21,21,22,22,24,22,23,23,25,24,26,24,24,25,26,26,26,25,25,25,26,26,26,25,25,25,25,25,25,25,26,25,25,25,24,25,25,26,25,24,26,24,23,23,23,23,21,21,19,19,17,15,16,13,12,10,9,6,6,5,4,4,4,4,4,5,4,5,5,5,5,6,5,6,6,6,6,7,7,7,7,7,8,7,8,8,7,6,6,6,7,6,7,7,7,8,7,7,7,7,6,6,6,6,6,5,5,5,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,4,4,3,3,2,2,2,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,5,6,4,3,3,3,2,3,3,2,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,5,4,5,5,5,4,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,3,4,4,4,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,5,7,7,8,10,10,10,11,13,13,15,16,16,19,19,18,17,17,19,18,22,19,21,21,21,24,23,23,23,23,23,23,23,23,24,22,23,24,22,22,23,22,23,23,22,22,22,24,23,21,23,23],[28,28,28,28,28,28,28,28,28,27,26,26,27,26,26,26,26,27,26,27,27,27,27,27,27,27,27,27,27,26,26,27,27,27,26,26,26,26,27,27,27,26,26,26,26,26,25,24,24,24,22,22,23,22,20,22,20,20,20,19,17,14,12,9,8,7,5,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,3,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,4,3,4,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,5,6,7,6,8,10,12,12,14,14,15,15,16,17,18,17,19,19,19,20,20,21,22,21,22,23,24,24,24,23,22,23,22,21,23,22,24,22,23,23,25,25,27,25,25,26,26,26,26,26,26,26,26,26,25,26,26,26,26,26,27,26,26,26,26,26,25,25,25,25,25,25,26,25,24,24,24,22,22,21,19,19,18,16,16,14,12,11,9,7,7,5,5,4,5,5,4,5,4,4,4,5,5,5,6,6,6,6,6,7,8,7,7,8,8,8,8,8,7,7,7,6,7,7,7,7,8,8,8,7,7,7,7,6,6,6,6,6,5,5,5,5,4,4,4,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,4,3,3,3,2,2,2,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,5,5,6,6,5,4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,4,5,5,5,5,5,4,4,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,6,7,7,9,10,10,10,10,13,13,16,17,17,19,17,17,17,18,19,19,22,20,20,20,20,23,23,23,21,22,22,23,23,22,25,22,22,24,22,23,22,23,23,22,21,21,22,24,21,20,22,21],[28,28,28,28,28,29,28,28,28,27,27,27,27,26,26,26,26,27,26,26,27,26,26,26,26,27,27,27,27,26,26,27,27,27,26,26,26,26,27,26,27,26,26,26,26,25,25,24,24,24,21,22,23,20,19,21,21,19,18,19,16,13,11,8,7,6,5,4,4,3,3,2,2,2,2,2,3,3,3,3,2,2,3,2,2,2,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,6,5,4,4,4,5,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,3,3,3,3,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,4,4,4,4,4,4,5,6,7,7,10,11,12,12,15,16,14,15,17,18,16,17,18,19,19,20,20,21,21,22,23,23,23,24,22,22,23,21,21,23,22,24,22,25,24,25,25,26,25,25,26,26,26,26,26,26,26,26,26,26,26,26,27,25,25,26,26,26,26,26,26,25,26,26,26,25,26,25,24,23,23,24,22,22,20,20,18,17,16,15,13,11,10,9,7,6,5,5,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,7,8,7,8,8,8,8,8,7,7,7,6,7,6,7,7,8,8,7,8,8,7,7,6,6,6,5,5,5,5,4,4,4,3,3,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,5,4,3,3,3,3,2,2,1,1,1,2,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,5,5,6,6,5,4,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,3,3,4,4,4,3,3,3,4,4,4,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,4,4,4,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,4,5,5,5,5,4,5,5,5,5,5,5,6,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,6,7,7,9,10,10,11,10,13,14,16,18,18,20,20,17,17,18,19,19,21,20,20,22,21,24,23,23,22,22,21,24,23,21,24,22,22,23,22,22,23,22,22,23,23,21,23,24,21,21,22,21],[27,28,28,28,28,28,28,28,28,27,26,26,27,26,26,27,26,27,26,27,27,27,27,28,27,27,27,27,27,27,26,27,28,28,27,28,27,27,27,27,28,27,26,27,26,26,25,24,25,24,23,24,23,21,20,22,20,19,19,18,16,14,11,9,8,6,5,4,4,3,3,3,2,2,3,3,3,3,3,3,4,3,3,3,3,4,4,4,5,5,5,5,5,4,5,5,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,6,6,5,5,6,6,5,5,5,5,5,4,5,5,4,4,5,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,4,5,5,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,3,3,3,4,3,3,4,4,3,4,4,4,4,5,5,5,6,5,6,6,6,6,6,6,6,7,6,5,5,5,5,4,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,3,2,2,3,3,4,4,4,4,3,2,2,2,2,3,3,3,4,4,3,3,3,4,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,4,5,5,6,8,10,11,12,13,15,16,14,16,18,18,16,19,19,18,20,21,22,22,23,23,23,25,25,25,23,21,24,22,21,23,23,24,23,23,24,26,25,27,26,26,27,27,27,28,27,26,27,26,26,27,27,27,27,26,26,27,26,27,26,26,26,26,26,26,26,25,25,26,24,24,23,24,22,21,20,19,19,18,15,14,12,11,10,9,7,6,5,4,4,5,5,4,5,5,5,6,6,7,7,7,7,8,7,8,8,9,9,9,10,11,10,11,9,8,8,7,7,8,8,7,9,9,10,9,9,9,8,8,8,7,7,7,7,6,6,6,5,5,5,4,4,3,3,4,4,4,3,4,5,4,4,5,5,4,5,6,6,7,6,6,7,6,5,4,4,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,3,4,4,4,4,4,5,5,6,7,7,7,6,5,5,4,5,5,5,4,5,5,5,6,6,6,6,7,6,6,6,5,6,5,5,5,5,5,4,5,4,4,4,4,3,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,4,4,4,4,4,5,4,5,5,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,6,6,6,6,6,6,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,4,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,6,7,6,6,5,6,6,5,6,5,5,6,5,4,5,5,4,4,4,4,4,5,5,5,5,5,5,5,6,7,6,6,7,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,5,4,3,4,4,3,3,4,5,6,7,7,8,9,10,10,10,12,13,14,16,17,19,19,18,17,19,19,17,21,19,20,21,22,24,25,23,23,22,24,24,24,23,24,21,22,23,22,22,24,23,23,24,22,22,22,24,22,19,22,20],[28,28,29,29,29,29,29,29,29,28,27,27,28,27,28,27,27,28,27,28,28,27,28,28,27,28,29,28,28,28,27,28,29,29,28,29,28,28,29,28,29,28,28,28,28,28,27,26,27,25,25,25,24,23,22,23,22,21,20,20,18,16,12,10,8,6,5,4,4,3,3,2,2,2,2,3,3,3,4,3,3,3,4,3,3,4,4,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,7,7,6,6,7,7,8,7,6,6,6,6,6,6,5,5,6,5,5,6,6,5,5,6,5,5,5,6,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,4,5,5,6,6,5,5,5,5,4,5,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,4,3,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,6,6,7,7,6,6,5,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,4,5,5,4,4,4,4,4,3,3,4,3,3,3,3,2,3,3,3,3,3,4,4,4,5,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,1,1,2,2,1,0,1,1,2,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,3,3,4,4,3,3,3,4,4,3,4,4,5,5,6,6,8,10,12,12,14,16,17,17,16,18,18,17,19,20,19,20,22,23,23,23,24,24,25,25,25,25,23,25,24,21,24,23,24,24,24,24,26,25,26,26,27,27,28,28,28,27,27,27,27,27,27,28,27,28,27,28,27,28,28,28,27,26,27,28,27,28,27,26,26,24,25,24,24,23,23,20,19,20,17,15,15,13,11,10,9,7,7,5,4,4,4,4,4,4,5,5,5,5,6,6,6,6,7,7,8,8,9,10,9,10,10,10,11,9,8,8,7,7,7,7,8,8,10,10,9,9,9,7,8,7,7,6,6,6,5,5,5,4,4,4,4,3,3,3,3,4,3,3,4,4,4,4,5,5,5,6,6,6,7,7,7,8,7,6,5,4,4,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,3,4,4,4,4,4,5,4,4,5,5,6,6,7,7,7,7,6,5,5,5,5,5,5,4,5,5,6,6,6,7,7,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,3,2,2,3,3,2,3,3,2,2,3,3,3,3,3,3,4,4,3,3,3,4,3,4,5,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,6,7,6,6,6,7,6,5,5,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,6,6,6,6,5,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,7,6,6,6,6,6,5,5,5,5,4,5,5,4,4,5,4,4,5,5,4,4,5,4,4,4,5,6,7,8,8,10,11,11,10,11,13,15,16,17,19,21,20,20,19,20,21,20,23,21,23,23,23,25,24,24,24,24,24,25,25,24,25,24,24,25,22,24,25,25,24,25,23,25,23,26,24,21,24,23],[28,28,28,28,28,29,28,28,28,28,27,27,27,27,27,27,27,28,27,28,28,27,28,28,28,28,28,28,28,28,27,28,29,29,28,28,28,28,28,28,28,28,28,28,27,27,26,26,25,25,25,24,24,23,21,23,21,21,19,19,16,15,12,9,7,6,4,4,4,3,3,2,2,1,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,6,5,6,6,6,6,6,7,7,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,6,6,6,5,5,5,5,4,5,5,4,4,5,4,4,4,4,3,3,4,5,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,5,6,5,5,5,6,6,5,6,7,6,7,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,4,5,5,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,4,3,4,4,4,5,5,6,8,10,12,14,14,16,17,16,17,18,17,17,18,18,19,20,21,22,23,22,24,24,24,24,25,23,23,24,23,22,24,23,24,23,23,23,26,25,26,26,26,27,27,27,28,27,27,27,27,27,27,27,27,27,27,28,28,27,28,26,27,26,27,27,26,28,26,26,27,24,25,25,24,24,24,20,22,21,19,18,17,15,13,12,9,7,6,5,4,4,4,4,4,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,9,9,9,9,8,8,7,7,6,6,6,7,7,8,9,8,8,8,7,7,6,6,6,6,5,5,5,4,4,4,4,3,3,3,2,3,3,3,3,4,4,4,4,4,4,5,5,5,6,6,6,7,7,6,6,5,4,4,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,6,6,7,7,6,5,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,6,6,5,6,6,6,5,5,4,4,3,3,3,2,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,4,3,3,4,4,4,4,4,5,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,6,6,6,5,5,6,5,5,5,5,5,5,4,4,4,4,4,4,3,4,4,5,5,5,5,5,5,5,6,5,5,6,6,5,6,6,6,5,5,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,6,7,8,8,10,11,10,10,11,14,14,15,17,18,21,21,20,17,19,19,20,22,20,21,23,22,24,23,24,24,23,24,25,24,24,25,24,23,24,22,22,24,24,23,24,24,22,24,24,23,22,24,22],[28,28,28,28,28,29,28,28,28,27,27,26,27,27,27,27,27,28,27,28,27,27,27,28,27,28,27,27,28,27,26,28,28,28,27,28,27,27,28,28,28,27,26,27,27,26,25,25,25,25,23,24,23,22,21,22,20,20,19,18,16,14,11,9,7,6,5,4,4,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,6,7,7,7,7,6,6,5,6,6,6,6,6,6,5,5,5,5,6,5,5,5,6,5,5,5,6,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,5,5,5,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,4,4,4,5,5,4,4,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,7,6,7,6,5,5,5,5,5,4,5,5,4,4,4,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,4,4,5,5,5,5,4,3,4,3,3,4,3,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,3,4,3,4,3,4,4,4,4,4,5,6,6,9,10,12,13,14,16,16,16,16,18,17,17,19,19,19,20,20,20,22,22,23,23,24,22,24,23,22,24,22,21,23,22,24,22,24,24,25,25,26,25,26,26,27,26,26,26,27,27,27,27,27,27,27,26,26,26,26,26,27,26,26,25,25,26,25,26,25,24,25,24,24,24,24,23,22,20,20,20,18,16,17,14,13,11,8,7,6,5,5,4,4,4,3,4,4,4,5,5,5,6,6,6,6,7,7,8,8,8,8,9,9,8,9,8,8,7,7,6,6,7,7,7,8,9,7,8,7,7,7,6,6,6,6,5,5,5,4,4,4,4,3,3,3,2,3,3,3,3,4,4,3,4,4,4,4,5,5,5,6,6,6,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,3,4,3,3,3,4,3,3,4,4,4,4,4,4,5,6,7,7,6,5,4,4,4,4,4,5,4,5,5,6,6,6,6,7,6,6,6,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,5,6,6,6,5,5,4,4,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,5,6,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,6,7,8,8,9,11,11,10,11,13,13,14,16,16,19,19,18,17,19,19,19,22,21,21,21,21,23,23,23,22,23,22,23,24,23,25,22,23,23,21,22,23,23,23,23,21,23,23,24,22,21,23,22],[28,29,28,28,28,28,29,28,28,27,27,27,28,27,27,27,27,27,27,27,28,27,28,28,27,28,28,28,28,27,27,28,28,28,27,28,27,27,28,27,27,27,26,27,27,27,25,25,25,24,23,24,24,22,21,23,21,20,20,20,17,15,12,9,8,6,5,4,4,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,6,7,7,6,6,5,5,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,5,5,6,5,5,5,5,5,5,4,4,5,4,4,4,4,5,4,5,5,5,5,4,4,4,4,4,3,4,4,4,3,4,4,4,3,4,4,3,4,4,4,4,3,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,5,4,5,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,4,4,4,3,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,3,4,3,3,3,3,3,4,3,3,4,4,5,6,7,8,10,12,11,14,16,17,15,16,18,18,17,20,20,19,20,20,21,22,21,23,23,24,22,24,22,22,23,22,21,23,22,24,23,24,24,26,25,27,25,26,27,27,27,27,26,26,27,26,27,26,26,26,26,26,26,25,26,26,25,26,24,25,25,25,26,25,24,26,23,24,24,24,23,22,21,20,20,19,15,15,14,12,11,8,6,6,5,4,4,4,4,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,8,7,8,8,8,8,7,7,6,6,6,5,6,6,6,7,8,7,7,7,7,6,5,6,6,5,5,5,4,4,4,4,3,3,3,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,5,5,5,6,6,5,5,4,4,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,7,7,6,5,5,4,4,4,5,5,4,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,4,4,4,3,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,6,5,6,6,6,6,5,5,5,5,5,5,4,4,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,3,4,4,4,5,5,5,5,5,5,5,5,5,6,6,5,5,5,6,5,4,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,3,4,5,6,7,7,9,10,10,9,10,12,13,14,16,16,18,19,17,16,18,18,18,20,18,19,22,20,22,23,24,23,23,23,24,24,24,24,22,23,24,22,23,23,22,23,24,21,22,23,24,21,20,23,21],[29,28,28,29,29,29,28,28,29,27,27,28,27,27,27,27,27,27,27,27,27,26,27,27,27,26,28,28,27,28,27,27,28,29,27,28,28,28,28,28,28,27,27,27,27,26,25,24,25,25,24,24,23,22,20,22,20,19,19,19,16,14,11,9,7,6,5,4,4,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,6,5,5,4,5,5,5,5,5,5,4,4,5,5,4,5,5,5,4,5,5,4,5,6,6,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,3,4,4,4,4,5,5,4,5,4,4,4,4,4,3,3,4,3,3,3,4,3,3,4,3,3,3,4,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,6,8,10,12,11,13,15,16,15,15,17,18,16,19,19,19,19,21,21,23,22,22,23,24,23,24,22,22,24,22,21,23,24,23,23,23,25,25,25,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,26,26,27,26,27,26,25,26,25,24,24,24,24,22,21,21,20,18,16,15,14,12,11,8,6,5,4,4,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,7,6,7,7,7,8,7,6,6,5,5,5,5,6,5,7,7,6,6,6,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,4,5,5,5,5,5,5,4,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,5,5,6,7,7,6,5,4,4,4,4,5,4,4,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6,6,5,6,6,5,5,5,4,4,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,7,7,8,9,9,9,10,12,13,14,16,17,20,20,18,17,18,19,19,21,20,20,21,21,24,22,23,22,23,22,25,23,23,22,22,22,23,20,22,24,22,22,23,23,21,23,24,21,21,23,21],[28,28,28,28,28,29,29,28,28,28,27,27,27,27,27,27,27,28,28,28,28,28,27,28,27,27,28,28,28,28,27,28,28,29,28,28,28,28,28,28,28,28,27,27,27,26,26,25,25,25,24,24,24,23,22,23,20,20,19,19,16,14,11,9,7,5,4,4,4,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,4,5,5,5,4,5,5,6,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,5,5,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,6,6,5,5,6,6,6,5,5,5,4,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,4,4,4,5,6,8,10,12,12,14,15,16,16,16,17,17,18,19,18,18,20,20,21,22,21,22,23,23,23,24,22,22,24,22,21,23,23,23,21,23,24,25,25,26,25,25,27,27,27,27,27,27,27,26,27,27,27,27,27,26,26,27,27,27,26,26,26,25,27,26,27,25,25,26,25,25,25,25,24,23,21,21,21,18,16,18,14,13,11,8,7,5,5,4,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,7,6,6,7,7,7,7,7,6,6,5,5,5,5,6,5,6,7,6,6,6,6,5,5,5,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,5,5,5,6,6,5,5,4,4,3,3,3,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,6,7,5,5,4,4,4,4,4,4,4,4,5,5,5,6,5,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,5,6,6,6,5,5,5,5,5,5,5,4,4,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,2,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,3,4,3,3,3,3,4,4,4,4,4,4,4,5,5,4,5,5,4,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,7,7,8,10,9,9,10,12,12,14,16,17,19,20,19,16,18,19,19,21,19,22,21,21,24,24,23,23,24,22,24,24,23,23,22,23,23,20,21,23,23,22,23,22,22,22,23,22,20,23,20],[28,28,28,27,27,28,28,27,28,27,26,26,26,26,26,27,26,26,27,26,27,27,26,27,27,27,27,27,27,26,27,27,27,28,27,27,26,27,27,27,27,27,26,27,26,25,25,24,24,23,23,23,23,22,21,22,20,20,19,18,15,13,11,9,7,6,4,4,4,3,3,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,6,6,6,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,4,4,4,5,5,5,5,5,5,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,4,4,5,5,6,6,5,6,6,6,6,6,6,6,6,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,5,5,6,7,10,11,10,13,14,15,13,14,16,16,15,17,17,17,19,19,20,20,20,22,21,22,21,21,21,19,21,20,19,21,20,22,21,22,23,24,24,25,24,25,24,25,25,26,25,25,25,25,25,25,25,25,25,25,25,25,25,26,24,24,24,25,24,24,26,23,23,25,24,23,23,23,23,21,21,20,19,18,15,17,14,14,12,7,6,5,4,4,3,3,3,3,3,4,3,4,4,4,5,5,5,5,6,6,6,6,7,6,7,7,8,8,7,6,6,5,5,5,5,6,6,6,7,6,7,7,6,6,5,5,5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,4,5,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,3,3,4,4,4,5,6,7,7,6,5,4,4,4,4,4,4,4,5,5,6,6,6,6,7,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,5,6,6,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,6,5,4,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,3,4,5,6,7,7,8,9,9,9,9,11,11,13,14,14,18,18,17,16,17,18,17,20,18,19,21,21,22,23,23,22,22,22,23,23,22,24,21,23,23,21,21,22,22,23,23,20,20,23,23,20,19,22,20],[28,28,28,28,28,28,28,28,28,27,26,26,27,26,26,26,26,27,26,26,27,26,26,27,26,27,27,27,27,27,26,27,27,28,26,27,27,27,28,27,27,27,26,26,26,25,25,24,25,24,24,24,23,22,20,22,20,19,18,19,16,13,11,8,7,5,4,4,4,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,6,5,5,6,6,5,5,5,4,5,5,4,4,5,4,4,4,4,5,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,3,4,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,5,5,4,5,5,5,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,2,3,3,2,2,3,3,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,4,4,4,4,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,2,3,3,3,3,3,4,4,4,5,5,6,8,9,10,12,14,16,13,14,16,17,15,17,18,17,18,18,20,21,20,21,21,22,21,23,21,19,22,21,19,21,21,23,22,22,22,25,24,26,24,25,26,26,26,27,26,26,26,25,25,26,26,25,26,26,26,26,25,26,24,25,24,24,24,24,25,24,23,25,24,22,23,23,22,21,20,19,19,18,15,14,13,12,11,8,6,5,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,6,6,6,6,6,5,5,5,4,4,4,4,5,5,6,6,5,6,5,5,5,4,5,4,4,4,4,4,3,3,3,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,5,6,6,6,6,5,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,5,5,5,5,5,5,6,6,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,2,2,2,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,3,4,4,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,4,4,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,4,5,6,6,7,9,8,8,9,10,11,12,15,15,18,18,16,15,17,17,16,18,18,18,20,19,21,23,23,21,21,22,23,22,22,23,21,21,22,20,20,22,22,21,22,21,20,20,23,19,17,20,19],[29,28,28,29,29,29,28,28,29,27,28,28,28,27,27,27,26,28,27,27,27,26,27,28,27,27,28,28,27,27,26,27,28,28,27,28,27,27,28,27,28,27,27,27,26,26,25,24,25,24,24,24,24,22,21,22,21,19,19,18,15,13,10,8,6,5,4,4,4,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,4,5,5,5,5,5,6,6,5,6,6,5,5,5,4,5,5,5,4,5,5,4,4,5,5,4,4,5,4,4,5,4,4,4,5,6,5,5,5,5,5,4,5,4,4,4,4,4,3,4,4,3,3,3,4,4,4,4,4,5,4,4,4,4,4,3,3,4,3,3,3,4,3,3,4,3,3,3,4,3,3,3,3,4,3,3,3,4,3,3,4,4,3,4,4,5,5,5,5,5,5,5,5,6,5,6,5,5,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,4,4,4,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,1,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,5,5,7,9,10,10,13,14,16,13,15,18,16,16,18,18,18,19,19,20,21,20,22,23,23,23,24,21,21,23,21,21,23,22,24,21,22,23,24,24,27,25,26,26,27,27,27,27,26,27,26,27,27,27,27,27,27,27,27,27,27,26,27,25,26,27,25,27,26,26,27,24,23,25,24,25,23,22,22,21,20,17,17,16,14,11,8,6,5,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,5,6,6,6,6,6,5,5,5,4,4,4,5,5,5,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,5,6,6,6,5,5,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,5,5,4,4,4,3,3,3,3,3,3,2,3,3,2,2,2,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,3,3,4,4,4,4,3,4,4,4,3,4,4,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,4,4,5,5,4,5,4,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,7,8,8,8,9,11,11,13,15,16,19,20,18,15,17,17,17,20,19,19,20,20,24,22,23,22,22,20,24,23,23,22,21,22,21,19,21,23,21,20,21,20,20,22,22,19,19,22,19],[28,28,28,28,28,28,28,28,28,27,26,26,27,26,26,27,26,27,27,27,27,27,27,28,27,27,28,27,28,26,26,27,28,28,27,28,27,28,28,27,28,27,26,27,27,26,26,25,25,24,23,23,23,22,22,21,20,20,19,18,15,14,10,8,7,5,4,4,4,3,3,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,7,6,6,7,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,6,5,5,5,5,4,4,5,5,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,6,6,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,4,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,3,2,2,2,3,3,3,3,3,4,4,4,5,5,7,8,9,10,13,15,15,13,15,17,16,16,18,18,17,18,19,20,21,21,22,21,23,22,23,20,20,22,20,20,22,22,22,21,23,24,25,25,25,25,26,27,27,27,27,27,26,27,27,27,27,27,27,27,27,27,27,26,27,26,26,26,26,26,25,27,25,24,26,24,23,24,24,22,22,21,21,20,18,15,17,13,12,11,7,6,5,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,6,6,6,6,7,7,7,7,6,6,5,5,5,4,5,5,5,6,7,5,6,6,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,5,6,5,5,4,3,3,3,3,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,5,6,7,7,6,5,4,4,4,4,4,4,4,5,5,6,6,6,6,7,7,6,6,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,6,6,6,6,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,4,4,5,5,4,4,4,4,4,4,3,4,3,3,3,3,3,3,4,4,3,4,3,4,4,5,4,4,5,5,4,5,4,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,6,8,9,8,9,9,11,10,12,14,14,18,18,18,16,17,17,17,19,18,19,20,20,22,22,22,22,22,22,23,22,22,23,21,22,22,20,21,22,22,22,22,21,21,22,21,20,18,22,19],[28,28,27,27,27,28,28,27,27,26,26,25,26,25,26,26,26,26,26,26,26,26,26,27,26,26,27,27,27,26,25,26,26,27,26,27,26,27,27,27,27,26,25,26,26,26,25,24,24,23,23,23,22,22,21,21,19,20,19,18,16,14,11,8,8,6,5,4,4,3,3,3,2,2,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,6,6,6,5,6,6,6,5,6,5,5,5,6,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,6,6,5,5,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,5,4,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,3,3,2,3,3,3,3,4,3,3,4,4,5,6,7,9,10,10,13,14,15,13,15,16,16,15,17,18,16,18,19,19,20,20,21,20,22,20,21,20,19,21,20,20,20,21,21,21,22,22,24,23,26,23,24,25,25,26,25,25,25,25,25,25,25,25,25,25,24,24,24,24,25,23,24,23,23,23,23,25,23,23,24,22,22,23,23,21,20,20,20,19,19,15,17,15,12,12,7,6,5,4,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,7,6,7,7,7,7,6,6,5,5,4,5,4,5,5,6,6,6,6,6,5,6,5,5,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,5,5,5,4,4,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,5,5,6,7,7,7,7,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,5,5,5,5,6,6,6,6,6,7,6,7,6,6,6,6,6,5,5,5,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,5,5,5,6,6,5,5,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,6,8,9,8,8,9,9,11,12,14,15,18,17,15,15,17,17,16,18,17,18,20,20,22,22,22,21,23,22,22,24,22,22,21,23,22,20,20,22,22,22,22,20,20,20,22,19,18,20,20],[28,28,28,28,28,28,28,28,28,26,26,26,27,26,27,26,26,27,26,27,26,25,26,27,26,26,27,27,27,27,26,27,27,28,26,27,27,27,28,27,27,26,26,26,26,25,24,23,25,23,23,24,23,22,20,22,20,19,19,18,15,13,11,8,7,6,5,4,4,3,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,5,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,5,5,6,9,9,10,12,14,16,13,14,17,16,15,17,18,17,18,18,19,21,19,21,21,21,21,23,20,19,22,21,20,20,21,23,21,22,23,24,24,26,24,25,26,26,26,27,26,26,26,26,26,26,26,26,26,26,25,25,25,26,24,26,24,24,25,24,25,24,24,25,23,22,23,22,22,21,20,20,19,18,15,15,14,12,11,8,6,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,5,5,5,4,4,4,4,4,4,5,6,4,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,3,3,3,4,5,5,4,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,5,5,5,6,7,7,6,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,6,6,6,5,5,5,5,5,4,5,4,4,4,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,5,5,4,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,4,5,6,6,7,8,8,8,8,10,10,12,14,15,18,19,15,14,16,18,14,18,17,17,19,19,21,21,22,21,22,20,23,22,21,22,21,21,21,18,20,21,21,18,21,19,19,20,21,18,16,19,18],[29,29,29,29,29,29,28,28,29,27,28,27,28,27,27,27,27,28,27,27,28,27,27,28,28,27,28,28,28,28,27,28,28,29,27,28,28,28,28,28,28,27,27,27,27,26,26,25,25,24,24,24,24,23,22,21,20,20,19,18,16,13,11,9,7,6,5,4,5,4,3,3,3,2,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,6,6,7,7,6,6,6,5,6,6,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,5,5,5,6,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,5,5,5,6,6,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,5,4,3,4,4,4,3,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,4,4,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,2,2,2,3,3,3,3,3,3,4,4,4,5,5,7,8,9,10,13,14,16,14,15,17,17,16,19,19,18,19,20,21,21,21,22,23,24,22,24,21,21,23,20,21,22,23,23,22,23,25,26,26,26,25,27,28,28,28,28,28,28,28,28,28,28,28,28,27,28,27,28,27,28,27,27,25,26,28,26,28,26,26,27,25,24,25,25,25,24,23,23,22,21,17,18,16,14,12,7,6,5,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,5,5,4,4,4,4,5,5,5,5,4,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,5,5,5,4,4,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,6,6,7,7,6,5,4,5,4,5,5,4,5,5,6,6,6,6,6,7,6,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,3,3,4,4,4,4,4,4,5,4,4,5,4,4,4,4,5,4,4,5,5,5,5,4,5,5,5,5,5,5,5,6,6,6,7,6,7,6,7,7,6,6,6,6,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,5,4,4,4,5,5,4,4,4,4,4,4,4,4,3,4,3,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,5,4,5,5,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,5,6,6,7,8,8,8,8,9,11,12,14,15,17,18,16,15,18,19,17,20,19,20,20,20,23,22,23,22,22,21,23,22,21,22,21,22,22,20,20,21,21,20,21,19,21,21,22,20,18,20,18],[28,28,27,28,28,28,28,27,28,26,25,26,27,26,26,26,26,26,26,26,26,26,26,27,26,26,26,27,26,26,26,27,27,27,26,27,26,26,27,26,27,26,26,26,26,25,25,24,25,23,24,23,22,22,20,20,19,19,18,17,15,13,11,8,7,6,5,5,5,4,3,3,3,3,3,4,4,4,4,4,4,4,5,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,7,7,8,8,7,7,7,7,7,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,6,7,6,6,6,6,6,6,5,6,5,5,5,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,7,7,7,7,7,7,7,7,8,8,8,7,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,5,5,5,5,5,5,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,4,5,5,5,4,3,4,3,4,4,4,4,4,5,4,4,5,5,5,5,6,5,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,7,8,9,10,12,13,14,12,13,15,15,14,16,16,16,16,17,19,19,18,21,20,20,19,21,20,18,20,19,19,20,20,20,20,21,22,24,22,25,23,24,24,25,25,26,25,25,26,26,26,26,26,26,26,25,25,25,25,25,24,24,24,23,24,23,25,22,22,24,22,21,23,22,20,20,20,20,19,19,16,17,15,13,12,7,6,5,4,4,3,3,3,3,3,3,3,4,3,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,7,6,6,5,5,4,4,5,5,6,7,6,6,6,5,6,5,5,5,4,4,3,3,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,5,5,5,5,5,4,4,3,3,3,2,3,2,3,3,3,3,3,4,3,3,4,4,3,4,4,4,3,4,4,4,4,4,5,4,5,5,5,4,5,5,6,6,7,8,8,7,6,6,6,5,6,6,6,6,6,7,7,8,7,8,9,8,8,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,6,6,5,6,5,5,6,6,6,6,7,7,7,8,7,8,7,8,7,7,7,7,7,6,6,5,5,4,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,5,5,5,4,4,5,4,4,5,4,4,4,3,3,3,4,3,3,4,4,3,4,4,3,3,4,4,4,5,5,5,5,6,6,5,5,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,4,3,4,4,4,5,5,5,5,6,6,5,5,5,6,5,4,5,5,4,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,3,4,5,6,7,7,8,9,9,9,9,10,11,12,12,13,16,17,16,14,17,17,15,19,16,19,20,20,22,22,22,21,21,21,23,24,22,23,20,22,22,19,20,21,21,20,21,18,20,20,21,19,17,19,19],[28,28,27,27,28,27,27,28,26,26,25,25,27,24,26,25,26,25,25,26,26,25,26,27,26,26,26,26,26,26,25,26,27,27,26,26,26,26,26,26,26,26,25,25,25,25,24,23,24,23,22,21,21,21,21,20,19,19,18,17,15,14,11,9,8,7,6,5,5,4,4,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,6,6,7,6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,7,7,6,6,7,7,7,6,7,7,6,6,7,7,6,7,7,6,6,7,6,6,7,7,7,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,5,6,5,6,6,6,6,6,6,6,6,6,5,6,5,5,6,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,6,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,7,7,7,6,7,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,5,6,6,5,4,4,4,4,4,5,5,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,3,3,3,4,4,3,4,4,4,4,4,5,6,6,8,10,10,11,13,13,14,14,14,16,15,15,17,17,16,17,18,18,19,19,20,20,21,20,22,20,18,20,19,18,20,20,21,20,21,22,24,24,26,23,24,24,24,24,25,24,24,25,24,24,25,25,25,24,24,24,23,24,24,23,23,22,23,23,23,24,23,22,24,22,22,22,22,21,20,20,19,18,18,14,15,13,12,12,8,6,6,5,4,4,4,3,3,3,3,3,4,4,4,4,5,5,5,5,6,7,6,6,7,7,7,8,7,7,6,5,5,5,5,4,5,6,6,7,7,7,7,6,6,6,5,5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,4,4,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,6,6,7,8,8,8,7,6,6,6,6,6,6,6,6,7,7,7,8,7,8,8,9,9,8,7,7,7,7,7,6,6,6,6,6,5,6,6,5,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,3,2,3,3,3,3,4,4,4,4,4,5,5,5,4,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,5,6,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,8,8,8,8,8,7,7,8,7,7,7,6,6,5,5,5,5,4,5,4,4,4,5,4,3,4,4,3,4,4,3,3,4,4,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,5,4,4,4,5,4,4,5,5,5,5,6,6,6,7,7,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,3,3,4,4,4,4,5,5,5,5,6,5,5,6,6,5,6,6,6,5,5,5,4,4,4,4,4,3,4,4,3,4,4,3,3,3,3,3,3,3,4,5,6,7,7,8,10,9,9,9,10,12,13,15,14,17,17,16,15,17,17,16,18,16,20,21,19,22,22,22,22,21,22,22,23,23,22,20,23,21,19,19,20,22,19,21,18,21,20,21,18,17,19,19],[28,29,28,28,28,28,29,28,28,27,26,26,27,26,27,26,27,27,26,27,26,25,27,27,26,27,27,27,28,27,26,27,28,29,27,28,28,28,28,27,28,27,26,27,27,26,26,24,26,25,24,23,24,22,22,21,21,20,19,19,16,14,12,9,8,7,6,6,5,4,4,4,3,3,4,4,4,4,4,4,4,4,5,4,5,5,5,6,6,6,6,6,6,6,7,6,6,6,7,7,6,7,7,7,7,8,8,8,7,9,9,8,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,6,7,7,7,6,7,6,6,6,6,6,5,6,6,5,5,5,6,6,6,7,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,7,7,7,7,7,7,7,7,7,7,8,7,7,7,6,7,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,4,5,5,5,5,5,5,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,5,5,5,5,4,4,4,4,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,2,2,3,3,3,4,4,4,3,4,4,4,4,5,6,6,8,9,10,11,14,14,16,13,14,17,16,15,17,18,17,17,19,20,20,21,21,22,22,22,24,20,20,22,20,19,20,22,22,20,23,23,25,25,27,25,26,27,27,27,27,27,27,27,27,27,26,27,27,26,27,26,26,26,27,26,26,24,25,25,25,26,25,26,26,23,23,23,23,22,22,21,20,19,19,16,15,14,13,12,8,7,6,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,6,5,6,6,6,7,6,6,6,6,6,5,5,4,4,5,6,6,6,5,6,5,5,5,4,4,4,4,4,4,3,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,6,6,5,6,5,4,4,3,3,3,2,3,2,2,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,8,8,8,7,7,6,6,5,6,6,6,6,6,7,7,8,7,8,9,8,8,7,7,7,7,7,6,6,6,5,6,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,6,6,6,6,6,6,6,7,8,7,8,8,8,8,8,7,7,8,7,7,6,6,6,5,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,4,4,4,4,3,4,4,4,3,4,4,4,4,4,5,4,5,5,5,5,6,5,5,5,6,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,4,4,5,5,5,5,5,6,5,5,5,5,5,5,4,5,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,5,6,7,7,8,9,9,9,9,10,11,13,13,15,18,18,14,14,17,17,15,18,18,17,20,19,21,20,21,21,21,20,22,22,21,21,20,22,21,19,19,21,19,20,21,20,20,20,22,20,16,19,19],[27,27,26,26,26,27,27,27,26,26,24,26,26,26,26,26,25,24,25,25,25,25,25,26,26,25,26,26,26,26,25,25,26,27,26,27,26,27,27,27,27,26,25,26,27,26,25,25,24,23,23,23,22,22,21,21,19,20,19,18,16,15,12,9,10,8,7,7,7,6,6,5,5,4,5,6,6,6,6,6,6,6,7,6,7,7,7,8,8,8,8,8,8,9,8,9,8,8,9,9,9,9,9,9,9,9,10,9,9,10,10,9,8,9,8,8,8,8,8,8,8,8,7,8,8,8,7,8,8,7,8,8,7,8,8,9,9,9,9,8,9,8,8,8,7,8,8,7,7,8,7,6,8,7,7,8,8,8,8,8,8,7,7,7,7,7,7,7,7,6,6,7,7,6,7,7,6,6,6,6,6,6,5,6,6,6,6,7,6,6,7,7,7,7,7,8,8,9,8,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,7,7,7,7,7,6,7,7,6,6,6,5,5,5,5,5,4,5,5,6,6,6,6,6,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,6,6,5,5,4,5,4,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,5,6,5,5,4,5,5,4,4,4,4,3,3,4,4,4,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,3,3,3,4,5,4,4,5,5,5,5,6,7,7,8,10,10,11,13,14,15,14,14,16,16,14,15,17,15,16,17,19,19,19,21,20,20,20,21,21,18,20,18,18,21,21,20,19,21,22,23,23,25,24,24,25,26,26,27,26,25,26,25,26,25,26,27,26,26,25,24,25,24,24,24,23,24,23,24,25,23,23,24,22,22,21,22,21,19,20,18,17,18,15,16,14,12,12,8,7,6,5,4,4,3,3,3,3,3,3,4,4,4,4,5,5,5,6,6,6,6,7,7,7,7,8,7,7,7,6,5,6,4,6,6,6,7,7,6,6,5,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,4,5,6,6,6,6,5,4,4,3,3,3,3,3,3,3,4,4,4,3,5,5,4,4,5,4,5,5,5,4,6,5,5,6,6,6,6,6,7,6,6,7,7,7,8,9,9,9,8,7,7,8,8,8,7,7,8,9,9,9,9,10,10,10,10,10,9,9,9,9,9,8,8,8,8,8,8,7,7,7,7,7,7,6,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,2,2,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,8,8,7,8,8,8,7,7,8,8,8,8,8,8,9,9,10,10,10,9,10,9,10,9,9,9,8,8,7,7,7,7,6,6,6,6,6,5,6,6,4,5,5,4,5,5,4,4,4,5,3,4,4,4,5,5,5,6,6,6,6,6,6,6,6,6,7,7,6,6,7,7,6,7,7,6,6,5,4,5,6,4,4,6,5,4,5,6,4,4,6,6,5,6,6,6,6,7,7,5,6,7,7,6,6,7,6,5,6,5,5,5,5,4,3,4,3,4,4,4,5,5,5,5,6,6,6,6,6,6,6,7,7,6,5,6,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,3,3,4,4,5,6,7,7,8,9,9,9,9,10,11,12,14,15,18,18,16,13,17,18,15,18,16,19,20,20,22,22,20,20,22,23,22,21,22,20,20,21,20,18,18,21,21,18,20,18,18,20,21,18,16,18,17],[29,29,29,29,29,29,29,28,29,28,27,27,28,27,27,27,27,27,27,27,27,26,27,27,27,27,28,28,28,27,27,28,28,29,28,29,28,29,29,28,29,28,27,28,28,28,27,26,26,26,25,25,25,23,22,23,22,22,20,20,17,14,12,9,9,7,6,6,6,5,5,4,4,4,5,5,5,5,6,5,5,6,6,6,6,6,7,7,7,7,8,8,8,8,8,8,7,8,9,8,9,8,9,9,9,9,9,9,9,10,10,9,8,9,8,8,8,8,8,7,8,9,8,8,8,8,7,8,8,8,8,8,7,8,8,8,8,9,8,8,8,7,8,8,8,7,8,8,7,7,8,7,7,7,8,8,7,8,8,7,8,7,7,7,7,6,7,7,7,6,7,6,7,6,7,7,6,6,7,6,7,6,6,7,6,6,6,7,6,6,6,7,6,7,7,8,8,8,8,8,8,8,8,9,9,9,9,8,8,8,8,7,7,7,7,6,6,7,7,6,6,6,6,5,6,6,5,5,5,5,4,5,6,5,6,6,6,6,7,6,6,5,5,5,5,5,5,5,4,5,5,4,5,5,5,6,7,7,6,5,5,5,4,4,5,5,4,6,5,5,5,6,6,6,7,7,7,7,6,6,6,6,5,6,5,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,2,2,3,3,3,4,4,4,4,4,4,4,5,6,6,7,9,11,11,12,15,16,14,14,17,16,15,17,18,18,20,21,21,22,22,22,23,24,23,24,22,21,22,20,20,21,23,23,21,24,24,25,27,27,26,28,27,28,28,27,28,27,27,27,27,27,27,28,28,26,27,26,27,27,26,26,24,26,26,26,27,25,26,26,23,24,25,24,23,23,21,22,21,20,18,17,16,14,12,9,7,6,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,6,6,6,6,8,8,7,7,6,6,6,4,5,5,5,6,6,7,6,6,6,5,5,5,5,5,4,4,4,3,3,3,3,2,2,2,2,1,2,2,2,2,3,2,2,3,3,3,3,4,4,4,5,6,6,5,7,6,4,4,3,4,3,4,4,3,3,4,4,4,4,4,4,4,5,5,4,5,5,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,7,8,9,8,8,7,6,6,6,6,7,7,7,7,8,9,9,8,9,10,9,9,9,8,8,8,8,7,7,7,6,7,6,6,6,6,6,5,5,5,5,5,5,4,4,5,4,4,4,4,3,3,3,3,3,2,2,2,3,3,3,3,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,5,6,6,5,6,6,6,6,6,7,7,7,7,7,7,8,7,7,7,8,8,8,9,8,9,9,9,9,9,8,8,8,8,8,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,3,4,4,4,4,4,5,5,5,5,6,5,6,5,5,5,5,5,5,6,6,5,6,5,5,5,4,4,4,4,4,4,5,4,4,4,5,4,4,5,5,4,5,5,6,6,6,6,5,5,6,5,5,5,5,4,4,4,4,4,4,4,4,3,4,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,6,6,7,7,8,9,9,10,10,11,11,13,14,15,19,19,16,15,18,18,17,18,18,19,20,20,22,23,21,21,21,21,22,23,21,22,21,22,21,19,19,21,20,20,22,20,19,21,22,19,17,20,19],[27,27,26,27,27,27,27,26,27,25,25,25,26,25,25,25,25,25,26,25,25,26,25,25,26,25,26,27,26,26,25,26,26,27,26,26,26,26,27,26,27,26,26,26,26,26,25,24,24,23,23,23,23,22,21,21,20,19,19,17,15,14,11,9,8,7,6,6,6,5,4,4,4,4,5,5,5,5,6,6,6,7,7,6,7,7,8,8,9,9,9,9,9,9,9,9,9,9,10,10,9,10,10,10,10,10,11,10,10,11,11,9,9,9,9,9,9,8,8,8,8,8,8,9,9,9,9,10,9,9,9,9,9,9,10,10,10,10,10,10,10,9,10,9,9,9,9,8,8,9,8,8,8,8,8,9,9,9,8,9,8,7,7,7,7,6,7,8,7,6,7,7,7,6,8,7,7,7,7,8,7,7,7,7,8,7,8,8,8,8,8,8,8,8,8,9,10,9,9,10,10,10,10,10,10,10,10,9,10,10,10,9,8,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,5,5,5,6,5,6,6,6,6,7,6,5,6,6,6,5,6,6,5,5,6,6,5,6,6,6,7,7,7,6,6,6,6,6,7,7,6,7,7,6,7,7,7,7,8,7,7,8,8,8,7,7,7,6,6,6,6,6,6,6,5,5,6,5,5,5,5,4,4,4,3,3,3,3,3,2,3,2,2,2,2,1,2,2,2,1,1,0,1,1,2,2,3,3,3,3,3,4,4,4,4,5,6,6,7,9,10,10,13,14,15,12,13,17,15,15,17,18,16,17,18,20,20,19,22,20,22,20,22,20,20,19,18,18,19,20,20,19,20,22,23,24,25,24,25,25,26,25,26,26,26,27,26,26,26,26,26,26,26,26,25,25,25,24,24,23,25,23,23,25,23,24,25,22,23,23,22,22,21,20,21,20,20,17,18,15,14,13,8,7,5,5,4,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,6,7,7,7,8,8,8,7,6,5,5,5,5,5,5,5,8,8,6,7,7,6,5,5,5,5,4,4,4,4,3,3,3,2,3,2,2,2,3,3,2,3,3,2,3,4,4,3,4,4,4,5,6,6,6,7,6,6,5,5,4,4,4,4,5,4,4,5,5,5,5,6,5,5,6,6,5,6,6,6,5,6,6,6,6,6,7,6,7,7,7,6,7,7,8,8,9,10,9,9,8,8,8,8,8,8,8,8,9,10,10,10,10,10,11,11,10,10,10,9,9,9,9,8,8,8,8,7,7,7,7,6,6,7,6,6,6,5,6,5,5,5,4,4,5,4,4,4,4,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,6,7,7,7,6,6,7,7,6,7,7,7,7,7,8,8,8,8,8,8,8,8,9,9,8,8,9,10,9,10,10,10,10,10,9,9,9,8,9,8,7,7,6,6,6,6,6,6,5,5,6,6,5,4,5,5,4,5,5,4,4,5,5,4,4,4,5,5,5,5,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,5,6,6,6,5,4,4,5,5,4,5,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,7,5,6,6,6,6,6,6,6,5,5,5,5,5,4,4,3,4,3,4,4,4,5,5,5,5,6,6,6,6,7,6,6,6,7,6,6,6,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,4,5,6,7,8,8,8,9,10,10,10,10,11,12,13,14,15,16,18,17,15,17,18,16,19,17,19,19,20,22,22,19,21,21,22,22,23,22,22,20,21,21,19,19,20,20,19,20,19,18,20,20,18,16,18,18],[29,29,28,28,28,28,28,28,28,27,27,26,28,26,27,26,27,27,27,27,27,27,28,28,27,27,28,27,28,28,27,28,28,29,28,28,28,28,29,28,29,28,28,28,28,28,27,26,26,25,25,25,25,24,24,24,22,22,21,19,17,16,13,11,10,8,7,6,6,6,6,5,5,5,6,6,6,6,7,7,7,7,7,7,8,9,8,9,10,10,10,10,10,11,10,10,11,11,11,11,12,11,11,11,11,11,11,12,11,12,11,11,11,11,11,10,10,10,11,10,10,10,10,10,10,11,10,11,11,10,11,11,10,11,11,11,11,11,10,11,11,10,11,11,10,10,11,10,10,10,10,9,9,9,10,10,10,10,11,9,9,8,9,8,9,8,9,9,8,8,8,9,9,8,9,9,9,9,9,9,9,9,9,9,9,9,9,10,8,9,9,9,9,9,10,10,11,11,10,11,11,11,11,11,12,12,11,10,10,10,11,10,9,10,10,9,9,9,9,8,8,9,8,7,7,8,7,6,7,7,5,6,6,7,6,8,8,8,8,8,7,7,7,7,7,7,7,7,6,7,7,6,7,7,8,8,8,8,8,7,7,7,6,7,7,7,7,8,8,7,8,8,8,8,9,8,8,8,8,9,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,5,6,4,4,4,4,3,3,4,3,2,3,3,2,2,3,3,2,1,1,0,1,1,2,3,3,4,3,3,4,5,4,5,6,7,7,8,10,11,11,14,16,16,14,16,18,17,16,18,18,18,18,20,21,20,21,23,21,22,21,23,21,20,21,20,19,21,21,22,22,23,24,26,25,26,25,25,26,27,26,27,27,27,27,27,27,26,27,27,26,26,26,26,26,26,26,26,24,26,25,25,26,24,24,26,24,24,24,24,23,23,22,22,20,19,16,18,16,14,13,8,8,5,5,4,3,3,3,3,4,3,4,5,5,5,6,7,6,7,7,7,8,9,9,8,9,10,11,10,9,9,8,8,6,5,6,7,8,8,9,9,8,7,8,8,7,6,6,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,7,8,8,9,9,8,7,6,6,6,5,6,5,6,5,6,6,6,6,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,7,8,8,9,10,10,10,10,9,9,9,9,9,9,9,9,10,11,11,11,11,11,13,12,12,11,11,11,10,11,10,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,6,5,4,5,5,4,5,4,5,5,6,6,5,6,7,6,6,6,6,6,7,7,7,6,7,6,6,7,6,6,7,7,6,7,7,7,7,7,8,7,7,8,8,8,8,8,9,9,10,9,9,10,10,9,10,10,10,10,10,11,10,11,11,11,11,11,10,10,10,10,9,9,8,8,7,7,7,6,6,6,6,6,6,6,5,5,6,5,4,6,6,4,4,6,6,4,5,6,6,6,6,6,7,7,7,7,7,7,7,7,6,7,7,6,6,7,7,6,6,6,6,5,5,5,5,5,4,5,6,5,5,6,6,5,5,6,6,6,7,7,7,7,8,8,6,7,8,7,7,6,6,6,6,5,5,5,5,5,4,3,4,4,4,5,5,6,6,6,6,7,7,7,8,8,8,8,7,9,8,7,7,7,6,6,7,7,6,7,7,6,6,6,6,6,7,7,7,6,7,7,9,9,10,10,12,12,12,13,12,14,15,16,17,18,20,19,19,19,20,19,21,21,20,21,23,22,24,24,23,23,24,24,25,24,25,25,23,25,25,23,23,24,25,24,24,23,22,23,23,22,21,22,22],[29,29,29,29,29,29,30,29,29,29,28,28,29,28,29,28,28,28,28,29,28,27,28,29,27,28,29,28,29,29,28,29,29,30,28,29,29,29,29,29,29,29,28,29,29,28,28,26,27,26,25,26,26,24,24,24,24,22,21,21,19,17,14,13,11,10,9,7,8,7,6,5,7,7,8,9,8,9,10,10,10,11,10,10,11,12,12,13,12,13,13,13,13,13,14,13,13,13,14,14,14,14,14,14,14,15,15,15,13,15,15,14,13,14,15,14,13,13,13,13,13,14,13,13,14,13,12,14,14,13,14,13,12,13,13,14,13,14,13,14,14,13,14,13,13,12,13,13,12,14,13,12,12,12,13,12,13,13,13,13,13,12,12,12,12,11,12,12,11,11,11,11,11,11,11,11,12,11,11,11,11,12,12,12,12,11,12,13,12,12,12,12,12,13,12,13,13,13,12,14,13,13,13,15,14,14,13,13,13,13,13,13,12,13,13,12,12,13,12,11,11,12,11,11,10,11,10,9,10,10,8,9,9,9,10,10,10,11,10,10,10,10,9,10,9,9,9,9,9,9,8,10,10,9,10,10,11,10,10,10,11,10,10,10,10,11,10,10,10,11,10,12,11,11,12,11,12,12,12,12,11,12,10,11,10,10,10,10,10,10,9,8,9,9,8,8,9,9,8,6,5,5,6,6,4,5,6,3,3,4,4,2,3,4,4,4,2,2,1,0,1,2,3,4,4,5,4,5,6,5,6,6,8,8,10,12,14,14,16,16,17,17,18,19,18,19,20,21,20,21,22,23,23,23,25,24,25,23,25,23,23,23,22,20,22,24,23,22,22,24,25,26,25,26,27,27,27,28,28,28,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,24,27,26,25,27,25,25,26,24,25,25,24,24,24,23,22,21,19,17,18,15,14,13,10,8,6,5,4,4,4,4,4,5,4,6,6,6,6,7,7,7,8,8,9,9,10,10,9,10,12,12,12,11,11,10,9,8,7,8,9,10,10,11,10,10,10,9,9,9,8,8,7,6,6,5,5,6,5,5,3,3,4,3,6,5,4,5,6,6,6,7,7,7,8,9,8,10,9,9,11,11,10,10,8,8,7,7,8,7,7,7,7,9,9,9,9,9,10,9,9,9,11,10,10,11,10,10,9,10,10,9,10,10,10,11,9,9,10,10,10,11,11,12,12,12,12,11,12,12,12,12,11,11,13,13,13,14,13,14,15,14,14,13,13,12,12,13,12,13,12,11,12,11,11,11,10,9,10,10,9,8,9,9,8,8,8,8,7,8,7,7,5,7,7,6,5,6,7,6,7,8,7,8,9,9,8,9,9,10,9,9,10,9,9,9,9,9,9,9,9,10,9,9,9,9,9,9,10,10,9,10,10,11,11,10,13,12,12,12,12,12,12,13,13,13,13,14,13,13,14,13,14,14,12,14,12,13,13,12,11,11,10,10,9,10,9,8,8,9,7,7,8,8,6,6,7,6,5,7,7,5,6,7,7,5,6,7,8,8,8,8,9,9,9,8,9,9,8,9,8,8,9,8,8,8,8,7,8,8,7,7,6,6,6,6,5,5,6,6,5,6,7,6,6,8,8,8,9,9,8,8,9,10,8,8,8,8,7,7,8,7,7,7,6,5,5,5,5,4,5,5,6,6,6,7,7,7,7,8,8,9,9,9,9,9,10,10,9,9,9,8,9,9,8,9,9,9,8,9,9,8,8,8,9,8,9,8,10,8,10,10,12,12,13,13,13,13,13,16,16,17,19,19,22,23,22,19,21,21,21,22,22,23,24,23,25,25,25,25,25,24,27,25,25,24,25,25,25,21,23,26,25,23,25,24,23,25,26,23,22,25,23],[29,29,28,29,29,29,29,29,29,28,28,28,28,27,28,28,28,28,28,29,28,28,28,29,28,28,29,29,29,29,28,29,29,29,28,29,29,29,29,29,29,29,28,29,29,28,28,27,28,26,26,26,26,25,25,25,24,23,22,22,19,17,15,14,12,11,9,9,9,9,7,7,7,8,10,11,10,11,13,12,12,13,13,12,13,14,14,15,16,15,16,15,16,16,16,16,15,16,17,16,16,17,16,16,16,16,16,16,15,16,16,15,14,16,15,15,15,14,15,15,15,14,14,15,15,15,14,15,15,15,16,16,15,15,15,16,15,16,16,17,17,16,17,17,16,17,16,15,14,16,15,15,14,14,14,14,15,15,14,15,14,13,14,13,13,13,14,14,13,13,13,14,13,13,14,14,12,13,13,13,13,13,14,14,14,13,14,15,14,13,14,15,15,16,15,16,16,16,16,17,16,16,17,17,17,16,17,17,16,16,16,17,15,16,16,15,16,16,15,13,13,14,13,12,13,13,11,12,13,12,10,10,11,12,10,13,13,13,12,12,13,11,12,12,12,10,12,11,11,11,10,10,10,12,11,12,12,12,12,12,11,12,11,11,13,12,11,13,13,12,13,14,14,13,14,13,14,15,15,15,14,13,13,13,13,12,11,11,11,10,11,12,11,10,10,11,10,10,9,9,7,6,8,6,5,6,6,4,4,5,5,3,4,5,5,5,3,3,2,1,0,1,3,4,5,4,4,6,7,5,6,7,8,9,12,13,14,16,16,19,19,18,18,21,19,19,21,21,20,21,22,24,23,24,26,25,25,24,26,24,24,25,22,22,24,23,24,23,24,25,26,26,27,27,27,29,29,28,29,29,29,29,29,29,28,28,29,29,28,28,28,27,27,27,27,26,27,26,26,27,26,25,27,24,24,26,24,25,23,22,22,20,19,17,17,15,14,14,10,9,8,6,5,6,6,6,5,6,6,7,8,7,8,9,9,9,9,9,10,10,11,12,12,13,14,13,13,12,12,10,9,10,8,9,11,10,13,14,11,12,11,10,10,10,9,9,9,8,8,7,6,7,6,6,5,6,5,5,7,6,7,7,8,8,8,8,9,8,9,9,9,11,10,11,11,11,12,10,8,10,9,9,9,7,11,9,9,10,10,10,10,11,12,11,11,11,12,11,11,12,11,12,11,12,12,11,13,11,12,13,13,11,12,13,12,14,14,14,14,14,13,15,14,14,15,15,14,15,16,16,17,16,17,16,17,17,17,17,16,16,16,16,17,15,15,15,15,14,14,14,13,13,14,13,12,12,12,11,11,10,10,10,8,10,9,8,8,7,8,8,6,7,7,8,9,10,8,10,10,11,11,11,11,12,11,11,11,11,12,12,11,12,12,11,12,12,11,12,12,13,11,13,12,12,11,13,13,13,13,13,15,14,15,15,13,15,15,15,16,15,15,15,15,15,16,15,16,16,15,16,15,15,14,15,13,13,13,12,12,12,11,11,11,11,9,9,11,11,7,9,10,8,7,10,10,8,8,10,9,7,8,10,11,10,10,10,12,11,12,12,12,12,12,12,11,11,12,12,12,11,11,9,10,10,9,8,7,7,8,9,8,8,9,8,8,8,9,8,9,10,9,9,10,10,11,12,11,11,9,12,11,11,12,10,10,9,8,8,8,8,9,6,6,5,7,7,7,8,8,8,8,8,9,9,11,11,11,13,11,11,11,12,12,11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,11,11,10,9,11,11,12,13,13,13,14,15,14,15,15,16,18,19,19,19,22,23,22,20,22,22,21,23,22,23,24,24,25,25,24,24,25,25,25,26,26,25,24,25,26,23,24,25,26,24,25,24,23,24,24,22,22,24,23],[29,29,29,29,29,29,29,29,29,28,28,28,29,28,29,28,29,28,28,29,28,28,29,29,28,28,29,28,29,29,28,29,29,30,29,29,29,29,30,29,30,29,29,29,29,29,28,28,28,27,25,26,26,25,24,25,23,23,22,22,19,18,16,13,12,10,8,7,7,6,7,6,6,6,8,8,9,9,10,9,9,10,11,9,10,12,11,12,14,13,14,15,15,14,15,16,14,15,16,16,15,16,16,16,16,16,16,16,15,16,15,15,15,15,14,15,15,14,14,14,15,14,14,15,15,14,14,16,15,14,16,16,14,16,16,16,16,17,16,16,17,16,17,17,15,16,15,14,12,14,14,12,12,13,14,13,15,14,13,13,13,12,12,13,13,10,12,13,11,12,12,13,12,12,13,13,12,12,14,13,12,11,12,14,13,12,14,16,13,13,14,14,14,15,15,16,16,16,16,16,16,16,17,17,17,16,16,16,15,14,15,16,14,16,16,14,12,15,14,11,11,13,11,10,10,11,11,9,10,11,8,9,10,10,11,11,12,11,12,12,11,10,11,12,11,11,11,11,9,11,10,11,11,12,12,12,13,12,12,11,12,11,11,12,12,11,11,12,12,11,12,13,12,12,14,13,14,14,13,13,12,11,10,10,10,10,10,9,10,10,9,10,10,10,9,10,10,9,8,6,5,6,7,6,5,5,7,6,5,6,6,6,6,7,7,7,6,4,3,3,3,0,1,4,3,3,3,4,5,5,4,7,8,7,10,12,13,16,17,19,19,19,19,21,20,20,22,21,20,22,23,23,23,24,26,25,26,25,26,25,24,25,23,21,24,24,24,24,25,26,27,26,27,27,28,28,28,28,29,28,28,29,29,28,28,29,28,28,27,28,28,28,27,27,27,25,27,27,26,26,25,25,27,24,24,25,24,23,22,21,21,19,18,17,16,14,13,13,9,9,6,6,4,4,8,7,9,7,7,7,8,7,7,9,9,9,10,10,11,11,13,13,12,13,14,14,14,13,12,12,12,11,9,9,11,10,12,13,13,11,11,10,11,9,8,7,8,7,7,6,6,6,6,6,7,6,7,7,8,8,8,8,9,10,10,12,11,11,12,12,12,13,13,13,13,14,13,13,12,12,12,11,13,9,11,9,12,12,12,12,13,12,12,13,12,11,13,12,12,12,12,13,11,11,13,11,11,11,13,12,11,10,11,12,12,14,13,14,14,14,13,13,13,12,13,14,12,12,16,16,16,17,15,16,16,16,17,16,15,16,15,15,15,15,13,12,14,12,11,12,11,10,11,11,11,9,10,11,9,8,10,9,7,7,9,7,8,7,9,8,8,9,9,10,11,11,9,11,13,11,11,12,12,11,12,12,12,11,12,11,11,12,11,12,11,11,11,11,11,11,10,11,11,11,9,11,11,11,11,11,13,12,13,14,12,12,12,12,14,14,14,14,14,14,14,15,16,14,15,15,13,13,14,13,13,11,11,10,9,9,10,9,9,10,8,7,9,9,6,6,8,7,7,7,9,7,9,9,8,9,10,9,10,12,10,10,12,13,12,12,13,13,12,11,11,11,12,10,11,11,10,8,10,9,7,7,7,6,7,7,6,7,8,8,7,8,8,8,10,10,9,9,12,11,11,13,11,13,9,11,11,11,11,8,9,8,7,8,7,7,8,5,6,8,5,7,6,6,7,7,7,7,8,10,11,12,13,14,13,12,11,13,13,13,12,13,12,13,13,13,12,13,13,12,13,12,13,13,13,12,13,12,13,13,13,14,15,14,16,17,16,16,17,18,20,20,21,22,23,23,23,22,24,23,23,25,24,24,26,23,27,26,26,26,26,26,27,27,27,27,27,27,27,25,26,26,27,25,26,25,24,25,26,23,23,25,24],[29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,28,28,28,27,29,28,27,29,29,28,28,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,28,28,29,28,28,27,27,25,25,26,25,24,23,25,23,22,22,21,20,18,15,12,10,8,7,6,6,5,5,4,5,6,7,6,7,8,9,8,9,9,9,9,9,9,10,10,11,12,11,12,12,12,12,13,14,13,14,13,14,14,13,14,14,13,13,14,14,13,13,13,12,13,12,13,14,13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,12,14,13,13,14,14,12,13,13,12,13,14,12,12,13,13,11,11,12,11,10,11,11,11,12,12,12,11,11,9,9,11,10,9,11,11,10,9,11,11,10,11,11,11,10,12,11,12,11,11,11,11,12,11,12,12,11,11,13,12,11,14,13,13,13,13,12,13,14,13,13,14,14,13,12,12,12,12,13,13,11,13,13,11,10,11,11,10,10,11,10,9,9,10,9,9,9,9,7,8,9,9,8,9,10,11,9,11,10,8,9,11,10,9,10,11,8,9,10,9,9,10,9,11,11,10,10,9,8,10,9,9,9,10,9,9,10,10,9,11,10,10,11,11,11,11,10,11,11,10,9,8,9,8,9,9,9,9,8,9,9,8,7,7,7,8,7,6,5,4,6,5,3,4,5,4,3,4,5,5,4,6,6,6,5,4,3,2,2,1,0,1,1,2,2,2,3,4,4,5,5,6,9,10,13,14,15,16,17,17,17,19,18,17,18,19,19,18,22,22,21,23,24,22,25,23,25,22,22,24,22,22,23,23,24,23,24,25,27,26,28,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,26,27,26,27,27,26,27,26,26,26,25,27,25,25,26,24,24,25,23,23,22,22,21,19,18,16,16,15,13,11,9,8,6,5,4,4,3,4,4,5,5,6,8,8,7,8,8,10,10,9,10,10,11,12,11,13,13,15,14,11,12,10,10,9,9,9,10,10,11,12,10,10,10,9,10,9,8,9,8,7,6,7,6,5,5,5,5,5,5,5,6,7,6,7,8,8,9,10,10,10,11,10,10,11,11,12,12,13,11,11,10,10,9,9,9,7,8,7,9,9,10,10,10,9,9,10,9,9,9,8,9,9,9,8,8,9,9,8,8,8,9,8,8,8,8,9,9,10,11,12,11,11,11,10,10,9,10,11,10,10,12,12,13,14,13,12,13,13,13,13,13,12,12,12,11,11,10,10,10,9,9,9,8,8,8,8,8,7,8,8,6,6,7,7,6,6,6,7,6,6,6,5,5,6,7,7,9,9,7,9,10,9,9,9,8,9,9,9,9,8,9,8,7,9,8,8,7,8,8,8,8,8,7,8,7,8,7,8,8,9,9,8,10,10,11,10,9,11,11,11,11,12,12,12,12,12,12,13,13,13,12,13,11,11,11,11,11,10,9,8,8,8,8,6,7,7,5,5,6,6,4,5,6,6,5,6,7,5,5,7,7,5,6,8,8,9,8,8,9,9,9,9,9,9,8,9,8,7,8,8,8,8,7,7,7,7,6,4,4,4,4,4,4,4,5,5,5,6,8,6,7,9,8,8,9,9,9,9,9,9,8,8,8,9,8,8,8,8,6,6,6,5,4,4,4,4,4,4,6,7,6,7,7,7,8,9,9,9,10,10,9,9,9,10,10,10,10,10,10,9,10,10,9,9,9,10,9,9,10,10,10,9,10,10,10,10,12,12,13,13,14,15,15,16,16,18,19,20,21,20,23,23,22,21,23,22,22,25,23,25,26,24,26,25,26,26,25,26,27,26,26,26,25,26,26,24,25,27,26,26,27,25,25,25,26,24,24,26,26],[29,29,29,29,29,30,29,29,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,28,28,28,28,29,28,29,28,28,28,28,28,27,25,26,25,25,25,25,24,23,23,23,21,21,20,18,17,14,11,10,9,6,5,5,4,5,4,5,6,7,6,6,9,8,8,9,9,9,8,9,10,9,10,11,11,11,12,11,12,12,12,13,13,13,13,14,13,13,13,14,13,13,14,13,14,14,14,13,14,13,12,13,13,12,13,12,13,12,12,13,13,13,13,13,13,13,13,12,12,12,14,12,14,12,13,13,12,12,13,12,12,12,12,11,12,12,10,10,11,12,11,12,11,12,11,10,9,9,10,10,9,10,12,10,10,10,11,10,11,11,11,11,10,11,11,11,12,11,11,11,11,11,12,11,11,12,11,11,13,12,13,13,13,12,13,13,12,13,14,14,14,12,12,11,11,12,12,11,12,12,11,11,11,11,10,10,11,10,10,9,10,10,8,9,9,8,8,9,8,9,10,10,10,10,10,10,10,9,10,10,10,9,10,10,9,9,9,10,10,10,11,11,11,10,10,11,9,10,9,10,10,10,10,10,10,10,11,10,10,10,11,12,11,10,10,10,10,10,9,8,9,9,8,8,8,8,8,8,8,8,8,8,8,7,6,5,4,6,5,4,4,5,5,4,5,5,4,5,6,6,6,5,5,4,3,4,2,1,0,1,1,1,1,2,3,3,4,4,6,8,10,13,14,14,16,16,16,17,17,17,17,18,18,18,20,20,21,22,22,23,24,23,23,24,23,24,24,22,23,24,23,24,23,24,26,26,25,27,27,27,28,28,27,28,28,28,28,28,28,27,28,28,28,27,27,27,27,27,26,27,25,26,26,26,27,25,25,26,23,24,25,23,23,22,20,20,19,17,15,14,16,13,11,9,7,6,5,4,4,4,4,5,5,6,7,8,7,7,8,9,9,10,11,10,11,12,12,12,13,13,14,14,13,12,12,11,10,10,10,11,10,12,14,12,12,10,10,9,9,8,8,8,7,7,7,6,6,6,5,5,5,5,5,6,6,6,7,7,7,8,9,9,9,10,10,10,10,11,11,11,11,12,11,10,9,9,9,9,8,9,8,9,9,9,9,9,10,10,9,9,8,10,9,8,9,9,9,9,10,9,8,9,9,8,8,9,8,8,8,9,9,11,11,11,12,10,10,10,10,10,11,10,10,12,13,12,12,14,13,13,12,13,12,12,11,12,10,11,10,10,9,9,8,8,9,8,8,8,8,7,7,8,7,7,6,7,7,6,6,6,6,6,5,6,5,5,6,7,7,7,7,7,7,8,8,8,8,8,8,8,8,9,7,8,8,8,8,7,8,8,9,8,8,8,7,8,7,7,9,6,7,8,8,8,9,9,8,10,10,9,10,10,10,11,11,11,11,11,12,12,12,12,12,12,12,11,10,10,10,10,9,8,8,7,6,7,6,6,6,6,5,6,6,5,5,6,6,5,5,7,5,5,6,6,5,7,8,8,7,8,7,9,8,8,8,8,8,8,9,8,7,8,8,8,8,7,7,7,6,5,4,3,4,5,5,4,5,5,6,4,5,8,6,6,7,7,8,8,8,9,9,8,9,8,7,8,9,9,7,7,7,5,6,6,5,4,4,5,4,4,5,6,7,6,7,8,6,8,8,8,9,10,9,9,9,9,10,9,10,9,9,9,8,8,9,10,9,9,9,10,8,9,11,9,9,10,10,11,10,12,12,13,13,14,16,15,15,16,17,18,19,21,20,22,22,22,21,22,22,23,25,23,24,25,24,26,25,26,25,25,25,26,25,25,26,25,25,26,23,24,25,25,24,26,25,25,26,27,24,24,26,24],[29,29,29,29,30,30,29,29,29,29,28,28,29,28,29,28,29,29,28,29,29,28,29,29,28,29,30,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,28,28,29,28,27,26,27,25,25,25,25,24,23,24,22,21,21,21,18,16,13,10,8,7,6,5,5,4,4,4,4,4,6,6,7,7,8,7,8,9,9,9,9,10,10,10,11,11,10,12,11,11,12,12,12,12,12,12,13,12,13,13,14,13,15,14,13,13,14,13,12,13,11,13,13,12,12,13,13,11,11,12,13,13,12,14,12,12,13,12,12,12,12,14,13,13,13,13,13,12,12,13,12,11,12,11,11,11,11,10,10,9,11,11,11,11,11,9,10,8,8,9,9,9,8,10,9,8,9,10,9,9,10,11,9,10,11,10,11,10,10,11,11,10,11,11,12,10,12,11,11,12,12,14,14,13,12,13,14,13,13,14,14,14,12,12,12,13,12,12,12,12,12,12,11,10,11,10,10,11,11,8,8,10,8,7,8,8,7,7,8,8,9,9,9,10,10,10,9,9,9,10,9,9,9,8,8,9,9,10,9,9,9,11,11,10,10,9,9,9,9,9,10,9,9,9,12,9,9,10,11,10,10,11,12,11,11,11,11,11,10,8,9,9,8,8,8,8,8,8,7,7,7,8,7,7,5,5,5,4,4,4,4,4,4,4,4,5,5,4,6,7,6,6,6,5,4,3,3,3,1,1,0,1,1,1,2,2,3,4,5,6,8,9,11,14,14,15,16,16,16,18,17,16,18,18,18,20,20,21,22,22,23,22,24,23,24,22,22,23,23,21,23,24,24,23,24,25,25,26,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,27,27,27,27,27,26,27,26,26,27,25,26,25,24,26,23,24,24,23,23,23,21,21,20,18,16,16,15,13,11,9,8,5,4,3,4,3,3,4,5,5,6,6,6,7,7,7,8,8,8,9,9,11,11,11,11,13,13,13,11,11,10,10,9,9,9,10,9,12,14,10,11,10,9,9,8,8,7,8,7,7,6,6,6,5,5,4,5,4,5,5,6,6,6,6,7,7,8,7,8,8,8,9,10,10,12,11,11,11,10,9,9,8,8,8,8,8,7,8,8,8,8,8,9,9,8,8,9,10,8,8,8,9,9,9,10,9,8,9,10,8,9,8,7,7,9,9,10,11,11,11,12,10,10,10,11,11,11,10,11,12,12,13,13,13,12,13,12,13,13,11,11,11,10,11,10,10,10,10,9,8,9,8,9,8,8,7,8,7,7,6,6,7,7,6,5,6,6,4,5,6,5,5,6,6,7,6,7,6,7,7,8,8,7,8,9,7,7,8,8,10,9,8,8,9,8,8,8,9,7,8,8,8,8,7,8,8,8,8,8,8,8,9,7,9,9,8,10,9,8,10,10,11,10,11,11,11,12,12,11,11,11,11,11,10,10,9,8,8,8,6,6,7,6,7,7,6,5,6,6,5,5,6,6,5,5,7,5,5,6,6,6,6,8,7,7,8,8,8,8,9,7,7,8,8,9,7,8,8,8,7,8,7,6,7,6,5,4,3,3,5,5,4,4,5,5,5,6,7,6,6,7,7,7,7,8,8,8,8,8,6,7,8,8,7,7,7,6,6,6,6,5,4,5,4,3,4,5,6,6,5,6,7,7,7,7,8,7,9,9,8,10,9,10,8,8,8,8,8,7,8,7,8,8,8,8,8,7,8,9,8,8,9,9,10,8,11,12,13,13,14,17,15,15,15,18,18,18,21,21,23,23,23,22,23,23,22,26,23,25,25,24,26,26,26,26,26,26,27,26,26,27,25,26,27,24,25,26,26,25,27,26,26,26,27,25,25,27,25],[29,28,28,28,29,29,29,29,29,28,27,26,27,27,27,27,27,28,27,28,28,27,28,28,27,28,28,28,28,28,27,28,29,29,28,29,28,28,29,28,29,27,28,27,28,27,26,24,26,25,24,24,24,23,22,22,22,20,20,20,17,16,14,10,9,7,6,5,5,4,5,5,5,5,6,6,6,6,8,8,8,7,8,8,8,9,9,10,10,10,10,11,10,10,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,12,11,11,12,10,10,12,12,11,11,12,11,11,13,11,11,12,12,13,11,13,11,12,12,11,11,12,10,11,11,10,10,10,10,9,9,9,10,10,10,10,10,10,9,8,8,10,9,8,8,9,9,8,9,9,8,8,9,9,8,9,10,10,10,8,9,10,9,9,10,11,9,9,12,11,10,11,11,12,12,13,12,12,13,13,12,12,12,12,12,11,11,10,12,11,9,12,12,10,10,10,9,9,9,9,8,8,8,8,8,8,7,7,6,6,8,8,8,7,8,8,8,9,7,8,7,8,8,8,8,8,7,7,8,7,7,8,8,9,10,9,9,8,7,8,8,7,8,8,8,8,9,8,9,9,10,9,9,10,10,10,10,10,9,9,9,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,5,5,4,4,4,4,4,5,3,4,4,5,4,5,5,5,5,5,4,4,3,3,3,1,1,1,0,1,1,1,2,2,3,4,5,7,10,12,13,13,15,15,15,16,16,16,15,16,16,16,17,19,19,19,19,22,21,22,20,23,21,21,22,20,21,22,23,24,22,23,24,26,26,27,26,27,27,28,27,28,27,28,28,28,27,28,28,28,28,27,27,26,27,27,25,26,24,25,25,23,25,24,23,25,22,23,23,22,22,20,20,19,18,17,14,15,13,12,11,8,7,5,4,3,3,3,4,4,5,6,6,7,7,7,8,8,8,9,9,9,9,10,11,9,11,12,14,13,11,11,10,9,9,8,9,9,9,11,12,10,10,10,8,9,8,7,8,7,6,6,6,6,5,5,5,5,5,4,4,5,6,6,7,7,7,7,7,8,8,8,8,8,9,10,10,10,10,10,9,9,8,8,7,6,7,6,6,6,7,7,7,7,7,8,7,7,7,7,7,8,7,8,8,8,8,8,7,8,8,8,8,8,7,8,9,8,9,11,10,11,10,9,10,10,9,10,10,9,10,11,12,12,12,13,11,12,13,13,12,11,11,11,10,10,10,11,10,9,9,9,9,8,8,8,8,7,7,7,7,6,5,6,6,6,5,5,5,5,5,5,5,4,5,5,6,6,7,6,7,6,7,7,7,7,8,8,7,8,7,8,8,7,8,8,8,7,7,7,7,8,8,7,8,7,8,7,7,8,8,8,8,9,8,9,9,8,9,9,9,10,10,10,10,10,10,11,11,11,11,11,11,10,10,10,10,9,8,7,7,6,6,6,6,6,7,6,5,5,6,5,5,5,5,5,5,6,5,5,6,7,5,6,7,7,7,8,8,8,9,8,8,8,8,7,8,8,8,8,8,7,7,7,5,7,6,5,4,3,3,4,4,4,4,5,4,4,5,7,5,7,8,7,7,8,8,8,8,8,9,7,6,7,7,7,6,7,6,5,6,5,5,3,3,4,3,4,5,5,6,6,6,8,7,7,8,8,8,9,9,9,9,9,10,9,8,9,8,8,8,8,8,8,8,8,8,8,7,8,8,8,8,8,8,8,8,10,11,12,12,13,14,14,14,15,16,18,18,19,20,22,22,22,20,22,21,20,24,22,23,25,25,25,25,26,24,26,24,26,26,25,26,25,26,26,24,24,26,26,23,26,24,24,25,26,23,23,26,24],[29,29,28,29,29,29,29,29,29,28,28,27,28,27,27,28,28,28,27,28,27,26,27,28,27,27,28,27,27,28,27,28,28,29,27,28,28,28,29,28,29,28,28,27,27,27,26,25,26,25,24,24,24,24,23,23,21,20,20,19,18,16,14,10,8,6,5,4,4,3,4,4,4,4,5,5,6,6,7,7,7,7,8,7,8,9,8,10,9,9,10,10,10,10,10,10,11,11,11,10,11,11,11,11,11,11,12,12,11,12,12,11,11,11,11,11,11,10,11,10,11,10,10,10,11,11,10,11,11,11,10,11,11,10,11,12,12,12,11,11,12,11,11,11,11,11,10,10,9,10,9,9,9,9,10,10,10,10,9,10,10,8,8,9,9,8,9,9,9,8,9,9,9,8,9,9,9,9,9,9,10,8,9,9,10,9,9,9,9,9,9,10,9,10,10,11,11,12,11,12,12,12,12,12,11,11,11,10,10,10,10,10,10,10,10,9,9,9,9,8,9,8,8,8,8,7,7,7,8,7,6,6,7,6,8,8,7,8,8,8,8,7,7,8,7,6,7,8,7,7,7,7,7,8,8,9,10,9,9,8,7,7,7,7,8,7,7,8,8,7,8,8,9,8,9,9,9,9,9,8,9,8,7,7,7,7,7,7,7,6,7,6,7,6,6,6,6,6,6,5,4,4,5,4,3,3,5,3,3,5,5,4,5,5,4,5,5,4,4,3,3,2,1,1,1,1,0,1,1,1,2,2,3,4,5,7,9,11,14,16,16,14,15,16,16,15,17,16,18,18,19,19,20,21,22,22,23,22,24,22,22,23,22,21,22,22,24,22,23,25,26,26,26,26,27,28,28,28,29,29,29,28,29,29,28,28,28,28,27,28,27,27,27,26,27,24,26,26,25,26,24,24,26,22,23,24,21,22,21,19,19,18,16,15,15,13,12,9,8,6,4,3,2,2,3,4,3,5,5,5,6,5,6,7,7,6,8,8,8,9,10,10,9,11,11,11,11,11,10,9,9,8,8,8,9,8,11,11,10,9,8,8,8,7,7,6,6,6,5,5,5,5,5,5,4,4,4,5,5,5,5,6,7,6,7,7,8,8,7,7,8,9,8,10,10,10,9,9,8,8,8,7,6,6,7,6,6,7,7,7,7,8,7,7,7,7,7,7,6,8,7,7,7,7,8,6,7,7,7,7,7,6,6,7,7,8,9,10,10,9,9,9,8,8,9,9,8,8,10,10,10,10,11,11,11,10,10,11,10,10,10,9,9,9,9,8,8,8,8,7,7,7,7,7,6,6,6,7,5,5,6,6,5,5,5,4,5,5,5,4,5,6,5,5,7,6,6,6,7,7,6,6,6,7,7,6,7,6,7,6,6,7,7,6,6,6,6,6,6,6,5,6,6,6,5,6,6,7,7,7,8,8,9,9,8,9,9,9,10,9,10,9,9,10,10,10,10,10,10,10,9,9,9,9,9,8,7,7,6,5,6,5,6,5,4,4,5,5,4,4,4,4,4,4,5,4,5,5,5,4,5,6,6,6,6,6,7,7,7,7,6,7,6,7,5,5,6,5,5,5,4,4,4,4,3,3,2,3,3,3,2,3,3,4,3,4,5,4,5,6,5,5,6,6,6,6,6,6,5,5,5,6,6,4,5,5,4,4,4,4,3,2,3,3,3,4,5,5,5,5,4,5,5,6,6,6,7,7,7,7,8,8,8,7,7,7,7,7,7,7,8,7,7,8,8,6,7,8,8,7,7,7,8,8,10,10,12,12,13,14,13,13,14,15,17,17,19,19,21,21,21,20,21,20,20,24,21,23,24,22,25,24,25,24,24,24,26,26,25,25,24,25,24,22,24,25,25,22,25,23,22,24,25,22,21,24,23],[29,29,29,29,29,30,29,29,29,29,29,28,29,28,28,28,28,29,28,29,29,28,28,29,28,29,29,29,29,29,27,29,29,29,29,29,29,29,29,29,29,28,28,28,28,27,27,26,26,25,25,24,24,24,22,23,22,21,21,21,18,15,12,8,8,6,5,5,4,4,4,4,5,5,5,5,6,8,8,6,7,8,7,7,8,8,9,10,10,9,10,10,10,11,10,11,11,12,11,11,12,12,12,12,12,12,12,13,12,13,13,12,11,11,11,11,11,11,11,12,12,12,11,11,12,11,11,12,12,12,12,12,11,11,12,13,12,12,12,11,12,11,11,12,11,10,11,11,9,10,10,10,10,10,10,10,10,10,10,10,9,7,9,9,9,8,9,10,9,9,9,10,10,10,10,10,10,9,10,10,10,10,10,10,10,11,10,11,11,10,11,10,11,11,11,11,12,13,12,13,13,13,12,13,13,12,11,11,11,11,11,11,10,11,11,10,10,9,10,9,9,9,9,8,8,9,9,8,8,9,7,7,8,8,9,9,8,9,9,9,9,9,8,9,9,8,8,9,9,9,8,9,9,9,9,10,11,10,10,9,9,9,9,9,9,9,9,9,10,9,9,10,10,9,10,10,11,10,10,10,10,9,9,7,8,8,7,7,7,7,7,7,7,8,7,8,7,7,7,5,5,4,5,5,4,4,6,4,4,6,6,5,5,6,6,6,5,4,4,3,3,3,2,1,1,1,1,0,1,1,2,2,4,5,6,7,8,11,11,15,16,13,13,18,17,14,18,17,17,18,19,19,20,21,22,23,23,22,24,23,22,23,22,20,22,22,24,23,24,25,26,25,28,26,27,27,27,27,28,28,28,28,28,28,28,28,27,27,27,27,27,26,27,26,27,25,25,26,24,26,24,24,26,23,23,24,22,22,22,20,20,18,17,16,15,15,11,9,8,6,4,4,3,2,3,4,4,5,5,6,6,6,6,7,7,7,8,8,8,9,11,10,11,11,12,12,13,11,12,10,10,9,8,8,10,9,11,12,10,10,9,9,8,7,7,6,7,6,6,5,5,5,4,5,4,5,4,5,6,6,6,7,7,6,7,8,8,8,8,8,9,10,10,11,11,10,10,10,9,8,9,8,8,8,8,8,8,8,9,9,8,9,9,9,8,8,10,8,8,9,8,8,8,8,7,7,8,8,8,8,7,7,7,8,8,9,10,10,11,11,9,9,8,9,9,10,9,10,10,11,10,11,11,11,11,11,11,11,10,9,9,9,9,8,8,8,8,7,7,8,7,7,7,7,5,6,7,7,6,6,7,6,5,5,7,6,5,7,7,5,6,7,6,7,7,8,7,7,8,8,7,8,7,8,8,8,8,7,8,8,7,8,6,7,7,6,6,7,6,6,5,6,6,6,6,5,8,7,7,7,8,7,8,8,8,9,9,9,9,9,10,9,9,10,10,10,10,10,9,10,9,9,9,8,9,7,7,6,6,5,5,5,5,5,4,4,5,5,4,5,5,4,4,5,6,4,5,7,6,5,6,6,7,7,7,6,8,8,7,7,7,7,7,7,6,6,6,7,7,7,6,5,5,5,4,3,3,2,5,5,3,3,5,5,4,5,5,5,5,7,7,6,7,7,7,7,7,7,7,6,7,7,7,5,6,6,4,5,5,4,3,3,3,3,3,4,5,5,5,5,5,6,6,6,7,7,8,8,8,8,8,9,8,8,8,8,9,8,8,8,9,8,8,8,10,7,8,9,9,8,8,9,9,9,11,12,13,12,13,15,15,14,16,17,18,18,21,20,22,23,23,21,22,22,22,25,23,25,26,23,26,26,26,25,26,26,27,26,26,27,26,25,27,24,26,26,26,25,26,25,25,26,27,25,24,26,25],[29,29,29,29,29,29,29,29,29,29,28,28,28,28,29,28,29,29,29,29,29,28,29,29,28,29,29,29,29,29,28,29,30,30,29,29,29,29,29,29,29,29,28,29,29,28,27,26,27,26,25,25,24,24,23,23,22,20,21,21,18,16,14,10,8,7,6,6,5,5,4,4,5,6,7,6,6,7,9,8,8,10,10,10,10,11,12,12,12,12,12,13,12,12,13,13,13,13,14,14,14,14,14,14,14,13,14,13,13,13,14,13,12,14,13,13,13,13,12,13,13,13,12,13,14,13,13,14,13,13,14,13,12,14,13,14,13,14,13,14,13,13,13,14,12,12,14,12,13,13,12,12,12,11,12,12,12,12,11,11,9,9,9,11,12,10,10,12,11,10,12,13,11,10,12,11,11,12,12,11,11,10,11,12,12,11,12,13,11,11,13,12,12,13,13,15,15,14,13,14,15,14,15,15,14,14,14,13,12,12,13,13,11,14,13,11,12,12,11,12,12,12,11,10,10,12,10,10,9,10,8,7,8,8,9,9,10,10,9,11,10,9,10,11,11,10,10,10,10,11,10,10,10,10,9,10,11,11,11,10,9,10,10,10,10,10,10,11,11,10,10,11,11,10,11,12,13,12,11,12,11,11,10,9,11,10,9,9,9,9,9,10,9,9,8,9,8,8,8,8,6,5,6,5,5,5,7,5,6,6,7,6,7,7,7,7,6,6,6,4,5,4,2,2,2,2,1,1,0,1,2,3,3,5,6,6,9,12,12,16,15,13,14,15,16,15,17,17,17,18,19,19,19,20,23,22,24,21,24,22,22,23,21,21,22,22,24,22,24,24,27,26,27,26,27,28,28,27,28,28,28,28,28,28,28,28,28,28,27,27,26,27,28,26,27,24,25,26,24,26,24,24,25,23,24,25,22,22,23,21,20,20,18,17,17,16,13,13,10,8,5,4,4,3,4,5,4,6,5,7,7,7,8,8,8,9,10,11,11,11,12,14,12,13,15,15,15,13,13,12,11,10,10,10,12,10,13,15,13,11,11,10,10,9,9,8,9,8,7,7,7,7,5,5,5,6,5,6,6,7,7,8,8,7,8,8,9,9,9,10,10,11,12,13,13,12,13,12,10,10,10,10,8,9,9,9,9,9,9,8,9,10,10,9,9,9,10,9,9,9,9,9,9,10,10,9,10,10,10,10,9,9,8,9,10,10,11,12,12,12,12,11,11,11,11,12,11,12,12,12,14,14,14,12,14,14,13,12,12,12,12,12,11,11,11,11,11,10,10,11,10,10,9,10,10,7,8,9,8,7,8,8,6,7,8,7,7,7,7,6,6,8,7,8,7,9,8,8,8,9,8,8,8,8,8,8,9,8,9,8,8,9,9,9,9,9,9,9,9,8,8,7,8,9,7,7,9,9,8,10,11,9,11,11,10,11,11,10,12,12,11,11,12,12,12,12,12,12,12,11,11,11,11,10,10,8,8,7,7,6,6,6,7,7,6,6,7,6,5,6,7,5,4,6,6,5,5,7,7,5,7,7,8,8,8,8,9,9,9,9,9,9,8,8,9,9,9,7,9,9,8,6,6,6,5,4,3,3,5,4,4,4,6,5,5,6,7,6,7,9,8,7,8,9,9,9,9,9,8,7,8,8,8,7,7,7,7,6,5,6,4,4,4,4,5,4,6,6,7,6,7,8,7,8,8,9,10,10,10,11,9,11,10,9,10,10,9,8,9,9,9,9,10,9,9,9,10,10,9,11,10,9,9,11,13,13,14,14,15,16,16,16,16,18,21,20,21,21,23,24,23,21,23,23,22,26,24,25,27,24,27,26,27,26,26,25,27,28,27,28,27,27,27,25,26,27,27,26,27,25,26,26,27,26,24,26,27],[29,29,29,29,29,30,29,29,29,28,28,28,29,28,28,29,28,28,28,28,28,28,28,29,28,28,29,28,28,29,27,29,29,29,28,28,28,28,29,28,29,28,27,28,28,27,26,25,25,25,24,25,24,23,22,22,21,20,20,20,19,17,13,9,9,7,6,7,6,6,5,5,6,7,7,7,8,9,9,9,10,10,9,10,10,11,11,12,13,12,13,14,13,12,14,16,13,15,15,15,14,15,15,15,15,15,15,15,14,14,15,14,14,15,14,14,14,13,13,14,14,13,13,14,15,13,15,15,14,13,14,15,14,14,15,15,15,16,15,14,16,16,15,15,13,15,14,13,12,13,12,11,12,12,12,12,14,13,11,13,11,10,10,11,11,10,10,12,11,11,11,12,12,11,11,11,11,12,12,12,12,11,12,13,12,12,13,14,12,12,14,14,12,14,14,14,15,15,14,15,15,14,15,15,16,15,14,15,14,13,14,14,12,16,14,13,13,13,12,11,11,11,10,10,10,10,10,9,9,9,8,8,9,9,9,9,10,10,10,11,11,10,10,11,10,10,10,10,10,10,10,10,10,11,11,11,12,12,12,11,9,10,10,11,12,10,10,11,11,11,12,12,12,11,11,12,12,13,13,12,12,11,10,11,10,10,9,9,8,8,9,9,8,8,8,8,8,8,7,7,6,5,7,7,6,6,6,6,6,7,7,6,8,8,8,8,8,7,7,6,5,5,3,3,3,2,2,2,1,0,1,2,3,4,6,7,8,11,12,15,15,13,14,15,15,14,16,15,15,17,19,18,19,20,22,21,23,22,23,22,21,23,22,20,22,22,24,23,24,26,27,26,28,26,28,28,28,27,29,28,28,28,28,29,29,28,28,28,27,28,27,28,28,27,27,25,26,26,24,26,24,24,25,22,23,23,21,21,21,19,19,19,18,16,15,12,13,11,9,7,6,5,4,6,5,6,6,8,8,10,9,9,9,10,10,11,11,12,11,12,13,13,12,13,15,15,15,13,15,13,12,12,11,12,12,12,14,15,12,12,13,11,11,11,10,10,11,9,8,8,8,8,7,7,7,8,7,7,9,10,9,11,11,11,10,11,11,12,12,12,13,13,13,13,13,12,14,13,12,12,11,11,10,9,9,9,9,10,10,9,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,10,11,10,10,11,10,9,10,11,11,12,13,13,13,12,12,12,13,11,12,13,11,12,14,14,14,14,15,13,14,15,14,13,14,12,13,12,12,13,12,11,11,11,11,11,10,11,10,10,10,9,9,9,8,7,8,9,6,7,8,8,6,7,8,8,7,8,9,10,9,10,11,10,9,11,10,10,9,10,10,9,10,10,11,10,10,10,10,11,10,10,9,10,11,10,10,11,11,11,9,10,10,9,10,9,11,9,11,12,10,11,11,10,12,12,12,12,12,13,13,13,13,12,13,13,12,12,12,11,11,9,9,9,8,9,8,8,8,9,7,7,7,8,5,6,7,6,6,8,9,6,6,9,9,6,9,10,10,9,11,11,11,11,11,11,10,11,10,11,10,11,11,9,10,11,8,6,8,7,5,4,3,3,5,5,4,5,5,6,6,7,8,7,10,10,10,10,10,11,11,10,9,11,8,9,9,11,10,6,7,7,6,6,6,5,5,4,5,5,5,6,7,9,8,8,9,7,9,10,9,10,10,11,10,11,11,12,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,12,11,11,12,13,13,15,15,15,17,16,17,16,19,19,20,21,20,23,22,22,22,22,21,23,24,24,23,26,24,25,25,27,25,26,25,26,26,26,27,26,26,26,25,26,26,26,25,26,24,25,26,26,25,24,25,26],[29,29,29,29,29,30,29,29,29,29,29,28,29,28,28,28,29,28,28,28,28,27,28,28,27,28,29,28,28,29,27,28,29,29,28,28,28,28,28,27,28,27,27,27,27,26,25,24,25,24,24,23,23,22,22,22,21,21,21,20,18,15,12,9,9,7,5,6,5,6,5,6,6,8,8,8,9,9,10,10,11,10,12,9,10,13,12,14,15,14,15,15,15,15,15,15,15,14,15,16,16,16,16,17,17,15,17,17,16,16,15,15,15,15,16,14,15,15,16,15,15,14,15,16,16,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16,18,16,16,16,16,15,16,15,14,16,15,15,14,15,14,13,15,15,14,13,13,11,11,13,13,11,12,14,12,12,12,13,12,13,15,14,13,15,15,14,14,14,14,15,15,15,16,17,14,14,15,15,14,16,15,16,15,16,16,16,16,15,16,16,17,16,16,15,15,14,16,16,14,16,16,15,14,15,14,12,12,13,12,10,11,11,10,10,11,11,8,9,10,9,11,11,11,12,12,12,12,11,12,13,11,11,12,12,11,12,13,11,12,14,13,13,15,14,13,14,12,11,12,12,13,11,10,13,13,12,12,14,13,12,14,14,14,14,14,14,13,12,11,10,10,10,10,9,10,9,10,9,10,9,9,10,10,9,9,8,7,6,7,7,7,7,7,7,7,8,7,9,9,9,9,9,9,8,7,6,5,4,4,4,4,3,3,3,2,1,0,1,3,4,6,7,8,8,10,13,14,11,12,15,14,13,15,15,16,17,18,18,19,20,21,21,22,22,24,22,21,24,22,21,23,23,23,22,24,25,27,26,26,26,26,27,27,27,28,28,28,28,28,27,27,27,27,27,26,26,27,26,26,26,26,23,25,25,24,25,23,23,25,22,22,23,20,21,20,19,19,17,15,16,15,14,12,10,10,8,6,5,5,4,5,6,6,8,9,9,9,9,9,11,10,10,13,12,12,13,14,13,14,14,16,15,16,16,14,13,14,13,13,12,13,13,14,16,15,13,12,11,12,11,11,10,11,9,9,9,9,8,7,7,8,9,9,8,9,9,10,11,10,11,12,11,12,13,12,12,13,14,14,14,14,13,15,15,13,13,12,13,12,12,11,11,11,13,11,12,12,14,12,12,13,12,13,11,11,12,12,11,12,11,12,11,11,11,11,12,12,10,10,11,11,12,12,12,13,14,14,13,13,12,14,14,13,14,15,14,16,15,16,14,15,16,15,15,14,13,14,14,12,13,13,12,12,12,11,12,11,10,10,10,9,9,10,9,8,8,10,9,8,8,10,8,7,8,10,8,7,10,10,10,11,10,11,11,10,11,10,10,10,10,11,11,11,9,10,9,9,11,8,9,10,9,7,9,10,9,7,7,9,9,7,8,10,9,11,10,11,11,13,13,11,13,12,12,14,14,14,14,13,13,14,14,13,13,12,13,13,12,11,11,11,9,10,8,7,7,9,8,8,8,7,7,7,7,6,6,6,7,6,7,7,6,7,8,7,7,7,9,10,10,8,8,13,12,10,10,11,11,9,8,7,8,8,7,6,8,7,6,6,6,4,5,5,5,5,6,4,6,6,7,6,7,8,7,7,8,9,8,10,8,10,9,8,8,7,8,8,8,9,6,7,7,6,6,6,5,4,4,7,5,5,6,7,7,6,7,6,7,8,9,9,10,10,11,11,11,10,11,11,12,10,12,12,11,13,11,12,10,13,12,13,12,14,13,11,13,14,12,12,13,14,14,15,16,16,17,17,16,17,19,20,20,21,22,24,23,24,23,24,23,23,26,24,26,27,25,27,27,27,27,27,26,28,28,27,27,27,27,27,24,27,28,27,24,27,25,25,26,27,25,23,25,25],[29,28,29,29,29,29,28,29,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,27,28,29,27,29,28,27,28,29,29,28,29,28,29,28,28,29,28,28,28,27,27,27,25,25,25,24,23,23,23,21,22,21,19,19,18,16,15,11,8,8,5,6,6,5,6,6,7,9,11,11,9,10,11,11,11,10,12,11,11,12,12,12,14,14,14,14,15,15,15,16,16,16,16,16,16,17,17,16,17,17,16,17,16,17,17,16,15,14,16,17,15,15,16,16,16,16,14,16,16,16,17,16,17,16,16,17,16,16,16,15,16,17,16,17,17,17,16,16,17,16,17,16,16,14,15,15,14,13,15,14,15,15,14,14,15,13,12,14,13,13,13,12,14,13,14,13,15,14,14,14,14,14,16,15,16,15,15,15,15,16,15,15,15,15,15,16,14,16,15,16,16,16,16,16,16,16,15,15,16,15,16,15,14,14,14,16,16,14,16,15,15,13,15,14,13,13,14,14,13,12,13,12,11,12,12,11,11,11,10,12,12,13,14,13,14,12,13,13,14,14,13,13,14,13,14,14,12,13,13,13,14,15,14,14,14,13,12,13,14,14,12,12,13,14,12,13,13,13,13,12,13,13,13,12,13,12,12,11,11,11,12,10,10,10,11,12,11,11,10,13,10,10,11,11,10,9,8,9,10,7,8,9,10,9,9,11,11,9,10,10,10,10,8,9,8,6,5,5,4,5,4,3,3,4,2,1,0,1,2,4,5,6,8,7,11,10,9,9,14,12,11,15,15,14,15,16,17,16,18,21,20,23,21,22,22,20,22,21,19,22,22,23,22,23,24,26,25,26,25,26,27,28,27,27,28,28,28,28,28,27,28,28,27,26,27,27,26,26,25,26,24,25,25,23,25,23,24,24,21,20,22,20,18,20,16,18,18,17,17,14,15,12,12,10,8,7,6,4,6,6,7,8,8,10,11,10,10,12,12,11,12,12,13,13,13,14,14,14,13,16,17,16,16,16,15,14,14,14,14,14,12,16,16,13,14,13,12,12,12,11,11,12,11,10,10,10,9,9,9,10,11,10,10,11,12,11,14,13,13,14,15,15,14,15,15,14,15,14,15,15,16,16,15,15,14,15,14,14,13,12,14,14,14,14,14,14,14,14,14,13,12,14,12,13,12,13,12,12,12,11,11,11,11,11,11,11,10,9,11,10,12,12,13,14,13,13,13,13,12,12,14,13,13,14,14,16,14,16,13,15,16,14,14,13,13,13,13,12,12,12,12,11,11,12,11,12,10,10,12,10,11,11,12,10,10,10,10,11,10,11,11,10,10,12,11,10,11,11,14,13,13,14,12,12,14,13,12,12,12,12,12,12,10,11,10,10,10,10,9,10,10,9,8,10,8,7,9,9,9,9,9,10,10,11,10,11,10,12,12,12,13,13,11,13,13,13,15,13,12,14,13,13,14,12,13,12,12,11,10,11,10,10,8,8,8,8,9,10,8,8,8,8,7,8,8,8,8,7,9,10,9,10,10,10,9,10,9,11,10,12,11,12,11,11,11,10,11,9,10,9,8,9,7,7,9,7,6,6,7,4,4,3,4,5,4,5,6,6,7,8,8,8,8,8,10,9,10,10,10,11,11,9,11,9,8,8,8,7,8,8,6,7,8,7,6,6,4,6,6,6,7,9,9,9,9,9,8,9,10,10,11,11,12,12,12,10,13,13,13,12,13,14,12,13,12,13,13,14,14,14,13,15,15,14,14,15,14,15,14,16,16,17,16,18,19,18,19,18,20,22,21,22,23,25,23,25,23,24,24,24,27,25,26,27,25,27,27,28,26,27,26,28,27,26,28,27,27,26,24,27,27,27,25,27,25,27,27,28,26,24,26,26],[30,30,30,30,30,30,30,30,30,29,29,29,30,29,29,29,29,29,29,29,28,28,29,29,28,29,29,28,29,29,28,29,30,30,29,29,29,29,29,29,29,29,28,28,28,27,26,25,25,24,24,23,23,22,21,21,20,20,20,18,15,15,13,10,10,8,6,5,6,6,5,6,9,9,10,9,8,10,10,10,11,12,11,10,13,14,14,15,16,15,16,16,16,16,15,18,16,18,17,17,18,18,17,17,18,16,17,18,17,17,17,16,17,17,17,16,17,17,17,17,17,15,17,17,17,16,17,18,17,17,17,18,17,18,17,17,17,19,18,17,18,17,18,18,16,16,18,16,15,16,16,15,13,16,16,15,17,16,15,14,14,12,13,14,13,13,14,15,14,13,14,15,14,15,16,15,15,17,16,17,15,14,17,17,16,16,17,17,15,16,18,17,16,18,17,18,18,17,15,18,18,16,17,17,17,18,17,16,16,15,16,18,16,16,18,16,15,16,15,14,14,15,15,14,13,15,14,12,12,13,11,11,14,11,12,13,13,14,15,16,14,13,15,16,14,15,16,15,13,16,16,13,14,15,15,15,16,16,16,14,14,13,15,14,16,13,13,15,16,13,14,16,15,16,15,17,16,15,16,16,15,14,15,13,11,12,13,11,12,12,12,11,12,12,11,12,11,13,11,10,9,8,9,9,8,8,11,10,9,12,12,13,12,12,13,12,12,11,11,9,8,7,6,5,5,5,5,4,4,3,2,1,0,1,3,4,6,8,9,9,10,10,8,13,11,9,14,16,14,15,18,18,17,19,19,20,22,20,22,21,20,22,20,19,22,23,22,22,22,24,25,24,25,25,27,27,28,27,27,27,27,27,27,27,27,27,27,27,26,26,26,26,27,25,25,24,25,25,24,24,24,23,25,23,22,23,23,20,21,21,20,19,17,17,16,14,14,13,11,9,7,6,5,7,7,8,10,10,11,12,12,11,12,13,12,13,13,15,15,14,16,15,14,16,17,16,17,17,16,15,14,15,15,14,16,15,16,18,15,14,14,12,12,12,12,12,12,11,12,11,11,11,11,12,10,12,13,12,14,14,14,12,16,15,15,15,16,17,16,16,16,16,16,16,16,17,17,17,17,17,16,15,16,16,14,14,14,15,14,15,15,16,14,14,15,14,14,13,13,13,16,13,13,13,13,12,14,13,13,13,12,13,9,11,12,13,14,13,14,15,15,14,14,15,15,16,15,16,16,17,16,16,16,16,15,15,17,17,14,16,17,15,15,15,13,14,15,13,11,13,12,12,11,12,11,11,11,12,12,10,11,12,11,10,11,12,11,9,13,12,12,11,12,15,13,12,15,15,13,15,15,12,11,14,14,11,14,11,14,13,11,13,11,8,11,11,11,9,11,8,11,7,9,10,8,9,11,9,12,11,11,10,12,13,11,14,13,12,14,14,15,15,13,15,16,14,14,14,15,14,12,13,12,11,11,10,9,10,8,7,9,10,13,9,6,10,11,10,7,10,10,8,7,12,11,10,10,13,10,9,11,13,12,11,12,13,14,15,9,12,11,12,11,11,11,10,11,11,11,10,11,6,7,9,4,3,3,5,7,5,5,8,9,6,8,10,11,9,11,10,9,10,10,10,10,8,8,9,9,7,9,8,6,5,9,8,5,6,7,6,5,3,6,7,7,8,10,9,9,9,9,9,9,9,10,11,11,11,12,11,12,12,13,14,12,14,15,14,13,14,16,12,15,16,15,14,16,16,14,16,16,15,15,17,17,16,17,17,17,20,19,19,19,20,22,23,23,23,26,24,27,25,25,25,25,28,26,27,29,26,28,28,29,28,28,27,29,28,28,29,28,28,28,26,28,28,28,26,28,27,27,28,28,26,26,27,25],[29,29,29,30,30,30,30,29,29,29,29,28,29,28,29,28,28,29,27,29,28,27,28,28,27,28,29,27,28,28,27,28,29,29,28,29,28,28,28,28,28,28,27,27,27,26,25,24,24,23,23,22,22,21,21,22,20,20,20,19,17,14,12,9,9,7,7,8,7,7,8,8,8,11,11,11,10,12,11,13,12,14,13,12,14,15,15,16,19,17,18,17,18,19,18,18,18,20,18,19,21,20,20,20,21,20,21,21,21,20,20,19,19,20,19,19,18,19,18,19,19,19,20,20,19,21,19,20,20,20,19,20,20,20,19,20,20,21,20,20,22,19,19,20,19,20,18,19,16,18,19,17,17,18,18,18,19,18,16,16,16,15,14,16,16,16,15,18,17,17,16,17,17,18,19,17,17,19,19,19,19,16,18,19,19,17,19,20,18,19,20,19,19,20,21,20,20,21,19,19,19,20,20,20,19,20,20,19,18,19,19,19,18,19,20,18,20,18,17,16,16,17,16,13,17,16,14,13,15,16,13,13,14,14,14,15,15,16,16,18,16,16,16,17,17,15,17,16,16,17,17,17,16,17,18,18,19,18,17,17,17,16,16,16,17,15,12,16,17,13,16,17,17,18,17,18,17,17,17,17,16,16,15,13,14,14,11,11,14,12,13,12,13,13,11,13,14,13,12,10,9,11,11,12,11,9,12,12,10,13,14,17,13,15,15,14,16,13,13,12,10,10,9,7,7,7,7,5,5,5,4,3,1,0,1,3,5,6,7,7,8,11,11,10,10,10,11,14,12,14,17,17,16,19,21,21,23,21,23,21,20,22,21,19,21,23,22,21,23,25,25,26,26,26,26,27,27,27,28,27,27,28,27,28,27,28,27,27,26,27,26,26,26,25,25,23,25,25,23,25,24,23,25,21,22,22,21,21,20,19,20,19,18,17,17,15,15,13,12,10,9,7,7,10,11,12,14,12,15,14,14,14,15,15,14,14,17,16,16,18,19,17,18,19,20,18,19,21,18,17,17,17,18,17,17,18,18,19,18,17,16,18,17,16,15,14,16,13,13,13,13,12,13,13,15,13,14,15,17,18,16,15,17,17,17,17,19,18,18,18,19,17,18,19,18,19,18,19,18,18,18,17,18,17,16,16,17,18,16,15,17,17,17,14,16,15,14,15,16,16,16,16,15,15,16,14,14,14,15,16,15,14,13,15,14,16,15,17,18,17,18,17,16,17,19,17,17,18,18,18,20,18,18,18,17,18,19,19,16,18,20,17,17,17,16,14,15,14,14,14,14,12,12,14,12,12,13,13,12,12,12,13,11,11,12,14,12,11,13,15,14,13,14,18,15,14,16,16,14,16,17,15,13,15,17,15,15,14,14,16,14,13,13,13,13,12,16,12,13,10,13,12,10,11,11,11,14,13,13,12,14,13,15,16,15,14,15,14,18,17,17,16,16,17,18,16,17,16,17,18,14,15,15,14,12,11,13,11,9,9,10,10,11,12,11,10,11,11,8,11,11,11,11,11,13,12,13,14,15,12,13,14,14,13,16,14,16,16,16,14,15,15,13,12,14,15,14,11,11,9,12,7,7,8,6,6,3,5,7,5,5,8,8,6,10,11,13,9,15,15,14,13,12,12,12,9,9,13,14,12,12,11,10,7,13,15,10,7,9,12,7,6,9,11,13,12,11,12,12,11,15,14,11,11,11,13,13,16,14,16,16,16,15,16,15,16,19,17,15,16,18,15,17,15,15,16,18,17,16,17,20,18,18,18,19,19,19,19,20,21,21,22,20,23,23,23,23,23,25,25,26,25,26,25,24,28,24,27,27,26,28,28,28,27,28,25,28,28,27,27,28,28,27,26,26,27,28,25,28,26,26,27,27,25,25,27,26],[30,29,29,29,29,30,29,29,29,29,29,28,29,28,28,28,29,28,27,28,27,27,27,28,27,27,28,26,28,27,27,28,29,29,28,29,28,29,29,28,28,28,27,26,27,26,25,24,24,24,23,22,23,22,21,20,21,20,20,20,18,16,14,10,11,10,8,9,10,11,11,13,12,13,15,13,13,15,14,16,17,16,14,15,17,17,17,19,20,20,21,21,20,21,21,20,20,21,22,22,23,22,22,22,23,23,23,22,23,22,22,21,20,21,22,21,21,22,22,22,21,22,22,21,21,23,21,22,22,22,22,23,22,21,20,21,23,22,22,22,23,22,22,22,22,22,21,22,20,20,21,21,20,21,19,21,21,20,19,20,18,17,18,20,19,18,18,19,19,19,19,19,20,21,20,21,20,21,20,20,21,22,21,21,22,21,21,21,22,20,20,21,22,21,21,21,21,21,21,21,22,21,21,21,21,22,21,20,19,20,21,21,19,21,21,22,23,21,21,20,18,20,21,19,18,19,20,18,18,18,18,18,18,16,18,19,19,19,19,20,20,19,19,20,20,20,19,20,20,20,19,19,21,19,21,21,21,20,19,20,20,19,21,19,19,19,18,18,19,19,19,19,21,18,18,19,18,18,19,18,19,20,19,17,18,18,17,15,17,17,18,16,17,17,16,17,17,17,17,15,14,13,15,14,15,13,16,17,14,16,18,18,16,16,16,17,17,15,14,13,13,13,13,11,11,12,9,7,8,7,5,5,3,1,0,1,4,4,6,7,9,7,8,9,11,10,10,12,13,13,14,15,15,17,20,20,22,20,22,21,21,23,21,21,21,23,23,20,22,24,25,26,26,26,26,26,28,27,27,28,28,28,28,28,28,28,28,28,27,27,26,27,27,26,26,22,26,25,23,25,23,24,24,22,22,23,22,21,22,20,22,21,18,20,18,17,17,15,15,11,11,9,9,10,13,14,12,14,17,17,17,16,17,17,16,17,17,18,18,20,20,19,19,20,21,23,22,22,20,20,19,20,21,19,20,18,20,22,20,19,18,19,19,18,16,17,18,17,16,15,16,13,15,15,15,16,17,17,17,18,17,20,20,19,20,20,21,20,20,20,21,20,21,21,21,22,21,21,22,20,22,20,20,19,19,20,19,19,21,20,20,21,20,19,19,18,20,18,17,19,19,18,19,19,18,17,18,17,16,17,17,15,16,16,16,18,16,18,18,18,17,18,17,18,20,19,19,20,20,21,21,20,20,20,20,20,22,20,18,20,20,18,18,21,18,18,18,16,18,17,18,14,16,17,15,15,16,17,14,15,16,17,15,15,16,16,17,18,18,18,17,17,17,19,18,20,21,19,17,20,19,19,18,18,18,18,18,15,18,15,16,17,16,15,15,16,14,12,14,13,13,13,14,12,13,14,15,16,16,17,16,15,18,18,16,18,19,17,18,19,20,20,19,19,21,19,20,19,19,19,18,18,16,15,16,14,16,13,14,12,13,14,14,12,12,15,12,13,13,12,13,14,14,14,15,14,15,17,15,14,14,15,17,16,18,17,17,17,16,17,17,15,15,14,13,13,10,13,12,12,11,10,10,10,5,7,5,9,8,7,8,10,11,10,10,11,12,13,13,16,13,14,15,14,13,12,12,12,13,10,12,12,12,8,14,11,10,10,11,9,9,7,11,11,12,14,15,13,15,14,15,13,13,14,15,16,18,19,18,19,17,18,19,19,17,17,20,20,17,18,20,20,18,19,21,19,20,21,20,19,20,20,20,21,22,21,23,22,23,24,24,23,22,24,25,25,26,25,27,26,27,26,27,27,27,29,27,28,29,27,28,28,29,28,28,28,28,28,28,28,28,28,28,28,27,29,29,28,29,27,28,27,28,28,27,28,28],[30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,29,30,29,28,30,29,28,29,29,28,29,29,28,28,29,28,29,29,29,29,29,28,29,29,28,29,28,28,27,27,27,26,25,25,24,24,24,23,22,21,22,22,20,20,20,18,17,15,12,12,11,8,11,10,13,12,14,15,18,17,18,16,19,18,19,20,19,19,19,19,21,19,21,22,22,23,23,23,23,23,23,22,24,24,23,24,25,24,24,24,24,25,25,24,24,24,23,23,23,23,22,22,24,23,25,24,24,24,24,25,23,24,25,24,23,24,24,23,24,23,23,24,24,25,24,24,25,24,24,23,24,24,23,21,23,22,21,22,21,21,23,23,22,22,21,20,20,20,21,21,20,20,22,20,22,21,22,20,23,23,22,22,23,23,23,22,22,23,24,24,22,24,23,22,23,23,25,22,24,24,24,24,23,22,24,24,23,23,24,25,24,23,23,23,24,23,25,22,23,24,23,23,23,23,21,20,23,22,19,20,22,20,19,20,20,19,20,20,20,20,20,20,22,22,23,21,21,22,23,22,21,22,23,22,22,24,20,21,23,23,24,23,24,23,21,22,22,20,20,23,21,19,22,22,19,21,22,22,23,21,22,21,21,22,22,21,22,21,21,19,19,20,21,19,18,21,19,18,20,21,19,20,19,19,18,17,16,18,19,17,17,18,19,18,20,20,21,20,20,20,21,18,18,17,17,16,17,16,14,14,15,12,10,11,10,8,6,5,2,1,0,1,4,5,7,7,7,7,10,10,10,10,11,12,11,13,15,15,16,20,20,21,20,22,21,21,22,20,20,21,22,22,21,22,24,25,26,25,26,26,27,27,26,27,27,27,28,28,28,28,28,28,28,26,27,26,27,26,26,25,25,26,25,24,25,25,24,25,23,23,24,23,22,23,22,22,22,20,20,19,18,18,17,16,14,11,12,12,14,15,18,17,18,18,19,18,19,19,20,19,19,21,20,21,20,22,21,21,22,23,25,23,24,22,23,22,22,21,21,22,22,23,25,21,22,20,20,21,21,18,18,21,19,19,19,18,16,20,18,20,18,23,19,21,22,22,22,23,22,23,22,23,24,23,23,25,24,23,24,23,24,24,25,24,24,24,24,23,21,22,22,22,23,22,21,23,23,20,21,23,21,21,20,21,20,22,21,21,23,22,21,22,22,18,21,20,17,17,13,16,18,18,21,19,21,21,21,21,21,22,23,23,22,23,24,24,24,22,24,23,23,25,24,22,23,22,22,22,20,21,20,20,19,20,20,19,21,17,20,20,21,19,19,19,20,20,22,22,20,20,21,21,20,19,23,20,20,20,23,19,21,24,21,20,21,24,21,20,24,22,20,21,18,22,18,16,18,19,21,17,20,18,18,17,14,16,14,17,18,16,16,16,16,18,19,20,19,21,21,20,21,21,21,22,22,22,21,21,22,23,22,22,21,22,21,21,20,18,18,17,16,16,15,13,15,18,14,17,18,17,15,18,18,17,17,18,16,17,18,18,17,20,20,17,17,16,18,18,18,20,18,19,19,19,18,18,18,18,21,18,16,18,17,15,17,15,7,9,12,6,10,8,12,12,9,12,15,13,11,16,17,15,17,17,19,16,15,15,16,15,14,13,17,14,10,11,14,12,6,11,12,10,9,14,12,10,10,14,14,14,17,18,16,18,16,16,14,15,15,16,17,18,19,19,20,19,19,20,21,20,21,22,21,21,21,22,21,22,22,21,21,23,23,20,22,24,23,22,24,25,24,24,24,24,26,26,26,26,26,27,27,27,27,29,29,28,28,29,28,28,30,29,30,30,29,30,30,30,30,30,29,30,30,30,30,29,30,29,28,29,30,30,29,30,29,29,29,29,28,28,29,28],[30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,29,29,29,29,28,28,29,28,27,28,29,27,28,28,27,28,29,29,28,29,28,28,28,28,28,27,27,26,27,26,25,24,24,23,23,23,22,22,22,21,21,20,19,18,16,15,13,11,11,9,9,10,10,12,11,12,14,15,15,16,13,18,17,14,17,19,17,16,19,18,19,20,23,22,23,24,23,23,24,24,23,25,24,24,24,25,24,25,25,25,26,26,26,26,24,25,25,25,25,24,24,24,24,26,24,24,25,25,25,26,24,25,24,24,24,25,24,25,24,25,25,24,25,25,24,25,24,25,25,25,25,24,22,24,24,23,23,23,23,22,25,23,22,22,20,21,20,22,22,21,20,23,23,23,22,23,23,24,24,23,23,24,24,24,24,23,24,24,25,23,24,24,23,25,23,25,24,24,24,23,24,22,22,24,24,22,23,24,24,24,24,23,23,23,23,24,23,24,24,24,23,23,24,22,22,24,23,19,23,24,22,20,21,21,20,20,19,22,20,23,22,24,23,24,23,22,23,24,23,21,22,23,22,22,23,21,21,23,23,24,24,24,23,22,22,23,21,22,23,21,19,22,23,17,21,22,21,21,22,23,22,22,22,22,20,21,21,17,20,20,18,18,19,19,18,19,20,19,20,19,20,19,19,18,16,15,18,18,16,18,19,19,18,20,20,22,20,21,21,20,21,19,19,19,18,18,17,16,16,16,14,11,12,12,9,9,6,4,2,1,0,1,4,4,5,5,6,8,10,9,10,12,10,13,12,14,14,16,20,20,21,20,22,21,21,22,21,21,21,22,23,20,22,24,24,26,25,25,26,27,27,27,28,28,27,28,27,28,27,28,28,28,27,27,27,27,26,25,26,24,25,26,24,25,24,23,25,22,23,24,23,22,23,21,22,22,20,21,20,20,19,17,19,17,16,14,12,16,19,21,19,19,21,20,20,21,21,21,21,21,22,22,23,22,23,23,23,24,24,25,24,25,23,23,22,23,22,21,22,22,24,24,23,24,22,24,22,23,22,22,22,20,22,21,19,18,20,19,19,19,21,21,21,22,21,21,23,22,23,22,24,23,23,23,24,24,23,24,23,24,24,24,24,24,23,23,23,21,23,22,22,23,21,21,22,23,20,21,23,22,21,22,21,21,21,23,21,21,22,22,22,21,20,21,19,18,17,17,17,19,19,21,22,23,23,23,22,22,22,21,22,22,23,23,25,24,23,23,24,23,25,24,21,23,23,21,20,22,21,19,19,19,18,18,20,17,17,19,18,18,18,20,19,16,18,20,19,18,19,20,18,20,19,21,20,19,20,24,21,20,21,21,21,20,22,22,21,22,22,23,21,20,22,18,18,18,19,22,18,17,18,16,18,14,15,14,17,15,16,15,15,17,17,15,21,18,20,21,18,20,21,21,22,22,23,21,22,23,21,22,22,21,22,22,19,19,20,19,18,15,16,15,13,12,14,13,17,15,12,14,14,18,14,15,18,15,17,18,20,19,20,21,19,18,21,20,19,20,21,19,19,20,23,22,19,18,19,21,20,18,21,18,12,19,13,7,9,10,7,9,8,12,11,8,11,16,15,13,16,18,18,18,21,20,18,18,18,17,20,20,17,19,17,15,14,10,14,6,10,16,12,10,16,13,10,10,14,17,17,20,21,20,18,17,18,20,17,17,15,18,16,21,20,20,20,22,20,21,22,22,23,22,24,22,22,22,22,22,22,22,23,22,21,22,23,23,22,24,24,23,24,24,25,26,26,25,25,26,26,26,26,26,28,27,28,27,28,27,27,29,28,29,29,28,29,29,28,29,29,28,29,29,28,29,28,29,28,28,28,29,28,28,29,29,27,29,28,28,27,28,27],[30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,28,29,28,27,28,28,27,28,27,27,27,28,27,28,28,26,28,28,29,27,28,27,28,28,27,28,28,27,26,27,26,24,23,24,23,22,22,22,21,21,21,21,20,20,19,18,15,15,12,12,12,11,12,16,16,14,16,15,18,18,18,18,19,18,17,20,21,19,19,21,21,21,22,23,23,23,23,24,24,24,24,24,25,24,25,26,25,25,26,26,25,26,25,26,26,25,25,25,25,25,24,25,26,25,26,25,25,25,26,26,27,26,26,25,24,25,26,25,24,24,25,25,26,25,25,25,26,26,26,25,26,25,24,24,25,24,25,24,25,24,24,25,23,22,22,22,22,21,24,23,22,21,24,23,24,23,24,24,25,25,24,25,24,25,25,25,26,24,25,26,25,24,25,25,24,25,25,25,24,24,24,24,24,24,24,25,24,24,24,24,24,24,22,24,24,24,24,25,24,25,25,25,24,24,24,22,24,25,23,24,24,23,23,23,23,22,23,21,22,20,22,24,22,23,24,23,23,24,25,25,22,24,25,24,24,23,24,25,23,24,24,25,24,24,24,24,23,24,24,24,23,22,23,24,22,23,24,24,24,22,23,23,22,23,23,23,22,22,20,21,22,20,20,20,21,20,21,22,22,22,21,22,22,22,22,18,18,21,20,18,19,21,20,20,20,22,22,19,20,21,21,21,19,20,18,17,19,18,14,16,17,17,14,16,15,13,11,9,5,5,3,1,0,1,3,4,5,5,7,8,7,8,10,10,10,14,15,14,15,17,17,19,20,21,21,20,23,22,22,21,22,22,22,21,24,24,25,25,25,26,26,27,27,28,28,27,28,27,27,27,27,27,27,26,26,26,27,26,25,26,24,25,25,24,25,24,24,25,22,22,24,23,22,23,21,22,21,21,21,21,20,20,19,18,17,17,17,16,17,18,16,18,18,22,20,20,21,20,21,19,20,22,22,21,22,24,21,23,23,25,25,24,25,24,24,23,23,23,23,23,23,24,25,23,23,22,22,22,22,20,20,23,20,20,20,20,19,20,20,19,19,21,20,21,21,21,22,23,22,23,24,24,23,25,24,25,24,24,24,25,25,24,24,25,23,26,23,25,24,23,23,24,23,23,25,24,24,24,23,22,22,23,22,21,22,22,22,22,22,20,21,22,22,19,22,21,19,18,18,19,20,20,21,21,22,22,22,22,22,23,23,23,23,24,23,24,24,24,21,23,23,24,23,21,23,23,22,23,23,21,21,21,20,20,20,20,19,18,21,19,19,20,21,19,21,21,21,20,20,20,21,19,22,22,21,21,22,22,23,23,22,23,22,22,23,22,21,22,21,20,22,22,20,23,18,19,20,17,18,18,17,18,15,17,18,16,16,17,15,15,16,18,19,19,18,21,18,21,23,21,21,21,22,22,23,23,22,23,23,22,23,24,22,23,22,21,22,20,19,20,16,16,16,15,15,18,16,18,16,15,17,17,15,15,18,17,16,17,21,17,17,19,21,19,18,19,21,20,21,22,18,20,21,17,20,19,17,17,16,19,18,17,14,12,16,13,10,11,12,10,13,12,15,14,10,13,16,13,11,15,15,14,15,14,18,17,16,17,19,18,18,17,19,17,15,16,15,15,8,12,12,11,9,13,13,12,11,16,16,16,17,18,19,17,18,16,16,16,17,16,19,19,21,20,22,20,21,22,21,21,21,22,21,22,21,22,23,21,23,23,22,23,24,24,24,24,25,25,25,24,24,25,25,26,25,26,27,26,26,27,27,27,26,29,28,29,28,29,28,28,30,29,29,30,29,29,30,30,29,30,29,29,30,29,30,29,29,29,29,29,30,30,29,30,29,29,30,29,29,29,29,28],[30,31,30,30,30,31,31,30,30,30,30,30,30,29,29,29,29,29,28,29,28,27,29,28,27,28,28,27,28,28,26,28,29,29,28,28,27,28,28,28,29,28,27,27,27,27,25,25,24,24,24,24,22,22,21,22,20,19,19,17,17,15,15,11,13,14,11,15,14,18,16,18,19,21,20,20,21,23,22,20,23,23,22,21,23,23,22,24,25,25,25,25,25,25,25,25,25,25,25,24,25,26,26,26,26,25,27,27,25,27,27,25,25,25,26,26,25,26,26,27,27,25,25,26,25,25,25,26,25,25,26,25,23,26,25,25,25,25,25,24,25,25,25,25,24,26,24,24,24,25,24,24,25,26,23,25,26,25,24,25,25,24,24,25,24,24,24,24,24,24,23,24,24,26,25,24,25,25,24,25,24,24,24,24,25,24,25,25,24,24,25,25,24,26,24,24,25,24,23,25,25,24,25,26,24,26,24,24,24,25,24,25,23,25,26,25,25,25,26,23,24,25,26,23,26,26,24,24,25,24,23,24,23,24,24,26,26,25,26,25,25,24,25,26,24,25,24,26,23,24,25,24,25,25,25,24,25,25,25,24,24,25,23,24,25,23,22,25,25,21,23,24,23,24,24,25,25,23,24,24,23,23,23,23,23,22,22,21,23,21,23,22,24,22,24,23,24,23,24,24,21,21,23,21,21,21,23,21,21,22,22,24,22,21,23,22,22,22,23,20,21,22,21,18,19,22,18,15,18,18,14,11,11,7,6,4,3,1,0,1,4,3,4,3,4,6,6,8,8,9,10,12,11,12,16,16,19,18,19,19,20,22,20,21,22,22,22,22,24,24,26,25,26,26,27,27,28,26,28,28,27,28,27,28,27,28,28,28,26,27,25,27,26,26,26,24,25,25,24,26,25,25,25,23,24,24,23,24,23,22,24,22,22,22,21,21,20,19,20,17,18,16,17,21,19,19,19,20,22,22,21,22,22,23,21,21,23,23,22,21,25,24,23,25,26,26,25,26,25,25,26,24,23,24,25,24,24,26,24,24,24,21,22,24,22,20,24,23,22,21,22,20,22,21,21,22,24,22,23,24,24,25,24,23,24,25,25,25,24,24,25,24,25,25,26,25,26,25,25,25,26,25,26,25,25,24,26,24,24,23,25,25,23,23,25,24,23,23,24,23,23,24,24,23,23,23,24,25,21,22,22,20,21,19,21,20,22,23,22,23,25,24,24,24,23,24,26,24,24,25,27,26,25,25,26,27,24,25,25,24,24,24,24,22,23,24,22,21,22,22,21,22,21,23,22,22,22,23,24,23,22,24,23,21,22,23,21,23,23,22,22,23,23,25,23,23,23,24,23,23,25,24,23,23,23,24,23,21,24,21,21,22,22,23,20,22,21,17,20,15,18,16,17,20,20,19,18,20,22,22,23,22,23,24,22,24,24,23,24,25,25,25,26,24,25,25,25,24,24,23,24,24,20,22,22,20,20,20,16,17,19,19,21,18,18,21,20,21,19,21,21,20,21,23,21,20,22,24,22,21,21,21,21,22,25,21,22,23,22,22,20,22,18,22,20,18,21,19,14,13,16,12,10,14,10,15,12,16,18,11,13,17,16,15,17,20,17,17,20,21,17,17,20,19,20,17,18,19,15,13,14,14,13,9,14,13,11,11,16,12,12,12,15,19,18,20,19,20,20,17,19,16,18,19,20,20,22,22,22,21,21,25,23,24,24,23,24,23,23,23,23,24,24,23,23,23,24,24,23,23,25,25,24,25,25,25,25,25,26,27,27,26,26,27,27,28,27,27,29,29,29,28,29,29,28,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,29,29,30,30],[30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,28,28,28,28,27,28,28,27,28,28,27,28,28,26,28,28,29,28,28,27,28,27,27,28,26,25,26,26,25,25,22,24,24,23,22,22,22,21,20,20,19,18,17,16,14,14,11,12,11,12,14,15,16,16,17,19,20,19,18,20,21,20,17,22,22,21,20,21,22,19,22,22,23,24,24,23,25,25,26,24,24,26,26,26,26,28,26,27,27,27,27,27,28,27,27,27,27,27,27,26,28,27,28,28,26,27,27,26,27,26,28,26,25,26,26,24,26,25,26,27,27,27,26,26,25,26,26,25,26,26,25,22,25,25,25,24,26,24,26,26,26,25,25,25,23,23,25,24,23,24,26,24,24,25,25,24,26,26,25,24,26,26,27,25,26,25,25,25,24,26,25,24,24,25,26,23,26,25,26,27,25,23,25,26,24,25,26,26,26,25,23,24,23,24,24,24,24,26,24,25,25,24,22,23,25,26,22,24,24,23,23,24,25,23,25,24,25,23,25,25,26,27,28,25,25,26,27,26,25,26,27,25,26,27,25,26,26,25,26,26,26,26,24,25,25,23,23,25,23,23,24,25,22,22,25,24,25,24,25,25,23,24,22,25,23,23,21,22,23,21,21,22,21,22,23,22,21,22,24,24,21,24,23,22,21,22,21,21,21,24,22,22,23,23,25,21,23,23,24,22,23,23,20,20,21,21,17,17,18,18,16,15,16,16,13,11,8,7,5,4,2,1,0,1,1,2,2,3,3,3,4,5,5,6,9,9,10,13,14,17,15,19,17,20,22,20,18,20,21,21,21,23,24,24,24,26,25,26,26,26,26,27,28,27,27,27,27,27,27,26,26,25,26,25,26,26,25,25,23,23,24,24,24,24,24,25,22,23,24,23,23,22,22,23,21,21,21,21,19,20,19,18,17,17,18,16,19,19,20,20,21,23,22,21,21,22,22,20,22,22,22,21,21,23,23,23,24,24,26,23,24,23,24,22,24,22,23,23,23,24,26,22,24,23,22,20,22,22,20,22,22,21,19,22,21,20,21,22,21,21,21,22,23,23,23,23,23,24,24,24,25,24,24,26,25,24,25,24,24,26,26,26,26,26,26,26,25,25,25,25,25,24,23,24,25,23,23,24,23,23,23,23,24,24,22,22,22,22,23,22,22,20,21,20,22,20,21,19,22,22,23,22,23,23,23,23,22,23,23,24,23,24,24,26,26,26,23,24,24,26,24,23,23,23,22,22,22,20,21,20,20,22,19,21,20,20,20,20,21,20,20,19,22,20,21,20,21,21,20,22,22,23,22,23,23,23,23,22,23,24,23,23,24,23,23,22,23,23,24,23,21,24,22,21,20,21,21,23,21,20,17,19,18,18,17,19,18,16,16,19,20,19,18,21,20,22,22,21,23,24,22,23,23,25,24,24,24,23,24,23,23,23,23,21,20,21,20,21,18,18,19,16,17,19,19,20,18,16,20,17,16,18,19,19,16,19,20,20,19,24,22,19,19,22,22,21,21,25,21,23,24,22,22,22,22,19,22,19,16,19,17,14,15,15,9,10,14,11,13,15,13,14,11,14,17,15,12,19,19,15,18,21,19,17,19,21,18,19,17,15,19,16,14,13,13,15,8,11,15,12,13,13,15,12,15,17,20,16,19,19,19,19,18,20,17,18,20,19,21,20,22,21,22,22,23,22,23,22,24,24,23,24,23,22,25,24,23,22,23,24,24,22,24,25,25,25,26,26,26,25,26,26,28,27,27,26,27,27,28,28,29,28,28,29,27,28,29,29,30,29,30,30,30,31,30,30,30,30,29,29,30,29,30,29,30,29,30,30,30,29,29,30,30,29,30,30,29,29,30,29],[30,30,30,30,30,30,30,30,29,29,29,28,29,28,28,28,28,28,27,28,28,27,28,28,26,28,28,26,28,28,26,28,28,28,28,28,27,28,27,27,28,27,26,26,26,25,25,23,22,23,23,21,21,21,20,19,19,18,18,15,15,13,15,12,13,15,14,15,15,19,16,18,19,19,20,20,21,21,21,19,22,23,21,19,23,24,21,23,24,25,25,25,25,25,24,25,25,25,24,26,26,26,27,26,27,26,27,27,26,26,27,26,26,27,25,26,26,27,27,28,27,26,26,27,26,27,27,27,27,26,26,27,25,26,25,27,26,27,26,26,27,26,26,26,26,26,26,26,24,26,26,26,24,27,24,25,27,25,24,26,25,23,24,26,24,24,23,26,23,26,24,26,25,26,26,26,26,26,25,27,26,27,25,26,27,26,26,26,26,25,26,26,25,26,25,25,25,26,23,25,25,24,23,25,25,25,23,23,23,24,24,26,24,26,27,25,27,25,26,23,23,26,27,22,25,26,25,23,25,25,24,24,24,25,24,25,25,25,26,26,25,25,26,27,26,25,26,27,25,25,26,26,26,25,26,25,26,26,26,25,25,26,23,25,26,24,23,25,25,21,22,25,24,23,22,24,24,23,24,23,25,23,23,20,23,22,21,19,23,21,20,21,24,21,21,23,23,23,24,23,21,21,22,21,21,21,23,21,21,22,23,25,21,23,23,22,23,22,21,20,19,19,19,16,16,17,18,17,17,16,15,15,10,9,8,5,3,3,3,1,0,1,1,2,2,3,3,4,3,6,7,8,9,10,13,12,17,15,18,17,19,19,18,19,20,20,21,21,21,23,24,25,26,25,25,25,26,26,26,26,25,26,25,25,26,26,25,25,25,24,24,25,24,24,24,23,23,25,23,25,24,23,26,23,23,25,24,24,24,22,24,22,22,21,22,20,20,19,19,17,17,17,19,19,18,19,18,19,23,22,22,21,22,22,19,20,23,22,19,21,25,22,21,24,24,24,24,24,25,25,24,24,24,23,24,24,24,26,24,24,24,21,22,23,20,20,23,21,20,20,22,20,20,20,21,21,23,22,22,23,23,25,22,23,25,24,24,24,25,24,25,25,26,25,25,26,26,26,26,25,27,25,26,25,26,25,26,25,25,24,25,26,24,24,25,22,24,21,22,23,23,23,22,22,21,22,23,23,20,21,21,21,21,21,21,20,20,21,20,22,22,22,22,22,23,23,24,22,23,25,26,26,25,24,25,25,25,25,24,24,22,23,24,22,21,22,21,20,22,20,21,20,21,21,21,21,21,22,22,20,22,22,21,21,22,22,21,22,23,22,21,23,23,23,24,23,24,22,23,24,21,22,21,22,20,23,22,19,23,21,20,20,21,20,20,21,21,17,18,16,18,17,17,19,19,19,19,20,19,20,21,20,22,23,20,24,24,23,23,25,25,25,25,24,24,25,24,24,23,23,22,21,19,20,22,19,18,19,16,17,18,19,22,18,18,20,20,19,19,19,21,18,19,23,21,18,20,22,21,19,19,21,19,18,24,20,20,22,21,18,19,21,18,20,17,16,19,17,12,14,15,11,12,14,14,12,15,14,14,13,15,16,17,14,15,18,15,17,17,17,16,16,18,16,17,16,16,15,15,14,13,12,13,9,13,14,14,14,15,14,14,16,17,19,16,19,19,18,17,17,19,19,17,18,18,18,20,20,19,20,21,22,21,22,21,21,21,22,22,20,22,24,23,22,24,23,24,26,24,24,26,26,26,26,25,25,25,26,26,27,27,27,27,27,27,28,28,28,29,28,29,29,29,28,29,29,29,30,30,30,30,30,30,29,30,29,30,30,29,30,29,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,29],[30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,28,29,28,28,29,28,28,29,28,28,28,28,27,28,28,27,28,28,29,28,28,27,27,27,27,27,27,26,26,25,25,24,24,22,23,22,21,21,21,20,21,20,19,18,18,16,13,14,12,12,12,11,14,15,16,17,16,18,19,19,19,20,22,21,20,22,22,22,20,22,22,20,21,22,23,23,24,24,23,24,25,24,25,26,26,26,26,26,26,26,26,27,27,26,26,26,26,26,27,26,26,26,27,27,28,27,24,27,27,26,26,27,27,26,26,26,27,25,25,25,25,26,26,26,26,26,26,26,27,26,27,27,26,24,26,26,25,24,25,24,24,26,25,24,25,24,22,23,25,24,22,24,25,23,24,25,26,24,26,26,26,25,26,26,26,25,25,25,26,25,26,26,26,25,25,26,25,25,25,25,24,25,25,23,25,25,24,24,25,25,24,23,23,23,24,25,25,23,25,26,25,25,26,26,24,23,26,26,22,24,26,24,23,24,25,22,23,24,24,25,25,25,25,26,26,25,25,26,27,25,26,26,26,24,26,26,24,25,25,25,24,25,25,25,25,24,24,23,25,25,23,21,24,25,22,22,24,22,21,22,23,22,24,22,24,23,22,21,19,22,23,22,19,23,22,20,21,24,22,22,22,23,22,24,23,19,21,22,19,21,22,23,22,22,23,22,24,23,23,22,23,23,24,23,21,20,20,20,16,18,20,19,16,16,17,15,13,12,8,7,6,3,4,2,1,1,0,1,2,2,2,3,3,3,4,8,8,8,10,13,13,16,15,20,19,18,21,19,21,21,21,22,21,23,24,26,25,26,26,26,26,27,26,27,28,27,27,27,27,27,27,27,27,26,26,25,27,27,24,26,23,24,26,24,26,24,23,26,23,23,26,24,23,25,23,24,24,23,23,21,21,22,18,21,18,19,18,16,19,19,18,20,20,22,23,22,21,22,23,21,22,23,24,21,22,24,23,24,25,25,26,24,26,24,26,24,24,24,24,25,25,25,27,25,25,25,23,24,23,23,22,24,23,20,22,22,22,21,21,21,23,22,22,22,23,24,24,23,24,25,25,25,25,25,24,25,25,25,25,26,25,26,26,26,25,27,25,27,25,25,23,26,25,24,23,26,26,23,24,25,23,23,22,22,22,22,22,22,22,22,21,23,23,21,21,21,21,21,19,20,20,20,21,20,23,21,22,21,20,22,23,23,22,22,23,25,24,22,21,22,22,22,21,21,22,21,20,22,20,20,20,21,19,20,20,21,20,19,21,21,20,19,21,22,20,22,22,21,20,22,21,21,22,22,21,22,23,24,22,23,23,22,22,22,22,21,23,22,21,20,22,22,20,22,21,21,22,21,18,20,20,20,19,19,17,18,16,18,18,17,18,19,19,20,19,21,21,21,21,21,23,23,21,22,24,24,23,23,23,22,22,22,20,21,21,20,21,18,19,21,19,18,17,15,17,19,17,21,19,17,17,20,18,16,19,21,18,18,21,21,19,19,21,21,19,20,20,20,20,22,20,22,23,21,21,22,21,20,21,19,15,19,15,14,14,15,11,11,14,11,14,13,15,15,14,14,16,18,16,17,17,19,16,17,18,16,17,19,19,19,16,17,18,15,15,14,11,13,9,12,16,14,14,15,14,14,14,19,18,17,19,19,19,19,20,18,17,18,20,20,21,21,22,22,22,21,23,23,20,22,22,22,22,22,23,22,24,24,22,24,24,25,25,24,25,26,24,25,26,26,25,25,26,26,27,27,27,28,28,28,28,28,28,29,29,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29],[30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,28,28,28,28,27,28,28,27,28,28,26,27,27,25,28,28,28,27,27,26,27,27,26,27,26,25,26,25,24,23,22,22,21,21,19,19,19,19,19,18,18,16,16,14,13,13,12,12,12,12,14,15,14,17,14,17,18,19,18,21,19,19,18,20,21,20,18,20,21,20,21,22,23,23,24,24,24,24,25,25,25,26,26,26,26,27,27,26,27,27,27,27,27,26,27,27,27,26,27,26,27,26,27,27,26,27,26,26,27,26,28,26,26,26,27,26,26,25,26,26,27,26,26,27,25,27,27,26,27,26,26,25,26,26,25,24,25,25,24,26,25,25,24,24,22,22,25,24,21,22,26,24,24,25,27,25,26,26,26,25,26,25,26,26,25,25,26,26,26,26,26,26,26,25,27,25,25,25,25,25,25,22,24,25,23,24,25,25,25,23,24,23,23,24,25,22,25,25,25,25,26,25,24,23,27,26,22,24,25,24,23,24,24,21,23,22,24,23,25,25,25,25,25,25,24,25,26,25,25,25,26,24,25,26,24,24,23,26,25,25,26,25,25,24,25,22,25,26,25,21,25,25,21,23,25,23,22,23,23,24,24,22,24,23,23,21,18,23,23,21,20,22,21,20,22,24,22,22,23,24,22,23,22,19,21,21,19,21,20,22,20,21,22,22,23,22,23,21,23,22,23,22,20,21,21,20,18,18,20,19,15,17,17,16,14,11,9,7,5,5,4,2,2,1,1,0,1,2,2,3,3,3,4,6,9,8,8,14,14,16,15,19,16,18,20,20,20,19,22,23,21,22,24,22,25,26,25,26,26,26,26,27,28,26,27,27,27,26,27,27,26,26,26,25,26,26,25,25,23,24,25,24,24,25,23,25,23,23,25,24,24,24,23,24,23,23,22,23,22,22,19,20,18,19,17,18,20,19,20,20,20,22,21,22,21,21,22,21,22,22,23,22,21,23,23,24,25,25,26,25,25,24,25,23,24,23,24,24,23,25,27,24,26,25,24,23,22,23,21,23,23,21,21,21,21,21,21,20,22,22,22,21,24,23,24,21,23,24,24,24,25,23,24,25,25,26,26,25,24,26,26,25,26,25,25,25,24,25,22,24,24,24,22,24,25,23,23,25,23,22,21,22,21,22,22,22,22,19,22,22,20,20,21,20,19,19,19,19,20,20,22,22,22,22,22,22,21,21,22,21,22,22,23,25,24,23,23,23,25,25,23,23,21,22,22,22,21,19,19,20,20,20,19,19,18,18,20,17,19,18,20,19,20,19,20,19,20,20,20,20,22,21,21,21,23,23,22,22,23,21,21,22,23,21,21,21,21,20,22,21,21,22,21,21,21,20,20,21,19,19,18,17,15,16,15,16,16,15,15,17,18,18,17,20,19,20,22,22,23,24,22,23,24,24,23,23,24,22,22,22,22,21,21,20,19,18,18,18,16,16,17,15,15,18,16,17,18,17,17,17,18,17,19,20,20,19,21,23,19,22,22,20,18,19,22,20,20,23,20,21,23,23,21,20,20,21,21,17,16,18,15,14,13,17,8,9,13,11,14,14,14,14,12,16,18,17,14,18,20,17,17,19,19,18,17,17,17,18,17,14,17,17,13,12,13,14,11,13,15,14,14,15,15,14,15,19,19,18,20,20,19,18,18,20,16,17,19,17,19,19,20,20,21,21,23,21,21,22,23,22,21,23,22,21,24,24,23,22,24,26,23,24,25,25,24,26,26,26,25,25,25,26,28,27,26,27,28,28,28,28,28,29,29,29,29,29,28,29,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,29,29],[30,30,30,30,30,31,30,30,30,30,29,29,30,28,29,28,28,29,28,28,27,27,28,27,26,28,28,26,28,26,26,28,28,28,28,28,27,27,27,27,27,26,26,26,26,25,24,24,23,23,22,22,21,22,21,20,20,20,18,16,17,15,14,12,12,14,14,15,15,16,16,17,18,20,19,21,20,21,21,20,22,22,21,20,22,22,20,21,23,24,24,25,25,24,25,26,27,27,27,27,27,27,28,27,27,27,28,27,27,27,27,27,27,27,26,27,27,27,26,28,28,27,27,27,26,28,26,28,27,27,26,27,26,26,26,27,26,27,27,27,28,26,27,27,27,27,27,27,25,26,27,27,25,26,26,25,27,26,25,25,25,23,23,25,25,24,24,26,26,26,25,28,27,26,27,27,26,26,27,27,27,26,26,27,27,27,26,27,27,26,27,26,26,26,26,26,26,26,25,26,26,25,25,26,26,25,23,25,24,23,26,26,25,26,27,26,25,26,26,25,24,27,27,23,26,26,26,23,25,25,25,24,22,24,22,24,25,25,25,26,26,25,26,27,27,24,26,25,26,26,26,25,26,25,26,26,26,27,26,26,26,25,26,26,26,26,23,25,26,22,24,25,23,23,23,24,25,25,24,25,24,24,24,21,24,25,23,22,24,23,22,24,25,24,23,23,24,23,24,23,22,21,23,21,22,22,24,22,22,23,24,26,23,24,23,22,23,22,21,22,19,20,19,17,18,18,19,16,17,16,13,14,14,9,8,5,4,4,2,2,2,1,1,0,1,2,2,2,3,3,5,6,9,9,10,13,15,14,16,16,18,19,19,19,19,21,21,21,22,24,23,24,25,25,26,26,26,26,26,27,26,27,26,26,27,27,27,27,26,26,24,26,26,24,24,22,23,24,24,24,24,24,25,23,24,24,23,24,23,23,24,22,22,22,23,21,20,21,19,18,18,19,18,19,17,20,20,21,23,23,23,21,22,22,21,20,23,23,21,21,24,23,22,23,24,25,23,24,24,25,25,25,24,23,25,24,24,26,23,24,24,21,24,22,21,20,23,22,21,21,22,20,21,20,22,22,22,22,22,23,24,25,24,24,25,25,25,25,24,25,25,26,26,26,26,26,26,26,26,25,27,25,26,25,26,25,26,25,25,25,25,26,24,26,25,24,24,22,22,23,24,23,22,23,21,22,24,23,20,22,21,21,21,21,21,20,22,21,21,22,22,23,23,23,22,23,22,22,23,24,25,24,24,24,25,25,24,24,25,23,23,22,23,22,21,20,21,22,21,20,20,21,22,21,21,23,20,22,22,21,21,22,22,21,22,22,22,25,23,23,23,24,25,25,23,25,24,22,22,25,23,23,21,21,21,21,21,21,23,23,21,21,23,19,21,21,19,18,18,19,16,17,20,18,19,18,20,20,20,20,22,21,22,22,23,23,24,23,23,25,25,24,24,24,23,23,23,23,23,23,22,21,20,20,20,19,19,19,17,18,20,19,20,20,19,20,20,19,20,19,22,19,20,22,21,19,21,22,19,19,20,22,19,21,24,20,23,24,22,19,21,21,19,21,18,15,18,17,12,14,16,12,11,13,11,15,15,15,17,13,16,17,16,14,18,20,15,18,19,18,15,17,18,19,19,15,14,18,15,13,14,14,15,11,15,14,13,13,17,15,14,14,17,18,16,19,19,19,17,16,17,17,17,19,18,19,19,20,20,20,19,21,21,21,22,22,22,22,22,23,23,24,24,22,25,23,25,25,26,25,26,26,26,25,26,26,25,26,27,28,27,27,27,28,28,28,28,28,29,28,30,28,29,29,29,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,30],[30,30,30,30,30,30,30,29,29,29,29,28,29,28,29,28,29,28,28,28,28,27,28,28,27,28,29,27,28,28,27,29,29,29,28,28,27,28,27,28,28,27,25,26,26,25,24,24,22,23,22,20,20,20,20,20,19,19,18,15,16,14,15,13,12,16,15,17,18,17,19,18,20,22,20,21,22,22,22,19,24,24,23,22,24,23,22,22,23,25,24,25,26,25,25,26,26,27,28,28,28,28,28,28,28,28,28,28,27,28,28,28,27,28,27,28,28,28,27,29,28,27,28,28,27,28,28,28,28,27,27,27,27,27,27,27,27,27,28,27,28,27,28,28,28,28,28,28,27,28,28,28,26,26,26,25,27,27,25,26,25,23,25,27,26,24,26,28,26,26,27,27,27,28,27,28,27,28,27,27,27,28,26,27,27,28,27,28,28,26,27,28,27,26,26,26,27,27,25,27,26,25,25,26,26,25,23,24,24,24,26,26,25,27,27,27,26,27,27,27,25,28,28,23,26,27,27,24,25,27,24,24,25,25,25,26,27,27,27,27,27,27,27,28,27,27,27,28,26,28,27,27,27,26,27,26,26,26,27,27,26,26,26,26,26,26,24,26,26,22,24,26,23,21,24,24,24,26,22,25,25,23,22,21,24,25,23,21,25,24,22,24,26,25,22,24,26,24,25,23,19,22,23,22,21,23,25,23,23,25,24,27,25,26,24,24,24,24,22,22,20,21,22,17,18,19,20,17,18,18,17,16,16,11,8,7,5,4,3,3,2,2,2,1,0,1,2,2,2,3,4,5,6,9,11,10,14,14,16,16,17,18,17,19,20,20,20,20,22,23,25,23,26,25,26,25,26,25,27,27,26,27,27,26,26,25,26,26,25,25,24,25,26,24,25,23,23,25,22,24,24,22,26,24,22,26,23,24,24,24,24,24,23,22,23,21,22,21,21,20,18,19,18,20,19,19,20,21,23,24,23,21,23,24,21,22,23,24,21,24,26,24,23,25,25,25,25,26,25,27,26,26,26,26,26,25,26,27,26,25,25,22,24,25,24,23,24,24,21,23,24,22,23,21,23,24,23,24,24,25,25,26,26,25,26,27,26,27,26,25,26,26,27,27,26,27,27,28,28,27,28,27,28,27,26,26,28,27,27,26,27,27,25,26,26,25,25,22,24,24,23,22,23,23,23,22,23,22,21,21,21,21,21,19,22,20,21,22,21,23,22,23,22,21,21,24,25,22,23,24,26,26,24,23,22,24,23,23,23,23,22,22,24,21,21,22,22,21,22,21,22,21,21,22,21,21,21,23,21,19,23,23,21,21,24,22,22,25,24,23,23,25,26,24,24,25,24,24,23,24,23,23,23,22,22,21,22,20,21,22,19,22,22,19,21,21,18,17,18,19,16,18,18,20,19,18,20,19,22,21,22,22,22,23,23,24,24,22,23,25,26,24,25,24,23,24,23,22,23,23,21,22,20,20,22,21,19,20,18,19,20,19,21,20,19,18,21,19,19,19,22,19,18,21,22,19,19,22,20,19,19,20,20,20,22,20,21,22,21,19,20,20,18,20,17,16,15,14,14,15,16,15,11,14,12,16,16,16,18,13,17,18,16,15,17,20,16,18,18,18,18,17,19,17,18,17,16,15,15,16,13,12,16,12,16,14,16,15,18,16,16,16,18,18,17,20,19,18,18,19,17,18,18,19,19,19,19,21,19,20,19,22,21,20,21,22,23,23,22,22,24,25,25,24,26,26,25,27,27,26,27,26,27,27,27,26,26,27,28,28,27,28,28,28,28,29,29,28,29,29,30,29,29,29,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29],[30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,28,29,28,28,28,27,27,27,27,27,27,28,27,27,27,26,28,28,28,27,27,27,27,27,27,27,25,25,25,25,24,24,23,22,23,22,21,21,20,19,21,20,18,17,17,17,17,16,14,13,17,14,15,17,17,18,17,19,19,20,19,21,20,20,20,22,22,21,20,21,22,21,21,23,23,23,24,25,25,25,26,26,26,26,27,28,27,27,28,28,27,27,27,27,27,27,28,28,28,27,27,27,28,27,28,28,27,28,28,26,28,28,28,28,27,27,27,27,26,25,26,26,27,26,27,28,27,27,27,27,27,28,28,26,27,27,26,25,24,26,25,26,26,26,25,25,23,24,25,25,24,24,26,26,26,26,27,26,27,27,27,26,27,26,27,27,27,26,27,27,27,27,27,27,26,27,26,26,26,26,26,26,26,24,26,26,25,24,25,25,24,23,24,24,24,25,25,24,26,26,26,25,26,27,26,24,27,27,23,26,27,25,23,24,26,23,24,24,25,25,25,26,27,27,27,27,26,27,28,26,26,27,27,26,27,27,26,25,26,26,26,27,26,26,27,25,26,24,25,27,25,22,25,26,22,23,25,23,22,23,22,22,25,22,24,24,24,22,20,23,24,22,20,23,22,20,22,25,23,21,22,25,22,23,22,19,21,22,20,21,21,24,22,21,24,23,24,23,25,23,23,23,23,22,22,21,21,21,20,20,20,19,17,19,20,17,16,13,10,8,7,6,5,4,3,3,3,3,2,1,0,1,3,2,4,5,6,7,9,12,12,14,14,16,15,16,18,19,19,19,22,22,21,23,24,25,25,25,26,26,26,27,26,27,27,26,27,27,27,26,27,27,27,25,26,24,25,25,24,24,24,24,23,23,24,24,23,25,24,24,26,23,23,25,23,25,23,23,24,23,23,23,21,24,20,20,19,19,21,21,20,20,20,23,23,23,21,22,23,22,21,22,24,23,22,25,25,24,24,24,26,25,26,25,26,25,25,23,25,26,23,25,26,24,24,25,24,23,23,24,23,24,23,22,21,23,22,21,21,21,23,22,22,21,22,24,24,24,25,26,26,26,26,26,25,26,27,26,26,26,26,26,27,27,27,26,26,27,26,25,24,26,26,25,24,26,26,24,24,24,24,24,22,23,22,22,22,22,21,20,21,23,19,19,20,19,17,19,20,19,18,20,21,22,22,21,22,21,22,21,23,22,22,23,23,25,24,24,22,23,23,22,21,22,21,21,21,21,19,19,19,19,19,20,18,19,17,20,21,18,18,19,22,19,18,22,21,18,19,22,19,20,22,22,20,21,23,23,23,23,24,21,21,22,23,20,21,21,20,19,21,21,20,20,21,20,20,21,19,19,20,17,17,19,16,15,15,16,20,18,18,18,19,19,19,21,19,20,22,21,24,24,22,23,24,25,23,24,25,23,23,23,22,22,21,20,21,19,19,21,19,19,19,17,16,20,17,18,18,17,16,19,18,17,17,20,18,16,20,20,19,18,19,20,18,20,21,20,20,22,19,22,23,21,20,20,19,19,19,21,17,16,15,13,14,16,12,11,13,13,17,16,17,17,14,16,18,14,15,17,19,17,17,19,19,17,17,19,20,20,20,18,17,18,16,15,15,16,11,14,16,16,17,17,16,16,16,19,20,19,20,20,21,18,19,19,18,20,21,20,20,22,21,20,22,19,23,21,21,23,22,22,21,22,23,22,24,24,23,25,25,25,25,25,26,26,25,26,26,27,26,26,27,28,28,28,28,28,29,29,28,29,28,29,29,30,29,30,29,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29],[30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,28,29,28,28,28,27,27,28,27,27,28,28,27,28,27,26,28,27,28,27,27,26,26,26,26,26,26,25,25,24,24,24,22,22,22,22,20,20,21,19,19,19,19,17,16,15,15,14,12,12,14,14,15,16,15,18,18,20,20,21,21,21,21,21,21,23,23,22,22,23,24,23,23,25,25,25,25,27,27,26,26,28,27,28,28,28,27,28,28,28,28,28,27,28,28,28,28,28,28,28,28,28,28,27,28,28,27,28,28,27,29,29,28,28,27,27,28,27,27,26,27,27,28,28,27,29,28,28,28,28,28,28,29,27,27,28,27,26,26,27,26,27,27,26,26,26,25,24,27,26,25,25,27,27,26,27,29,28,28,28,28,27,28,28,27,28,28,27,28,28,28,28,28,28,27,28,27,28,27,28,27,27,27,26,27,27,26,26,26,26,25,24,25,26,26,26,26,27,27,27,27,26,28,28,27,26,29,29,25,26,28,27,25,25,27,24,25,24,26,25,25,26,27,27,28,27,27,28,29,27,27,28,28,27,27,27,27,26,27,27,27,28,27,27,27,27,27,26,27,27,27,24,26,27,23,24,26,24,23,25,24,25,27,24,24,26,25,25,22,25,26,23,23,24,23,22,24,26,25,24,23,26,24,24,24,22,22,24,21,22,23,25,24,23,25,25,26,24,26,24,24,24,24,22,22,22,21,21,20,19,20,20,19,19,19,17,16,15,10,9,7,6,5,4,4,3,3,3,3,2,1,0,1,3,3,5,6,7,8,10,13,14,13,16,16,16,18,19,18,18,21,21,20,22,24,23,25,25,24,26,26,26,25,26,26,26,26,26,27,26,27,27,26,25,25,24,26,24,24,23,23,24,23,23,24,24,24,25,24,24,25,23,24,23,23,24,23,22,23,22,22,21,21,21,19,20,20,20,20,21,21,22,22,25,23,23,22,23,23,23,23,22,23,23,23,25,24,24,23,25,25,24,26,25,25,26,25,25,25,26,24,25,25,25,24,26,24,24,23,24,22,24,24,24,22,23,22,22,22,23,23,23,23,23,23,25,25,24,25,27,27,25,27,27,26,26,27,27,27,27,26,27,28,27,27,27,27,28,27,27,26,27,26,27,26,27,27,25,26,26,25,26,23,24,24,25,23,24,23,22,21,23,21,20,20,21,20,20,21,20,21,22,23,24,25,23,23,23,24,24,24,24,24,24,24,26,25,26,24,25,26,25,23,24,23,24,22,22,21,21,20,21,20,22,19,21,19,20,22,21,20,21,23,22,20,23,22,21,21,23,22,22,25,23,23,22,25,25,24,24,25,23,22,23,25,23,22,21,22,21,21,22,20,23,24,21,21,23,21,21,22,18,19,19,19,17,16,18,18,18,17,18,19,20,20,22,21,22,23,23,25,25,23,25,25,26,24,25,26,24,24,25,24,23,23,22,20,19,21,21,19,19,20,17,17,19,17,19,19,19,18,19,19,19,18,21,18,20,22,22,20,21,22,21,20,21,23,21,22,25,23,23,25,23,21,21,21,20,21,22,16,18,17,14,15,17,12,11,14,12,15,17,19,17,14,17,19,16,15,19,21,16,18,22,20,18,19,20,20,19,19,14,17,17,14,13,15,16,11,15,17,16,13,19,18,16,16,20,20,19,21,20,21,20,20,20,19,20,21,19,21,20,21,21,21,22,23,22,23,22,23,24,23,24,24,23,25,25,25,26,26,26,25,26,26,27,26,27,27,27,28,27,27,28,28,28,28,28,29,28,28,29,29,28,28,30,28,29,29,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30],[30,30,30,30,30,30,30,29,29,29,29,28,29,29,29,28,29,28,27,29,27,27,28,27,27,28,28,27,28,27,26,28,27,27,28,27,26,27,26,26,25,26,26,25,24,24,25,23,23,24,23,22,21,22,21,21,20,20,19,17,18,17,16,15,15,17,16,17,19,19,20,20,22,23,24,23,24,24,23,23,25,25,24,24,25,26,25,23,25,26,25,25,28,27,27,28,28,27,28,28,29,28,29,29,29,28,29,28,28,28,28,29,28,29,28,28,29,29,28,29,29,28,29,28,27,29,29,29,29,28,28,28,27,27,27,28,28,28,28,28,30,28,29,29,28,29,29,29,28,28,29,28,27,27,28,26,28,28,27,26,27,26,26,28,27,26,26,28,28,28,28,29,29,28,29,28,27,28,28,28,29,29,27,28,29,29,28,28,29,28,29,28,28,28,28,28,27,28,26,28,28,26,26,27,27,25,23,26,26,25,26,27,28,28,29,28,27,28,29,28,27,29,29,27,28,29,28,27,27,28,27,27,26,27,26,26,27,28,27,28,28,28,27,29,28,28,28,28,28,28,28,27,28,27,28,26,28,28,27,28,27,28,28,28,28,28,26,27,28,24,26,27,24,24,26,23,26,27,24,24,27,25,26,23,26,27,25,25,26,26,23,26,28,27,26,25,27,26,26,26,24,25,26,24,25,25,26,26,25,26,26,27,25,26,25,25,26,25,23,25,22,23,22,20,20,21,21,19,19,19,17,17,16,13,10,7,7,5,5,4,5,4,4,3,3,2,1,0,2,4,4,5,6,7,10,11,12,14,15,15,16,17,18,17,19,19,21,20,21,21,24,23,25,24,25,25,26,25,26,26,25,26,25,25,25,26,26,25,24,25,23,25,23,24,22,23,23,23,23,24,24,23,25,24,24,24,23,23,23,23,24,24,21,23,22,22,21,20,22,19,19,21,20,21,20,21,22,24,26,25,24,24,25,25,23,22,24,24,22,23,26,24,22,23,25,25,25,25,26,26,26,27,27,26,27,25,26,26,26,24,26,23,25,25,23,24,25,25,24,24,24,22,23,24,23,25,26,25,26,26,26,27,27,26,27,27,27,27,27,27,26,27,27,26,27,26,27,28,27,27,28,27,28,27,28,28,28,28,27,27,27,28,27,27,27,26,27,25,26,26,26,24,26,25,23,23,25,22,21,21,21,21,21,21,22,21,22,22,23,25,23,24,23,25,22,25,26,24,24,25,27,26,26,25,25,26,25,24,25,24,23,23,23,20,21,23,22,21,23,22,21,21,23,24,22,22,23,25,24,23,26,24,23,24,25,24,25,26,25,25,25,27,26,27,26,27,26,24,25,27,24,24,24,23,23,21,23,20,23,23,20,22,23,21,19,21,21,20,20,20,20,21,21,21,21,21,20,22,22,23,23,24,23,24,25,26,26,25,26,27,27,25,26,27,25,25,26,24,23,24,24,23,21,22,23,22,23,22,21,19,22,20,22,20,22,21,23,21,21,20,22,19,21,22,22,21,21,22,21,22,21,23,22,21,24,22,23,23,22,20,20,20,20,21,19,17,19,20,13,16,18,14,14,17,16,18,19,20,19,17,18,19,17,16,18,20,18,18,21,19,18,18,19,17,18,18,15,16,16,14,14,14,15,12,13,16,15,15,18,19,18,17,19,21,19,22,21,21,20,20,17,19,19,19,19,20,19,20,20,21,21,21,21,23,22,22,24,23,23,24,24,25,26,25,27,26,26,26,27,27,28,27,28,27,27,27,27,27,29,28,27,28,28,28,28,28,29,28,29,28,30,28,29,29,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,29,30,30,29,30],[30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,28,28,28,28,28,27,27,27,27,27,27,27,27,27,28,26,28,27,28,28,27,27,27,27,27,26,26,25,26,25,24,25,24,23,23,24,23,21,21,21,21,19,20,19,17,18,18,17,14,17,19,19,21,23,22,23,21,24,25,25,23,25,26,25,22,26,26,24,23,26,27,25,24,26,27,25,27,28,28,28,29,28,28,29,29,29,29,29,28,29,29,29,29,29,30,29,30,29,29,29,29,29,30,30,30,30,28,29,30,29,29,30,30,29,29,28,28,28,28,27,28,28,28,28,29,30,29,29,29,29,29,29,30,29,29,29,29,28,27,29,27,28,28,28,28,28,26,28,29,28,26,28,29,28,29,29,29,29,29,29,29,28,29,28,29,29,29,28,29,29,29,29,29,29,28,29,28,28,28,28,28,27,28,27,28,28,27,26,27,27,26,25,27,27,27,28,28,28,29,29,29,28,29,29,29,28,29,30,27,28,29,29,27,28,29,27,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,28,28,28,28,29,28,28,28,28,28,28,29,26,26,27,26,25,26,25,25,28,25,27,28,27,27,23,27,28,26,24,27,27,24,26,28,27,25,25,28,27,26,25,24,25,27,25,25,26,28,25,25,28,27,27,27,28,27,28,27,26,25,25,24,24,24,23,23,23,23,21,23,23,21,20,18,14,9,9,8,6,6,4,5,4,4,4,3,3,2,1,0,2,4,4,5,7,9,10,10,11,13,15,16,17,18,20,19,20,22,21,22,23,24,24,26,25,25,25,26,25,26,25,25,26,25,25,26,26,26,26,25,25,24,24,24,24,23,23,23,23,22,24,24,23,24,25,23,25,25,25,25,23,26,26,24,25,25,24,25,24,25,24,23,23,23,24,23,22,22,24,26,27,25,24,26,27,26,24,26,26,24,25,28,26,25,27,27,28,27,28,28,28,28,28,28,28,29,27,28,28,27,27,28,26,27,27,26,25,27,27,25,25,26,26,25,25,25,27,26,26,26,27,27,28,28,28,29,28,28,28,28,27,28,28,28,28,28,29,29,29,29,28,29,29,29,28,29,28,29,29,28,28,29,28,27,27,27,27,28,24,26,26,27,26,26,26,24,24,26,22,22,22,22,20,21,21,23,21,23,23,24,26,24,27,24,26,24,26,27,24,25,27,27,27,26,25,27,27,25,23,27,24,24,23,25,21,22,24,24,21,23,23,23,21,23,25,21,21,24,26,22,23,25,25,24,23,26,25,23,27,26,25,25,27,28,27,26,27,26,25,26,27,24,25,25,24,23,23,25,22,23,24,22,22,23,21,22,23,19,19,22,19,21,20,21,22,22,22,22,23,24,24,24,25,24,26,25,27,27,25,26,28,28,26,28,27,25,26,26,26,25,24,24,25,22,23,24,25,24,24,23,21,25,22,22,22,22,22,23,22,22,22,24,21,21,23,22,21,22,23,23,21,23,23,22,22,24,22,23,23,22,21,22,21,20,23,18,17,19,20,15,16,20,16,14,20,19,20,20,24,22,21,21,21,20,20,22,22,20,21,23,22,20,21,21,19,21,21,18,18,20,16,14,15,20,14,16,20,21,18,21,22,21,19,22,23,21,23,24,23,23,24,22,20,21,22,21,22,22,22,22,23,21,25,24,23,25,24,25,24,25,25,26,26,26,27,28,27,28,28,28,27,28,28,29,28,29,27,28,29,29,29,29,29,30,29,29,29,30,29,30,29,30,30,30,29,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,30,30,30,30,30],[30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,28,28,28,28,28,28,28,28,26,28,28,28,28,27,27,28,27,27,27,26,26,25,25,24,24,23,22,23,24,22,21,22,21,20,20,20,19,18,17,19,18,16,17,20,20,21,23,23,22,23,24,25,26,24,26,27,25,24,25,27,25,25,26,28,26,26,27,28,27,28,28,28,29,29,29,29,29,29,30,29,29,29,30,29,29,29,29,30,29,30,30,30,29,29,29,30,30,30,30,29,30,30,29,30,30,30,29,29,28,29,29,28,28,29,29,28,28,29,29,29,29,29,30,30,29,30,29,29,29,29,28,28,29,28,29,28,29,28,28,27,27,29,28,27,28,29,28,29,29,29,29,30,30,29,28,29,29,29,29,29,29,29,30,29,29,29,30,29,29,27,29,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28,28,27,29,29,29,29,29,29,29,28,30,30,28,29,30,29,27,28,29,28,27,27,28,28,28,29,29,29,29,29,29,29,30,29,29,30,30,29,29,29,28,28,29,29,28,29,29,29,29,29,29,28,29,29,28,28,29,29,26,28,28,28,26,27,27,27,28,27,27,28,28,28,24,27,28,27,26,28,27,25,27,29,28,26,27,28,28,27,26,25,26,28,24,26,27,29,25,26,28,28,28,28,29,28,28,28,28,26,25,25,25,26,24,24,24,24,22,24,23,24,22,19,15,11,9,9,8,9,7,7,5,6,6,4,4,4,3,2,0,3,4,4,6,8,10,11,12,14,13,15,18,16,19,20,20,22,20,21,24,24,24,26,25,27,27,27,26,27,27,26,27,26,26,26,26,26,26,24,25,23,25,24,23,24,22,23,24,23,24,24,24,26,24,24,26,25,26,25,26,27,26,26,27,26,26,25,25,25,24,25,23,24,26,25,23,24,25,27,28,27,25,27,28,27,25,27,28,26,26,29,28,27,28,28,29,29,28,28,29,29,29,28,29,29,27,29,28,27,28,28,26,27,28,27,26,29,28,26,26,28,27,25,26,26,28,26,27,26,28,28,28,27,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,28,29,29,28,29,28,27,28,26,27,27,27,26,27,26,25,25,27,23,23,24,23,22,23,22,23,23,25,24,26,27,26,27,26,26,26,27,27,26,27,27,28,27,28,27,28,28,26,26,28,25,26,26,27,23,24,25,25,23,24,25,24,22,24,26,23,23,25,27,24,25,27,26,25,25,27,25,25,27,28,25,26,27,28,27,28,28,27,25,27,28,25,26,26,25,24,26,26,24,26,25,24,24,24,24,24,24,23,22,23,21,21,20,22,22,23,22,21,23,22,23,25,24,24,26,26,28,27,25,27,28,28,27,28,28,26,26,27,27,25,24,25,25,22,24,24,24,23,24,22,22,24,23,24,22,22,24,24,23,23,22,25,23,24,25,25,23,25,25,25,25,26,27,25,25,27,26,26,27,25,24,25,25,24,25,22,20,20,22,18,19,21,18,17,21,18,22,23,25,24,22,24,24,22,23,25,25,23,23,26,25,23,23,24,23,24,23,20,21,20,17,16,18,20,16,20,21,20,22,23,22,23,23,25,25,22,25,25,25,25,24,24,23,23,25,22,25,25,26,25,26,24,27,26,25,27,27,27,25,27,28,26,28,29,27,28,28,29,29,29,29,29,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,30,30,30,31,30,31,30,31,30,31,31,30,31,31,30,30,30],[30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,29,28,29,28,28,29,28,28,28,29,28,28,28,27,28,28,29,28,28,27,28,27,28,27,27,26,26,26,26,26,25,23,24,25,24,22,24,22,23,22,21,20,20,19,19,18,16,18,19,21,22,22,24,24,25,25,27,27,26,27,27,26,25,27,28,27,26,28,28,28,27,28,29,28,28,29,29,29,30,30,29,30,30,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,29,29,29,29,28,28,30,29,29,30,29,30,29,30,29,30,30,30,30,30,30,30,29,29,28,30,29,29,29,29,29,29,28,28,29,29,28,28,30,29,29,29,30,30,30,30,30,29,30,29,29,30,30,29,29,30,30,29,30,30,29,30,29,30,29,29,29,29,29,28,29,29,29,29,29,28,28,27,29,29,29,29,29,29,29,30,29,29,30,30,30,29,30,30,29,29,30,29,28,29,29,29,28,28,29,28,28,29,29,29,29,29,29,29,30,29,29,29,30,30,30,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,30,29,29,29,28,29,29,29,28,28,27,28,29,27,28,29,29,29,26,29,29,28,28,28,29,26,28,29,29,28,27,28,29,28,28,27,26,28,27,27,27,29,27,27,28,28,29,27,28,28,28,29,27,26,27,26,25,26,25,25,24,25,23,23,23,23,22,20,18,13,13,10,9,11,10,11,7,6,8,6,5,4,4,3,1,0,2,3,5,6,7,10,12,13,13,15,17,18,19,19,20,22,21,21,23,23,24,26,23,26,25,25,26,26,26,25,25,25,25,26,26,26,26,25,25,24,24,24,22,24,23,23,23,23,24,23,23,24,24,23,24,24,24,25,26,26,26,25,26,24,25,24,24,25,23,24,25,24,26,25,25,25,27,29,28,27,27,28,28,27,26,28,28,26,27,29,27,26,27,28,27,27,28,28,28,29,28,29,28,29,28,28,27,28,26,28,26,27,29,26,27,28,28,26,27,27,26,27,27,28,28,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,30,29,29,29,29,29,29,29,30,29,29,29,29,28,30,28,28,29,29,28,29,29,26,27,29,26,25,25,25,24,25,25,25,25,26,26,26,28,28,29,28,29,27,28,29,28,27,28,29,28,28,27,28,28,28,27,29,27,27,27,28,25,25,27,27,24,27,27,25,24,27,28,25,25,27,28,26,27,28,27,26,27,29,27,27,28,29,29,28,28,29,29,29,29,29,27,29,29,28,28,28,27,27,27,27,26,28,28,26,27,27,26,25,26,25,24,26,24,25,23,25,25,24,24,23,24,25,26,27,26,27,27,28,28,28,27,28,29,29,28,28,29,27,28,28,28,26,27,27,26,24,25,25,25,24,25,23,24,25,24,25,25,24,25,25,24,25,25,26,24,25,27,27,25,27,27,26,26,27,27,27,27,28,27,28,28,27,26,27,27,25,27,23,21,24,24,17,22,23,19,19,22,20,22,23,24,24,22,24,24,23,23,25,26,21,25,26,26,23,25,26,24,25,24,21,22,23,18,17,19,20,15,18,21,19,20,24,24,22,23,25,25,24,26,26,26,26,26,25,23,25,26,25,27,25,27,27,27,26,28,27,28,28,28,28,26,27,28,28,29,29,29,30,29,29,29,29,29,29,29,30,30,29,29,28,29,30,29,29,29,29,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,31,31,30,30,31,30,30,30,31,31,30,31,31,30,30,31,31,31,31,30,31,31,31,31,31,31,30,31,31],[31,31,31,30,31,31,30,30,30,30,30,29,30,29,30,29,29,29,28,29,28,28,28,28,28,28,29,28,28,28,27,28,27,28,28,27,27,27,27,27,26,26,25,25,25,25,25,25,23,24,25,24,22,24,23,22,23,24,22,22,21,22,22,20,22,23,24,24,26,27,26,27,28,28,29,28,29,29,29,26,28,29,29,28,29,30,29,28,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,30,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,29,30,29,29,29,29,29,29,30,29,29,29,30,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,31,29,30,30,30,29,30,30,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,30,30,29,30,30,30,30,30,30,29,30,29,29,30,30,29,29,28,29,30,29,29,30,30,30,28,30,30,29,29,30,29,28,30,30,30,29,29,29,29,29,29,28,28,29,28,29,29,30,28,28,29,29,30,29,29,29,29,29,29,28,28,27,27,27,26,26,26,27,24,26,25,24,25,21,19,16,16,14,11,12,11,11,9,7,8,7,6,6,4,4,4,2,0,2,4,5,6,7,9,13,13,15,17,17,19,19,19,21,21,21,22,24,23,26,25,26,26,26,25,26,25,24,25,24,24,25,25,25,26,23,24,23,24,23,24,23,23,22,24,24,24,26,24,26,25,24,26,25,26,26,25,27,26,25,27,26,26,25,26,25,25,25,26,24,27,26,26,26,28,29,29,29,28,29,29,28,28,29,29,27,28,30,29,27,28,29,28,29,29,29,29,30,29,30,29,30,29,29,29,29,27,29,26,28,29,27,28,29,29,27,28,29,27,28,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,30,29,29,29,30,29,29,29,28,28,29,27,27,27,27,27,26,26,27,27,28,28,29,30,29,29,28,29,28,29,29,29,29,29,30,30,30,29,30,30,29,28,29,28,28,29,29,26,26,28,29,26,28,28,27,25,28,29,27,27,29,29,27,28,29,28,28,28,29,28,28,29,29,29,29,28,29,29,29,30,30,28,29,30,28,29,28,29,28,29,28,26,28,28,27,27,27,27,27,27,26,26,27,24,26,26,27,27,26,26,27,27,27,28,28,28,28,29,29,30,29,28,29,30,29,29,30,30,28,29,29,29,29,29,28,28,27,27,27,28,28,27,27,25,27,27,28,26,26,26,27,26,26,26,27,26,26,28,28,26,27,27,27,27,28,27,27,26,29,27,28,28,27,26,26,27,25,27,25,22,25,25,21,24,26,23,22,25,24,26,26,27,26,25,25,25,26,24,25,26,22,25,26,27,23,25,25,24,24,24,19,23,23,18,18,19,19,19,21,22,21,23,24,25,25,23,26,26,25,27,27,26,26,26,26,24,25,26,24,26,25,26,26,27,26,28,27,28,28,28,29,28,28,29,29,30,29,29,30,29,30,30,30,29,29,29,30,30,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31],[31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,28,28,28,28,28,29,28,29,28,29,29,27,28,28,27,28,27,27,26,26,26,25,27,25,24,26,26,25,23,24,24,23,23,23,22,22,22,23,23,21,24,26,25,27,27,28,28,27,29,29,29,28,29,29,29,28,29,29,29,28,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,31,30,30,30,30,30,31,31,31,30,30,30,31,31,31,30,30,31,30,30,30,31,30,30,30,30,30,30,29,29,29,30,29,30,30,30,30,30,30,30,31,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,30,29,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,29,29,29,30,29,29,29,30,29,29,30,30,30,30,30,29,30,30,30,29,29,28,28,29,27,28,28,27,26,28,27,28,26,25,22,19,18,17,15,13,12,13,12,11,10,7,9,7,6,5,5,4,2,0,2,4,5,6,9,10,11,14,16,16,19,19,19,21,21,21,23,25,23,26,24,25,26,26,25,26,25,24,25,24,25,24,25,25,25,24,24,24,24,24,22,23,22,21,23,22,24,24,23,25,24,24,26,24,26,26,26,27,27,26,28,27,27,27,27,27,27,28,27,27,28,29,27,27,29,29,30,29,28,30,30,29,28,29,30,28,28,30,30,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,28,29,30,29,28,30,30,28,29,30,29,28,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,30,30,29,30,30,29,28,30,28,28,28,28,27,27,27,27,27,28,27,29,30,29,30,29,30,29,29,29,29,29,29,30,30,30,29,30,30,29,29,30,29,29,29,30,27,28,29,28,27,29,29,28,26,29,29,28,27,29,29,28,29,29,29,28,29,29,29,28,30,30,29,29,29,30,30,30,30,30,29,29,30,29,30,29,29,28,29,29,27,29,29,28,28,28,27,27,28,27,27,28,26,28,26,27,27,28,27,27,28,28,28,29,29,28,29,29,30,30,29,29,29,30,29,30,30,29,29,30,29,29,29,28,29,27,28,28,28,28,28,28,27,29,28,28,28,27,28,28,27,28,27,29,27,28,29,29,27,29,28,29,28,29,29,28,28,29,28,29,29,28,27,27,27,27,28,27,24,27,28,23,26,27,25,24,28,26,27,27,29,29,27,28,27,28,27,27,28,26,27,28,28,26,27,28,27,27,26,23,25,25,22,21,22,24,24,25,25,25,26,27,27,27,27,28,28,27,29,29,28,28,28,27,26,27,28,26,28,27,28,27,28,27,29,29,29,29,29,29,28,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,30,31,31,31,31,30,31,30,30,30,30,30,30,30,30,30,29,30,29,29,30,29,29,29,29,29,29,30,28,29,28,29,29,28,28,29,28,28,28,28,27,27,27,26,27,26,24,25,26,24,25,25,24,24,23,23,22,21,21,22,21,20,24,25,27,26,27,27,28,28,29,29,29,28,30,30,29,28,29,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,31,31,30,30,31,30,30,31,31,30,30,31,30,30,31,31,31,30,31,30,31,30,31,30,31,31,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,31,31,30,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,31,31,30,30,31,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,29,30,30,30,30,29,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,29,28,29,28,28,28,28,27,26,23,21,22,21,16,18,17,15,14,15,13,10,10,10,9,7,7,6,4,2,0,1,4,5,7,8,10,12,14,16,18,18,20,20,20,21,23,25,23,26,25,26,26,27,25,27,26,25,26,25,25,26,27,26,26,24,25,22,23,24,21,24,22,22,24,22,25,24,23,26,25,24,26,26,26,26,27,27,27,26,27,27,27,26,27,28,27,28,28,28,29,29,29,29,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,29,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,31,30,31,31,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,28,28,28,29,28,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,29,29,30,29,29,30,29,28,28,30,30,28,29,29,29,28,29,29,28,29,30,30,28,30,30,30,29,29,30,30,29,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,29,29,29,29,28,28,29,28,28,27,27,27,28,27,28,28,28,28,29,28,29,29,29,30,30,29,29,30,30,29,30,30,29,30,29,30,29,29,29,29,28,28,28,29,28,29,28,27,28,28,29,28,28,28,28,28,28,28,29,28,28,30,29,28,30,30,29,30,30,30,29,29,30,29,30,30,29,29,29,29,29,29,29,27,28,28,25,27,27,26,25,27,26,27,28,28,28,27,28,27,28,28,28,28,27,29,29,29,28,28,29,28,28,27,26,27,27,23,23,26,26,23,26,28,27,27,29,28,28,28,29,29,29,30,29,29,29,29,28,27,28,29,28,29,28,29,28,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,29,30,29,29,29,29,28,28,29,29,29,29,29,28,29,28,29,29,28,28,28,28,28,28,28,27,26,27,26,27,25,26,27,27,25,25,26,26,25,25,25,24,23,23,24,23,23,26,26,27,27,27,29,29,29,29,29,30,29,30,30,30,29,30,30,30,30,30,30,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,31,31,30,31,30,30,30,30,30,31,30,30,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,30,31,30,30,30,31,31,30,31,31,31,30,31,31,31,31,31,30,31,31,31,30,30,31,31,30,31,31,30,30,30,31,30,30,30,30,30,30,31,30,30,31,30,31,31,31,31,31,30,31,30,30,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,31,31,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,31,31,30,30,31,31,30,31,31,31,30,30,31,31,31,31,30,30,30,31,30,30,31,30,31,30,30,30,30,30,30,30,30,30,31,31,30,30,31,30,30,30,30,30,30,29,30,30,30,30,29,30,30,31,30,30,30,30,30,30,29,30,29,29,29,28,28,29,29,28,28,27,28,27,25,24,22,22,21,17,19,20,19,15,14,15,13,11,10,10,7,7,5,5,4,2,0,1,3,4,7,8,10,13,14,16,17,18,20,19,20,23,23,23,25,24,24,24,25,24,26,24,24,25,24,24,25,25,24,24,23,24,21,24,23,22,23,23,22,23,23,25,25,24,25,25,24,25,25,26,26,26,27,26,26,27,27,27,26,27,26,26,28,29,27,29,29,29,29,30,30,30,30,29,30,30,30,29,30,30,30,29,30,30,29,29,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,29,30,28,30,30,29,29,30,30,29,30,30,30,30,30,30,31,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,31,31,31,30,30,30,31,30,30,30,30,29,29,30,29,30,30,30,31,31,30,31,30,31,30,30,30,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,31,29,30,30,30,29,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,30,30,31,30,31,30,30,30,30,30,29,30,30,29,30,30,29,30,30,29,29,30,28,29,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,31,31,30,31,31,30,31,30,31,30,30,30,30,29,29,30,30,29,29,29,29,29,29,30,29,29,29,29,29,29,28,29,29,29,30,29,29,30,30,30,30,30,30,30,29,30,30,30,30,29,29,29,29,28,29,29,27,29,29,25,28,28,27,26,28,28,28,29,29,29,29,29,28,29,29,29,29,28,29,29,30,28,29,29,29,29,27,25,28,28,23,24,26,26,24,27,27,26,27,29,28,28,28,30,29,29,30,29,30,29,29,29,28,28,28,28,29,29,29,29,29,29,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,30,31,30,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,29,29,29,29,29,29,28,28,28,28,28,28,29,28,29,28,29,29,28,28,28,28,28,28,28,26,26,27,26,27,26,25,26,27,25,23,25,25,25,25,26,24,24,25,25,25,26,27,28,28,29,29,30,29,29,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,31,31,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,30,31,30,31,31,30,30,31,31,30,31,31,31,31,31,31,30,30,31,30,31,31,31,30,30,31,31,30,31,31,30,30,30,31,30,30,30,30,30,30,31,30,30,30,30,30,31,31,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,31,31,31,30,31,30,31,30,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,31,31,31,31,31,31,31,30,30,30,30,31,31,31,30,30,31,30,31,31,30,30,30,30,30,30,31,30,30,31,30,31,31,31,30,31,31,30,30,30,29,30,30,29,30,30,30,29,30,29,29,28,27,26,24,24,23,19,21,18,20,17,14,17,16,13,12,12,10,8,8,6,5,4,2,0,1,3,5,6,8,10,11,13,15,16,18,18,19,21,23,23,24,23,23,24,24,24,25,24,23,24,24,24,24,25,25,25,23,24,23,23,22,22,22,22,22,23,22,24,23,24,24,23,24,26,25,26,26,25,28,27,26,27,27,27,27,27,28,28,29,29,29,30,30,29,30,30,30,30,30,29,30,30,30,29,30,30,29,29,30,30,29,29,30,29,29,30,30,30,31,30,30,30,30,30,30,30,30,29,30,29,30,30,29,29,30,30,30,30,30,30,30,30,30,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,30,30,31,30,30,31,31,30,31,30,30,30,31,30,30,30,30,29,30,30,29,29,30,29,30,30,30,31,30,30,30,30,30,30,30,31,31,31,30,30,31,31,30,30,31,30,30,30,31,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,29,30,30,29,30,30,29,29,30,28,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,30,31,30,30,31,31,31,30,30,30,29,29,30,30,30,30,29,29,30,30,30,30,29,30,30,29,30,30,30,29,30,30,30,29,30,30,30,30,30,30,29,29,30,29,30,30,30,28,28,29,28,29,28,27,29,29,27,29,29,28,28,29,29,30,29,30,30,29,30,29,29,29,29,29,28,29,29,29,28,29,29,28,28,27,25,28,28,23,23,27,26,27,28,27,27,29,29,29,29,30,30,30,29,29,29,29,29,29,29,27,27,28,28,29,28,28,28,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,30,30,30,30,30,29,29,30,29,29,29,29,29,29,29,28,30,29,29,29,29,29,28,28,29,28,28,27,28,27,27,27,27,25,27,26,25,25,26,25,25,25,25,25,23,24,25,25,25,28,28,28,29,29,30,30,30,30,31,30,30,31,30,30,30,31,31,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,30,30,29,30,29,29,29,28,26,27,25,23,20,23,22,21,19,18,17,16,15,14,14,11,10,10,7,7,6,4,2,0,1,4,4,5,7,7,11,12,14,16,17,18,19,21,21,24,22,24,24,25,25,26,24,24,24,24,25,25,25,25,25,23,24,21,23,23,22,22,22,22,22,22,24,25,23,26,24,25,25,25,27,25,27,28,27,26,28,27,28,27,27,28,28,29,29,29,30,30,29,30,30,31,31,30,29,30,30,30,29,30,30,29,29,30,30,29,29,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,29,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,30,31,31,30,31,30,30,30,30,31,30,30,31,31,30,30,30,30,30,30,31,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,31,30,30,30,30,30,30,30,29,30,29,30,29,30,30,30,30,30,30,30,30,31,30,30,31,30,31,31,30,31,31,31,31,31,31,30,30,30,31,31,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,30,29,28,29,29,27,29,29,28,28,29,29,30,30,30,30,30,30,30,30,29,30,30,28,29,30,30,29,29,29,29,29,27,26,28,28,23,25,28,26,26,28,27,27,29,29,28,29,29,30,30,29,30,29,30,30,29,29,28,27,29,28,30,29,30,29,30,29,30,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,28,29,28,29,29,27,28,28,27,28,27,28,28,27,27,27,27,27,26,27,27,25,26,28,26,26,26,27,26,25,25,26,27,26,29,29,29,29,30,30,30,30,30,31,31,30,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,30,31,31,30,31,31,31,31,31,31,30,30,30,30,31,30,30,30,30,30,30,30,30,29,28,26,26,27,24,22,24,24,24,23,21,20,19,17,17,16,13,12,11,10,9,7,6,5,2,0,1,3,5,6,6,8,10,12,17,17,18,21,20,23,25,24,25,24,25,24,26,25,24,25,24,24,24,24,25,24,23,23,22,24,22,20,22,21,21,22,21,24,24,24,26,23,25,27,25,27,27,27,28,28,27,29,28,29,28,28,29,28,29,28,30,30,30,29,30,30,31,31,30,29,30,31,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,31,31,30,30,30,30,30,31,30,30,30,30,28,30,30,29,28,30,31,30,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,31,31,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,31,31,30,30,31,31,30,30,31,31,30,30,31,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,29,29,29,30,29,28,29,30,29,29,30,29,30,30,31,30,29,30,30,30,29,30,30,29,29,30,30,29,29,29,29,29,25,26,28,27,22,26,27,26,27,28,27,25,29,29,28,29,30,30,30,29,30,29,30,29,29,29,27,26,29,27,30,29,30,29,30,29,31,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,29,30,30,29,29,29,29,29,29,28,29,29,28,29,29,27,29,28,29,29,28,28,28,27,28,27,28,27,27,27,27,27,27,26,26,26,25,25,26,25,25,25,26,24,24,25,26,25,26,27,28,28,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,30,30,30,31,31,31,30,30,30,30,30,31,30,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,30,31,30,31,30,30,30,30,31,30,31,30,30,30,31,31,31,31,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,31,31,30,30,30,31,31,30,30,31,30,30,31,31,31,31,31,30,30,31,31,31,30,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,29,30,30,29,30,30,30,29,30,29,28,28,28,25,26,24,23,22,23,23,22,21,18,19,18,15,16,16,14,11,13,11,8,8,7,6,4,2,0,1,3,4,5,6,7,11,14,14,15,18,19,19,23,20,22,22,24,23,24,24,23,24,23,24,24,25,25,25,23,23,21,23,23,20,23,20,21,22,22,23,24,23,25,24,24,26,24,26,25,26,27,26,26,27,26,26,27,27,28,27,29,28,29,30,30,29,30,29,30,30,30,29,30,30,30,29,30,30,28,29,30,29,28,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,27,29,30,29,28,30,30,29,29,30,30,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,31,31,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,30,31,30,31,30,30,30,31,31,31,31,30,30,30,30,31,31,30,31,31,30,31,31,30,30,31,31,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,31,31,31,31,30,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,29,30,30,30,30,29,30,30,29,29,30,29,29,29,29,30,30,30,30,30,30,30,31,30,30,31,31,30,31,30,31,31,31,31,30,31,30,30,30,31,31,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,29,29,30,29,29,29,29,29,29,29,29,29,27,28,29,29,26,29,29,28,29,30,29,30,29,30,30,29,29,30,30,29,30,29,28,29,29,29,27,28,29,28,28,26,26,28,27,23,25,26,25,26,28,26,25,29,28,28,28,29,30,30,29,30,29,29,29,28,29,27,26,27,27,29,28,29,29,30,28,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,30,30,29,30,29,28,30,29,29,29,29,28,29,29,29,28,29,28,28,28,27,28,27,26,26,27,25,26,26,26,26,26,27,26,24,25,26,26,26,28,29,29,30,30,30,30,30,30,30,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,31,30,31,31,31,31,31,30,30,31,30,30,30,29,30,30,29,30,30,30,29,30,30,28,28,28,24,26,27,24,23,25,25,25,22,22,22,20,19,20,19,17,13,15,12,11,9,7,6,6,3,2,0,1,3,3,4,7,7,11,12,14,16,17,19,21,21,22,22,24,22,24,23,23,23,23,24,24,24,24,24,23,22,21,22,21,21,21,21,21,22,22,23,23,22,24,25,25,25,24,25,25,26,26,26,26,27,26,27,26,27,27,27,29,28,30,30,30,28,30,29,30,30,30,28,30,30,29,28,30,30,28,28,30,30,28,29,30,30,30,30,30,30,31,30,30,30,30,29,30,29,29,29,29,26,29,30,29,27,30,30,29,29,30,30,30,30,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,30,31,31,31,30,31,31,30,31,30,31,30,31,31,30,30,31,31,30,31,30,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,30,29,30,31,29,30,30,30,30,30,29,30,30,29,30,30,29,30,29,30,30,30,30,30,30,30,31,31,30,30,31,30,31,31,30,31,31,31,30,31,31,30,31,31,30,31,30,31,31,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,29,30,31,30,29,30,30,30,30,30,30,30,30,30,29,29,30,30,29,30,30,29,29,27,28,30,30,28,30,30,28,29,30,30,30,30,30,30,29,30,29,30,29,30,30,29,28,29,29,27,28,29,28,27,24,26,28,26,21,26,25,25,26,27,26,26,28,28,27,28,29,30,30,28,29,29,29,28,28,28,25,25,28,26,29,28,29,28,30,29,30,29,30,31,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[30,31,30,30,30,31,31,30,30,30,30,30,30,29,30,29,30,30,29,30,29,29,30,29,28,29,28,28,28,29,28,29,28,28,28,28,28,28,28,28,28,28,28,27,27,27,28,26,25,28,27,25,25,26,26,26,26,27,25,26,26,26,26,28,28,29,28,29,29,30,29,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,29,29,29,28,29,28,25,28,27,24,24,26,24,25,24,21,22,23,21,19,20,19,15,16,16,12,11,9,6,7,6,3,2,0,1,3,4,4,6,8,11,13,15,16,19,19,19,22,22,23,22,24,23,23,24,23,24,23,23,23,23,21,24,20,22,22,19,22,19,22,22,21,23,23,22,24,22,25,27,24,26,26,26,27,27,26,28,27,27,27,27,28,28,29,28,28,29,29,27,29,28,30,30,30,28,29,29,29,28,29,29,28,28,29,29,27,29,29,29,29,29,30,30,30,30,29,29,30,28,29,29,29,28,29,27,28,29,29,27,29,30,29,28,30,29,29,30,29,30,30,30,29,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,30,29,29,29,29,28,29,29,29,29,29,29,30,30,29,30,29,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,29,29,28,29,30,28,29,28,29,29,30,28,29,29,28,29,30,29,29,29,29,30,29,29,30,30,29,30,30,29,29,30,30,30,30,29,30,30,30,30,30,31,30,30,31,30,30,30,30,30,29,30,30,30,29,29,30,29,29,30,30,29,28,30,29,28,29,29,29,28,29,29,29,28,30,29,29,29,29,30,29,29,29,27,28,29,28,28,28,29,28,28,27,28,28,28,27,29,29,28,29,29,29,29,29,30,30,28,29,29,29,28,29,29,28,27,29,28,28,27,28,28,27,25,24,26,25,21,25,26,25,26,27,26,26,28,28,26,28,28,29,29,28,29,28,28,28,26,28,26,24,27,26,28,27,28,28,29,28,29,28,28,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30],[31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,30,30,30,29,30,29,29,30,29,29,30,30,29,30,29,28,30,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,28,27,28,28,27,26,27,27,27,27,27,26,25,27,27,27,26,28,28,28,30,29,30,30,30,30,31,30,31,30,30,30,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,30,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,31,31,31,30,30,31,30,31,30,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,28,29,30,30,29,30,29,28,28,28,25,27,27,23,24,26,26,25,24,22,24,23,21,21,22,19,15,19,16,14,13,11,8,7,6,5,3,1,0,1,2,4,5,5,8,11,13,15,16,19,19,21,21,22,23,24,24,23,24,23,24,24,25,25,25,24,24,22,23,23,21,21,20,21,23,22,24,24,24,25,25,25,26,25,27,26,27,28,27,26,28,27,27,27,26,27,28,29,28,29,30,30,28,30,29,30,30,30,28,30,30,29,28,29,30,28,28,30,29,26,29,30,30,30,29,30,30,30,30,29,30,30,29,30,29,29,29,29,27,29,29,29,27,30,30,29,29,30,30,30,30,30,30,31,30,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,30,29,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,31,30,30,30,30,31,30,30,30,30,30,31,31,30,30,30,30,30,31,31,31,31,31,30,31,30,31,31,30,30,31,31,30,30,30,30,29,30,31,29,30,29,29,30,30,29,30,30,29,29,30,29,30,29,30,30,30,30,30,30,30,30,31,30,31,31,30,31,31,30,31,31,31,30,30,31,30,31,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,31,30,30,30,29,30,29,29,30,29,29,30,29,28,29,29,28,29,27,28,29,29,28,29,29,28,29,30,29,29,30,30,30,29,30,30,30,28,29,29,28,28,29,29,26,27,28,26,27,25,25,26,26,22,25,25,25,26,27,26,25,28,28,27,28,29,29,30,27,29,28,29,28,26,28,25,24,26,26,28,27,28,28,29,29,30,29,29,30,30,29,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,29,29,30,30,30,29,30,29,29,29,29,29,29,29,29,29,29,28,28,27,28,28,26,27,28,27,27,27,28,27,27,28,28,27,27,29,30,29,30,30,30,30,30,30,30,31,30,30,31,31,30,31,30,30,31,31,30,31,31,31,31,31,30,31,31,31,31,30,31,30,31,30,31,30,31,31,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,31,31,30,31,31,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,31,30,30,30,31,31,30,30,30,30,31,30,30,30,30,30,30,31,30,31,30,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,31,30,30,31,30,31,31,31,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,31,30,30,31,30,30,30,31,30,31,30,30,30,30,30,30,30,29,29,30,30,29,30,30,29,29,28,26,27,28,26,26,26,25,27,24,23,25,24,22,22,23,20,17,20,18,16,15,12,10,8,7,6,5,4,2,0,1,2,4,4,6,8,12,13,16,19,18,21,21,22,23,23,24,22,24,24,25,26,25,25,25,25,25,20,24,25,21,23,21,22,24,23,24,24,24,26,24,26,27,24,28,27,26,28,27,28,28,28,28,28,26,28,27,29,28,29,30,29,28,30,28,30,30,29,27,29,29,29,25,29,29,27,27,29,28,26,28,29,29,30,30,30,30,30,30,29,30,30,29,30,29,28,29,29,27,28,29,28,27,29,30,28,28,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,31,30,31,31,30,31,31,31,31,30,31,31,31,31,30,31,31,31,31,31,31,31,30,31,30,31,31,31,31,30,30,31,30,30,31,30,30,30,30,30,30,31,30,30,30,30,29,30,30,29,30,30,30,30,30,30,31,30,31,31,30,31,31,31,31,31,30,31,31,30,31,30,31,31,30,30,31,31,30,30,31,31,30,30,30,30,29,30,30,29,30,30,30,29,30,30,30,29,30,30,30,30,31,31,30,30,30,30,30,30,30,30,29,30,31,29,30,30,30,29,29,30,28,30,28,29,30,29,27,30,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,31,31,30,31,31,30,31,30,30,30,30,30,30,30,30,29,30,30,30,29,29,30,30,28,30,30,29,28,30,30,30,29,29,30,29,29,30,28,28,28,29,27,28,28,29,28,26,28,28,29,27,29,29,28,29,29,30,30,30,30,30,28,29,29,29,28,29,29,27,27,28,28,27,26,28,27,26,24,25,27,25,21,26,25,23,26,27,26,25,28,27,26,28,29,29,30,29,29,28,28,28,26,28,26,23,26,25,28,27,28,28,29,29,30,29,29,30,29,29,30,30,30,30,31,30,30,30,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,30,31,31,31,31,30,31,31,30,30,30,30,30,30,31,30,30,30,29,30,30,29,29,30,29,29,29,29,28,29,29,29,29,29,28,28,28,28,28,29,28,28,28,28,28,27,27,28,28,26,28,28,27,28,28,28,27,28,28,28,28,28,29,29,29,29,30,30,30,29,30,30,30,30,30,31,30,29,30,30,30,30,31,31,31,30,31,31,31,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,30,30,30,30,30,31,31,31,31,31,30,31,31,31,31,30,31,30,30,31,31,31,31,31,30,31,30,31,30,31,30,31,31,30,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,30,31,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,30,30,31,31,31,30,30,30,30,30,30,30,31,31,30,31,31,30,31,31,30,30,31,31,31,31,31,31,30,31,31,30,31,31,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,30,31,31,30,31,31,30,30,31,31,30,30,31,30,29,31,31,30,30,30,31,30,31,30,29,30,31,29,30,30,30,30,29,31,30,29,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,29,30,30,28,29,28,25,27,28,25,25,26,26,27,25,23,25,25,22,23,23,22,18,21,20,18,18,15,13,11,8,7,6,6,4,1,0,1,3,3,4,5,8,10,13,16,15,19,19,20,21,23,22,23,23,23,23,23,24,24,23,23,23,21,24,23,22,23,20,22,23,23,24,25,24,26,22,26,27,25,27,27,26,28,28,28,28,29,28,29,27,28,27,28,28,29,29,29,28,29,29,30,30,30,28,29,30,29,27,29,30,27,28,29,29,26,28,29,29,29,30,30,30,30,30,29,30,30,28,29,29,28,29,29,27,28,29,29,27,29,29,28,28,30,30,29,30,29,30,30,30,29,30,30,31,29,30,31,31,30,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,31,30,30,31,30,29,30,31,30,28,30,31,29,29,30,30,28,30,30,29,30,30,30,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,31,31,30,30,31,31,29,30,30,30,29,30,30,29,30,30,30,28,29,30,29,28,29,30,28,29,30,30,29,29,30,30,29,30,30,29,29,30,30,28,29,30,29,28,30,30,29,30,27,29,30,29,27,30,30,29,29,30,29,29,30,30,30,30,30,30,30,30,30,31,30,30,31,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,29,28,29,29,29,28,29,29,27,30,29,28,27,30,29,29,29,29,30,28,29,30,28,28,29,28,28,29,30,28,29,27,28,29,28,28,30,29,28,29,30,30,29,29,30,29,29,29,30,28,27,28,29,28,28,28,28,28,27,28,27,25,21,24,26,25,19,24,24,23,27,27,25,25,28,26,25,28,29,29,30,28,29,28,28,27,25,27,24,20,25,24,27,28,29,28,30,28,30,30,29,30,30,29,30,30,30,29,31,30,30,30,31,31,30,30,30,31,31,31,31,31,30,30,30,31,31,31,31,31,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31],[31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,28,30,30,30,29,30,29,29,29,29,29,29,29,28,29,28,29,28,26,28,28,26,26,27,26,27,27,28,26,26,28,28,27,26,29,28,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,30,31,30,31,30,30,31,31,30,31,31,31,31,31,31,31,30,30,31,31,30,31,30,31,31,31,30,31,30,30,30,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,30,31,30,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,30,31,31,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,30,30,30,31,30,31,31,30,31,31,30,30,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,31,29,31,31,30,30,30,31,30,31,31,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,27,29,30,29,28,30,29,27,28,28,24,27,27,23,23,26,25,26,23,22,24,24,21,22,22,20,16,20,19,16,17,15,14,13,9,7,6,5,5,4,1,0,1,3,4,4,6,8,10,14,14,18,17,19,20,22,22,22,23,22,23,23,23,23,23,22,22,21,23,22,21,22,20,23,23,23,23,24,24,25,25,24,25,25,26,25,26,28,26,26,28,27,26,27,25,27,26,28,27,28,29,29,27,29,29,30,30,29,26,28,29,27,27,28,29,26,27,29,27,24,28,28,29,29,29,29,30,30,29,28,29,29,28,29,29,28,27,28,26,27,29,28,27,29,29,28,28,30,29,29,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,31,30,30,31,30,30,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,31,31,30,30,31,30,29,30,31,29,29,30,30,29,30,29,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,30,30,30,30,31,31,31,30,30,31,31,30,30,31,31,29,30,30,30,29,30,30,29,30,31,30,29,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,31,30,29,30,30,29,29,30,30,29,29,30,29,30,29,29,30,29,28,29,30,29,29,30,29,29,29,30,29,29,29,29,30,30,30,30,30,30,31,30,31,31,30,30,31,31,31,30,30,30,31,30,30,31,30,30,30,30,30,30,30,29,30,29,29,30,29,30,29,29,30,29,29,29,29,29,29,29,30,29,29,30,29,29,29,29,30,28,29,30,29,28,30,29,27,28,29,28,29,27,27,29,29,28,29,29,28,29,30,29,29,29,29,29,29,29,29,29,28,29,29,28,28,28,27,27,26,28,27,26,20,25,27,25,20,26,24,23,26,27,26,26,28,28,26,27,29,29,30,27,29,28,27,28,25,27,26,22,25,24,27,26,28,27,29,29,29,29,28,30,30,29,29,30,30,29,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,30,30,31,29,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,30,29,30,29,29,29,29,29,29,29,29,29,29,29,28,28,27,27,28,28,26,27,26,27,27,27,28,27,27,28,27,27,27,29,28,28,29,29,30,29,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,31,31,31,31,31,31,31,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,31,31,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,28,29,30,29,28,30,29,28,29,28,26,26,26,24,24,26,26,26,25,24,26,25,24,23,23,22,19,23,21,19,18,17,16,15,13,12,7,7,6,5,4,2,0,1,3,4,5,7,7,12,12,16,16,19,20,21,22,22,23,22,23,23,23,23,24,22,23,22,24,22,21,22,21,22,23,24,24,24,24,25,25,24,26,24,26,25,25,27,25,26,28,27,28,28,26,27,27,28,27,28,29,29,27,29,29,29,30,29,27,28,29,28,27,28,28,25,27,29,27,24,28,28,29,29,28,29,30,30,30,28,29,29,28,29,29,27,28,28,26,27,28,28,28,28,28,28,28,29,29,29,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,31,30,30,30,31,30,30,30,30,29,30,29,30,30,30,30,30,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,28,30,29,29,30,30,28,30,29,29,28,29,28,29,29,29,30,29,29,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,30,30,30,30,29,30,29,30,30,30,30,29,29,30,29,29,29,30,30,29,30,30,30,29,30,30,29,29,29,30,28,29,30,27,28,30,29,26,27,28,27,28,26,27,28,28,27,28,29,28,28,29,29,29,30,30,30,29,29,29,29,27,29,29,27,26,28,27,26,25,27,25,26,21,24,25,25,20,24,24,23,26,26,25,24,26,27,26,26,28,28,30,27,29,28,28,27,25,27,25,22,25,26,27,26,27,27,28,27,29,28,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,28,29,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,27,29,28,27,27,28,28,28,28,28,28,27,28,27,27,27,29,29,29,29,30,30,30,29,30,30,30,30,30,31,30,30,30,31,30,30,31,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,31,30,31,31,31,31,31,30,31,31,31,30,31,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,31,31,30,31,31,30,30,31,31,31,30,31,30,31,30,30,30,31,31,31,31,31,30,31,30,30,30,31,30,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,29,31,31,30,30,30,31,30,31,30,28,30,30,29,29,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,30,29,29,29,29,28,30,29,28,29,28,26,27,27,23,25,26,26,27,24,22,25,25,24,23,24,23,18,22,21,19,18,17,17,15,14,14,10,8,7,5,4,4,2,0,1,3,5,5,7,8,9,13,14,16,18,20,20,21,23,23,23,22,23,23,23,22,24,22,24,24,22,23,21,23,24,24,25,25,24,26,23,25,26,24,27,27,26,28,28,28,29,28,28,28,27,28,28,29,29,29,29,29,28,29,29,29,30,30,28,28,29,28,26,28,28,26,27,29,28,24,26,28,28,29,29,29,30,30,30,29,29,29,28,29,29,28,27,28,25,26,28,27,28,29,29,28,28,29,29,29,29,29,30,30,30,30,29,30,30,29,30,31,30,30,31,31,30,30,31,31,30,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,30,30,30,30,30,29,30,30,30,29,30,30,29,29,30,30,28,29,29,30,29,30,30,30,30,30,31,30,30,30,30,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,31,30,30,30,30,29,30,30,30,29,30,30,28,29,30,30,29,29,30,29,28,29,30,28,29,30,30,29,29,30,30,29,30,30,29,28,30,30,28,28,30,29,27,30,30,28,29,27,28,29,29,27,29,29,28,28,29,28,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,30,31,31,30,31,31,31,30,30,30,30,30,30,30,30,30,30,29,30,30,30,28,29,29,29,29,29,29,29,27,29,30,29,28,30,29,29,29,29,30,28,29,29,28,28,28,28,27,28,29,27,28,26,27,27,28,27,29,29,28,28,29,29,29,29,29,29,28,29,29,29,27,29,29,28,27,28,27,27,26,27,25,25,21,23,26,26,20,24,23,23,26,27,26,26,27,27,27,28,29,29,29,28,29,27,27,28,25,27,26,22,25,26,27,26,27,27,28,27,30,29,27,29,29,28,29,29,29,29,30,30,30,30,30,30,30,31,30,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,30],[31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,30,30,30,30,30,30,29,30,29,29,30,30,30,30,30,29,29,29,29,29,29,29,29,29,28,29,28,27,29,29,28,27,29,28,28,28,29,27,27,29,28,27,28,29,29,29,29,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,31,30,31,31,31,30,31,31,30,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,29,29,29,27,28,28,26,25,27,27,27,25,24,26,26,23,23,25,23,18,23,22,19,19,19,17,16,15,14,12,10,8,7,5,5,4,2,0,1,3,5,5,6,8,11,12,15,17,19,20,20,21,21,21,22,22,22,22,23,23,22,23,22,22,22,21,22,23,23,23,24,24,24,24,25,25,24,26,26,27,28,27,27,28,27,28,28,27,29,27,28,29,29,29,29,28,29,28,29,29,29,27,28,28,27,27,28,29,26,27,28,27,22,26,28,28,29,28,29,29,30,29,28,29,29,28,28,28,28,27,28,26,27,28,28,27,28,29,29,28,29,29,29,29,30,30,29,30,30,29,30,30,30,30,31,30,29,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,30,31,31,30,31,31,30,29,30,31,29,30,30,30,29,30,30,30,30,30,30,31,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,30,30,31,31,30,31,31,30,30,30,31,29,30,31,30,29,30,31,30,29,30,30,29,30,30,30,29,30,30,30,29,30,30,30,28,30,31,29,29,30,30,29,30,30,29,30,29,29,30,30,28,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,29,30,30,29,30,30,29,28,30,30,29,29,29,30,29,29,30,28,29,30,29,28,29,30,29,29,27,28,29,29,28,29,30,29,30,30,30,30,30,30,30,29,29,30,29,29,29,29,28,28,28,28,27,26,28,27,27,21,26,27,26,22,28,25,25,27,27,28,27,28,27,27,27,29,29,29,28,28,28,26,27,24,26,26,23,25,24,26,27,28,27,29,28,29,29,28,30,30,29,29,30,30,29,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,30,31,31,31,31,30,31,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,30,29,29,30,29,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,28,28,28,28,29,28,26,28,28,27,28,28,29,28,28,28,27,27,27,28,28,29,29,30,29,30,29,30,30,30,30,30,30,30,30,31,31,31,31,31,30,30,31,31,31,31,30,31,31,31,31,30,30,31,31,31,31,31,31,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,31,31,31,31,31,30,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,31,31,30,30,31,31,31,30,30,31,31,31,31,31,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,30,30,31,31,31,31,30,31,31,30,30,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,30,30,30,31,30,30,31,31,30,31,31,31,30,30,31,31,30,31,31,30,30,30,31,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,28,29,30,29,28,30,29,27,29,28,26,28,28,25,25,27,27,28,26,24,26,27,24,23,26,23,20,23,23,21,20,21,20,18,17,17,15,13,11,8,7,6,6,4,2,0,1,3,5,6,7,9,11,13,15,18,20,20,22,22,23,22,22,23,22,22,22,20,23,23,22,22,21,22,23,23,24,24,25,25,25,25,26,25,26,25,27,28,26,26,28,26,27,27,26,27,25,28,28,29,29,29,27,29,28,29,30,29,27,29,29,27,27,28,28,26,26,29,25,24,26,28,27,28,28,29,29,29,29,28,29,29,28,29,29,27,26,28,26,26,29,29,27,29,29,28,28,29,29,29,29,29,30,30,30,30,29,30,30,30,30,30,31,30,31,31,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,30,30,30,31,30,30,31,31,30,30,31,31,30,30,30,30,29,29,29,30,30,30,30,31,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,30,31,31,30,30,31,31,30,31,30,30,30,31,30,30,30,31,30,29,30,30,30,28,30,30,29,29,30,30,29,29,30,30,29,30,30,30,29,30,30,29,29,30,30,29,30,30,29,30,29,29,30,30,29,30,30,29,29,29,29,29,29,30,29,30,30,29,30,30,30,31,30,30,31,31,31,31,30,30,31,31,31,30,31,30,31,31,30,31,31,30,31,30,30,30,30,29,29,29,29,29,30,30,29,29,30,29,29,29,29,29,29,30,30,29,28,30,29,29,29,29,29,28,28,30,28,28,30,29,28,29,30,29,29,27,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,27,28,27,27,27,27,26,26,21,25,26,26,21,25,24,25,26,27,26,26,28,28,27,27,29,29,30,27,28,28,27,27,24,27,25,22,25,25,26,25,27,27,29,28,29,28,28,29,30,28,30,30,30,29,30,30,30,30,30,31,31,31,30,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,30],[31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,29,30,30,29,29,30,29,29,30,29,29,29,29,28,30,29,30,29,29,29,29,29,29,29,29,29,28,29,29,29,28,27,28,28,27,27,28,28,28,28,28,27,28,28,27,27,27,29,29,29,30,30,30,30,30,30,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,31,30,30,31,30,30,31,31,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,29,28,29,28,26,28,28,25,26,26,27,26,26,22,27,27,25,24,26,24,21,24,24,22,21,21,20,20,17,18,17,15,13,10,7,7,6,5,5,2,0,1,3,4,5,9,10,13,14,15,17,18,20,20,21,21,21,22,22,21,21,21,22,22,22,22,21,22,23,24,24,24,24,25,25,25,26,25,26,26,26,29,27,27,28,28,28,27,28,28,27,28,28,29,30,29,28,29,29,29,30,29,27,29,29,27,28,28,28,26,27,29,26,25,26,29,26,29,28,29,29,30,29,29,29,29,28,29,29,28,28,28,28,28,29,28,28,29,29,30,29,30,29,29,29,30,30,30,30,30,30,31,31,30,30,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,30,31,30,30,30,30,29,30,30,29,30,30,30,30,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,31,30,31,30,30,30,31,31,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,31,29,30,29,29,30,30,29,30,29,30,29,29,29,30,29,29,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,29,29,30,28,28,30,28,27,29,29,27,28,29,28,28,26,27,28,29,27,29,29,28,29,30,29,30,30,30,30,29,30,29,30,28,29,29,28,28,28,28,28,27,27,27,26,23,24,27,27,23,25,26,25,27,28,25,26,28,28,27,28,29,30,30,28,28,28,28,27,26,28,26,23,27,24,26,27,27,27,28,28,29,28,29,30,30,29,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,30,29,30,30,30,30,30,30,29,29,30,29,29,30,30,29,30,29,29,30,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,28,28,29,29,28,28,29,28,28,29,29,28,28,29,29,29,28,29,29,30,30,30,30,30,29,30,30,30,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,30,31,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,31,30,31,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,28,29,30,29,29,29,29,28,29,28,27,28,29,27,26,28,26,28,27,24,27,28,25,24,26,25,21,24,24,22,22,21,21,21,18,19,17,16,14,12,10,8,6,6,5,3,2,0,1,2,5,6,7,9,11,12,15,16,17,18,19,20,20,20,20,21,22,22,22,22,22,22,22,24,23,24,23,24,24,25,25,26,26,26,27,26,27,29,26,27,28,27,28,28,27,29,26,28,28,29,29,30,28,29,28,30,30,29,27,28,29,28,28,28,28,25,25,28,25,23,25,27,26,28,27,29,29,29,29,28,29,29,28,29,28,27,27,28,26,26,28,28,28,28,29,29,28,30,29,29,29,29,30,30,30,30,29,31,31,30,30,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,30,31,31,30,31,30,30,30,30,31,30,30,31,30,30,30,30,30,29,30,30,29,29,30,30,30,30,30,30,30,30,31,30,29,31,31,30,30,31,30,29,30,30,29,30,29,29,30,30,29,30,30,29,29,30,29,29,29,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,31,30,30,30,30,29,30,29,30,29,30,30,29,29,30,29,29,29,29,30,28,28,30,28,28,29,29,28,28,29,29,28,27,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,29,29,29,29,29,29,28,28,28,28,27,26,28,27,26,21,25,26,27,23,27,27,26,28,28,26,27,29,28,28,28,30,30,30,27,29,28,28,27,25,27,26,22,26,24,26,27,27,27,29,29,29,28,29,30,29,29,30,30,30,29,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30],[30,30,30,30,30,31,31,30,30,30,30,30,30,29,30,29,30,29,29,29,29,29,30,29,28,29,28,28,29,29,28,29,29,29,29,29,28,28,29,28,28,29,29,29,28,28,28,28,28,28,28,27,28,28,27,28,28,28,28,28,28,27,28,28,29,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,31,31,30,31,31,30,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,31,30,31,31,31,30,30,30,30,30,30,30,30,30,31,31,31,31,30,31,31,31,30,30,31,30,30,30,31,31,30,30,30,30,30,30,31,31,30,30,31,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,31,30,30,31,31,31,30,31,31,31,31,31,30,31,31,31,30,30,31,30,31,30,29,30,30,29,29,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,28,29,29,29,29,29,29,28,29,29,27,28,28,26,26,26,26,27,26,24,26,26,25,25,25,24,23,23,24,23,20,22,22,20,18,19,17,16,14,12,10,9,7,6,5,4,2,1,0,1,3,5,7,8,10,12,14,15,18,19,20,20,21,22,22,21,22,22,22,22,22,22,21,22,23,23,25,23,24,25,25,26,26,25,27,26,26,29,27,27,28,28,28,28,27,28,27,29,28,30,30,29,28,29,28,29,29,28,27,28,28,27,27,27,27,26,27,28,26,25,26,28,27,28,27,29,28,29,29,28,29,29,28,29,28,27,28,28,28,27,28,28,28,28,29,29,29,29,29,30,29,29,30,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,30,30,30,31,31,30,31,31,30,31,30,30,31,30,30,31,30,30,30,31,30,30,30,30,29,30,30,30,29,29,29,30,30,29,31,30,31,30,30,30,31,31,30,31,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,29,29,30,30,29,29,30,30,29,29,30,29,29,29,29,30,30,29,29,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,31,31,30,31,30,30,31,31,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,29,29,30,29,28,29,29,29,28,28,30,29,28,29,28,27,29,29,27,27,28,27,28,26,27,28,29,29,29,29,29,29,29,29,29,29,29,30,28,29,29,29,28,29,29,28,28,28,28,27,27,27,26,24,22,25,27,26,23,25,27,26,27,28,26,27,29,28,27,28,29,29,29,28,29,28,28,27,25,27,26,22,26,25,26,26,25,27,28,27,28,27,29,29,28,29,29,30,29,29,30,30,30,30,30,31,30,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,30],[30,30,30,31,31,31,31,30,31,31,30,30,30,29,30,29,30,29,30,30,29,29,30,29,29,30,29,29,30,29,28,30,29,29,29,29,29,29,29,28,29,29,29,28,29,28,28,28,28,28,28,27,28,28,28,28,28,29,28,29,28,27,28,29,29,30,30,30,30,30,30,29,31,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,31,31,31,31,31,31,31,30,30,31,31,30,31,30,31,31,31,30,31,31,31,30,31,30,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,30,30,30,31,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,31,31,30,30,30,30,30,30,29,29,30,29,29,30,29,28,30,30,28,29,28,28,28,28,26,26,27,27,28,26,23,28,27,24,25,26,25,22,24,24,22,21,22,21,20,19,19,17,16,15,12,13,11,8,6,5,5,4,3,1,0,1,3,5,5,6,9,11,13,15,16,17,17,19,19,19,20,21,20,22,22,21,22,22,22,23,23,24,22,23,25,24,26,25,24,27,26,27,29,27,27,29,29,28,29,28,29,27,29,28,30,30,30,28,29,28,30,30,30,27,29,29,28,27,29,29,26,26,28,28,23,26,28,27,27,28,29,29,30,29,29,29,28,29,29,28,28,27,28,26,27,29,28,27,28,30,29,28,30,30,30,30,29,30,29,30,29,30,31,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,31,31,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,30,29,30,30,29,29,29,30,29,29,29,30,29,29,30,30,30,30,30,29,29,30,30,29,29,30,30,29,30,31,29,30,29,29,30,30,29,30,30,29,29,30,30,30,30,30,30,30,30,31,30,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,31,30,30,30,31,30,30,30,30,30,29,29,29,30,29,29,30,30,28,29,30,29,29,29,29,29,30,30,29,28,30,30,28,30,30,29,29,28,28,29,29,29,29,30,29,29,30,29,29,29,29,30,29,29,29,30,29,29,30,29,29,29,29,29,28,29,28,27,23,26,28,27,24,27,26,23,28,29,26,26,29,29,28,28,29,30,30,28,29,28,27,28,27,28,28,24,28,26,29,27,28,29,29,29,29,29,29,30,30,29,30,30,30,30,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30],[31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,30,30,29,30,29,29,30,29,30,29,30,29,29,29,29,29,29,29,29,29,30,29,29,28,29,29,28,28,28,28,29,29,29,28,29,29,29,28,29,29,30,30,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,28,29,29,28,29,30,28,27,28,29,29,28,26,28,29,27,27,28,26,23,25,26,24,24,24,24,23,21,22,20,19,20,16,15,14,12,10,9,9,8,5,3,2,0,1,3,4,6,7,9,12,14,16,17,18,19,19,20,19,20,21,21,21,22,22,22,24,24,23,24,24,24,25,26,26,26,26,27,26,27,29,27,27,28,28,29,28,28,29,28,28,29,30,30,30,29,30,29,29,30,29,28,29,29,28,28,28,28,24,26,28,26,23,25,27,25,27,28,28,29,30,29,28,29,29,28,28,27,27,25,27,26,27,28,28,26,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,30,31,30,30,31,30,30,30,31,30,30,30,30,31,30,29,31,30,30,29,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,31,30,30,30,30,30,30,30,30,29,29,30,30,28,30,30,29,29,30,30,29,29,30,29,28,30,30,29,29,30,29,29,29,29,29,30,29,30,30,29,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,29,30,28,29,28,29,28,27,24,27,29,29,26,28,28,27,28,29,28,28,30,29,28,29,30,30,30,28,30,29,28,29,27,29,28,24,27,26,27,27,27,28,28,30,30,28,29,30,29,29,31,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,29,30,29,30,30,29,30,30,29,29,30,29,29,30,29,29,30,29,30,30,30,29,30,30,29,30,30,29,29,29,29,28,28,28,28,28,27,28,28,28,28,28,28,28,28,29,28,28,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,31,31,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,31,30,31,30,30,30,30,30,29,29,30,30,29,30,30,29,29,28,28,29,29,28,27,27,28,28,27,25,28,27,26,27,27,25,23,25,25,23,23,24,22,22,20,22,19,19,19,17,16,15,14,13,10,8,10,5,5,3,2,0,1,3,5,6,6,8,11,13,15,16,16,17,18,18,19,20,21,22,22,21,22,23,23,22,23,24,23,24,25,26,26,25,27,26,27,29,26,26,28,28,28,28,28,29,27,29,29,30,30,30,29,29,29,29,30,29,29,30,29,27,28,29,28,26,28,29,27,25,26,29,27,28,28,30,29,30,30,30,30,30,29,30,29,29,28,29,28,28,29,29,28,30,30,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,29,30,31,30,30,31,30,30,30,31,30,30,31,31,30,30,31,31,30,30,31,30,30,30,30,31,30,30,30,31,30,30,31,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,31,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,30,30,29,30,30,29,29,30,29,30,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,29,29,28,29,29,27,24,26,29,27,24,28,28,27,28,29,27,28,29,29,29,29,29,30,30,29,30,29,29,29,27,29,28,25,28,27,29,28,28,28,29,29,29,29,29,30,29,29,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,30],[31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,29,30,30,30,30,30,29,30,30,30,29,29,29,29,29,28,29,29,29,29,29,29,28,30,30,29,29,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,31,31,30,31,31,31,30,31,31,31,31,30,30,30,31,29,30,30,30,30,30,30,30,30,30,29,29,30,29,28,28,28,29,28,26,28,29,27,27,28,26,23,26,26,25,24,25,24,22,21,23,21,21,20,18,19,17,16,14,13,11,11,7,5,5,3,2,0,1,3,5,6,7,9,11,14,15,17,18,19,19,20,20,21,22,22,22,22,23,23,24,24,24,24,25,26,27,27,27,27,27,27,29,28,27,29,29,29,28,28,29,28,29,29,30,30,30,29,30,29,30,31,30,28,30,29,28,28,29,29,25,27,29,27,25,26,29,27,29,28,29,29,30,30,30,29,30,29,30,29,29,28,30,28,28,30,29,28,30,30,30,29,30,30,30,30,30,30,30,30,29,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,31,30,30,30,31,30,30,31,30,30,30,31,30,30,30,31,30,30,31,31,30,30,31,30,30,31,30,31,31,30,31,31,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,31,30,29,30,30,30,29,29,30,29,30,30,29,29,30,30,29,30,30,30,30,29,29,30,30,29,30,30,30,30,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,27,25,28,30,29,25,29,29,27,29,30,27,29,30,30,29,30,30,30,30,29,30,29,29,29,27,30,29,26,28,27,28,28,27,29,29,29,29,28,29,30,29,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,30,29,30,30,29,29,29,29,29,28,29,29,29,27,28,29,28,29,29,29,28,29,29,29,29,29,30,30,30,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,30,31,30,30,30,31,30,30,31,30,31,31,31,31,31,31,30,30,30,30,30,30,29,30,30,30,29,30,29,29,29,29,28,29,30,29,28,28,28,29,28,27,28,29,26,27,28,26,23,25,26,24,24,25,23,23,22,24,22,21,22,19,19,19,17,16,14,12,10,8,6,6,4,4,2,0,1,3,5,6,6,8,11,13,15,16,17,17,18,19,20,20,21,21,21,22,22,22,23,23,23,24,25,26,25,26,27,26,27,29,26,26,29,28,28,28,28,29,28,29,29,30,30,30,29,30,29,30,30,30,28,30,30,28,28,29,29,26,27,29,28,25,26,29,27,29,29,30,30,30,30,29,29,30,29,30,29,29,27,29,28,28,29,29,28,30,30,30,29,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,31,30,30,30,31,30,30,31,31,30,31,31,30,30,31,31,30,30,31,31,30,31,31,30,31,31,30,31,31,30,31,31,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,29,30,30,30,30,29,30,29,30,30,30,29,30,30,29,30,31,30,30,29,29,31,30,30,30,30,30,30,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,28,25,28,30,29,26,29,29,28,30,30,28,29,30,30,29,30,30,30,30,29,30,29,29,29,28,30,29,26,28,27,28,29,28,29,30,30,30,29,30,30,30,30,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,29,29,30,29,30,30,29,29,30,30,29,29,29,28,29,28,29,28,29,29,29,28,29,29,30,29,29,30,30,31,30,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,31,30,30,30,29,29,29,30,29,29,28,29,29,28,27,29,29,27,27,29,27,24,26,27,25,25,26,24,23,23,23,22,23,22,20,21,20,19,19,17,15,12,9,8,6,5,6,5,2,0,1,4,5,6,6,8,12,13,15,16,16,17,18,20,21,21,21,22,23,22,22,23,24,23,24,26,26,26,26,27,27,27,29,28,28,29,28,29,28,29,30,29,30,30,30,30,31,30,30,30,30,31,30,29,30,30,29,28,30,30,25,28,30,28,25,27,29,27,30,29,30,30,30,30,30,30,30,30,31,30,30,28,30,28,29,30,30,28,30,30,30,30,31,31,31,31,30,31,30,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,30,30,31,31,30,30,31,31,30,31,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,30,30,30,30,30,31,30,30,30,30,30,30,30,29,29,30,30,28,26,28,30,29,25,29,29,28,30,30,29,29,30,30,30,30,30,31,31,30,30,30,29,30,29,30,29,26,29,28,29,29,28,29,30,30,30,29,29,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,31,30,30,30,30,30,31,30,30,30,30,29,30,30,29,30,30,30,30,30,29,30,29,29,30,29,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,30,29,29,29,30,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,30,31,31,29,30,30,30,30,30,30,30,30,29,29,29,30,29,28,29,29,30,28,26,29,29,27,27,29,27,23,26,27,24,24,25,24,23,22,24,22,23,21,19,21,20,19,20,17,16,13,11,10,9,6,6,6,6,2,0,1,3,4,5,6,7,11,12,13,15,16,17,18,19,20,21,21,22,21,22,22,23,22,23,25,25,26,26,26,26,26,29,27,27,29,28,29,29,29,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,29,30,30,26,28,30,28,26,27,29,28,30,29,30,30,30,30,30,30,30,30,30,30,30,27,30,27,29,30,30,29,30,30,30,30,31,30,31,31,30,31,30,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,31,31,30,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,31,31,30,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,30,31,31,30,30,30,30,30,30,31,30,29,31,30,29,30,31,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,30,31,30,30,30,31,30,30,30,30,30,30,30,29,29,30,30,29,27,28,30,29,25,29,30,27,30,30,28,28,31,30,29,30,31,31,31,29,30,30,30,29,29,30,29,26,29,27,29,29,29,29,30,30,30,29,30,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,31,30,30,30,30,30,31,30,30,30,30,29,30,30,29,30,30,30,30,29,29,29,29,29,29,29,29,28,29,29,28,28,28,29,29,27,28,28,28,29,28,29,28,29,29,28,29,29,30,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,31,30,30,30,30,30,29,29,29,30,29,28,28,29,29,28,26,29,28,26,27,28,25,22,26,26,23,24,25,23,23,22,24,22,22,21,19,21,20,19,20,17,17,14,12,13,11,7,7,6,7,4,2,0,1,4,4,5,5,7,11,12,13,15,16,17,18,19,20,20,21,20,21,21,23,22,22,25,26,26,25,26,27,27,29,27,27,29,28,29,28,28,29,28,30,30,30,30,31,30,30,30,30,31,30,29,31,30,29,29,30,30,26,29,30,29,26,28,30,29,30,29,30,30,30,31,30,30,30,30,31,30,30,27,29,28,29,30,30,29,30,30,30,30,30,30,31,31,31,31,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,30,30,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,31,31,31,31,30,31,31,30,31,31,30,31,31,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,30,30,31,30,30,30,30,30,30,31,30,29,30,30,29,30,31,30,30,29,30,30,30,30,31,31,30,30,31,30,31,31,30,31,30,30,30,31,30,30,31,30,30,30,30,29,29,30,30,28,25,28,30,29,24,29,29,27,30,30,29,28,30,30,30,30,31,31,31,30,30,30,30,30,29,30,29,26,29,27,29,29,28,29,30,30,30,29,30,30,30,30,31,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,29,29,29,29,29,29,29,29,29,28,28,28,29,28,28,29,28,29,28,29,28,29,29,28,29,29,30,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,31,30,31,30,30,30,30,29,30,30,29,28,28,29,29,28,26,29,29,27,27,28,26,23,26,26,24,24,25,24,23,22,23,22,22,22,20,22,21,20,21,18,18,15,15,15,14,9,8,6,7,6,5,2,0,1,4,4,5,5,8,10,11,13,14,16,17,18,19,20,21,21,21,22,23,22,22,25,26,25,25,26,27,27,29,27,27,29,28,29,28,28,29,28,30,30,31,30,31,30,31,30,30,31,30,29,30,30,29,29,30,30,27,29,30,29,27,28,30,28,30,29,30,30,30,30,30,30,30,30,31,30,30,28,29,28,30,30,30,29,31,31,30,30,31,31,31,31,31,31,30,31,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,31,30,30,30,31,30,30,31,30,30,31,31,30,30,31,30,30,29,30,31,31,30,31,31,30,30,31,31,31,31,31,31,30,31,30,31,30,31,31,30,30,30,30,30,30,30,30,28,26,28,30,29,24,29,29,28,30,30,29,29,31,30,30,30,31,31,31,30,31,30,30,30,29,30,29,28,29,28,29,28,28,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,29,29,29,29,28,29,29,29,28,29,28,28,29,29,28,28,27,28,29,27,27,28,28,28,28,28,27,28,29,28,29,29,30,30,30,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,30,31,31,30,30,30,31,30,30,30,30,30,29,28,29,30,28,28,28,28,29,28,26,29,28,26,27,28,25,21,26,26,23,24,25,23,23,22,24,22,22,22,20,22,21,20,21,19,19,15,16,17,15,11,11,7,6,6,6,4,2,0,1,3,4,5,5,7,10,12,13,15,16,17,18,18,20,20,20,21,22,21,21,24,25,25,24,25,26,26,28,26,26,28,27,28,27,28,29,27,29,30,30,30,31,30,30,30,30,31,30,30,30,30,29,29,30,30,27,28,30,29,26,28,30,28,30,29,30,30,30,30,30,30,30,30,31,30,30,28,29,28,30,30,30,29,31,31,30,30,30,30,31,30,31,31,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,29,30,31,30,30,30,31,30,30,30,30,30,31,31,29,30,31,30,30,29,30,31,30,30,31,31,30,30,31,30,30,31,30,30,30,30,30,31,30,30,31,30,30,30,30,29,30,30,29,29,25,27,30,29,24,29,29,27,30,30,29,28,30,30,30,30,31,31,31,30,30,30,30,30,29,30,29,27,29,27,29,29,28,30,30,30,30,29,30,30,30,30,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,29,30,29,29,28,29,29,29,28,29,28,28,29,29,28,28,27,28,28,27,27,27,27,28,28,28,27,28,29,28,28,29,30,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,31,30,30,30,30,30,30,28,29,30,29,27,28,28,29,28,25,29,28,26,27,28,25,22,26,26,23,24,25,23,23,22,23,22,22,22,20,22,21,20,21,19,19,16,17,19,17,13,13,9,7,5,6,6,4,2,0,1,3,4,5,5,7,10,11,13,15,16,17,18,20,19,19,20,22,21,21,23,24,24,24,25,26,26,28,26,26,28,27,28,27,28,29,27,29,30,30,30,31,30,31,30,30,31,30,30,30,30,30,29,30,30,27,29,30,30,27,28,30,28,30,29,30,30,30,31,30,30,30,30,31,30,30,28,29,27,30,30,29,29,31,30,30,30,31,30,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,30,31,31,30,31,31,30,31,31,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,31,31,30,30,31,30,30,30,31,30,30,30,30,30,31,31,30,30,31,30,30,30,30,31,31,30,30,31,30,30,31,30,31,31,31,31,30,31,30,31,30,31,31,30,30,30,30,29,30,30,29,29,26,28,30,29,24,29,29,27,30,30,29,28,30,30,30,30,31,31,31,30,30,30,30,30,29,30,29,26,29,27,29,28,28,30,30,30,29,30,30,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,29,30,29,29,29,29,29,29,29,29,28,28,29,29,28,28,27,28,28,27,27,27,28,28,28,28,27,28,29,28,28,29,30,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,29,28,29,30,28,27,28,28,29,28,25,29,28,26,26,28,25,21,26,26,22,24,24,22,23,22,23,22,21,22,20,22,22,20,21,20,20,16,18,20,18,14,15,12,10,7,6,6,6,5,2,0,1,3,4,5,5,7,10,12,14,15,16,17,19,19,19,20,22,21,21,23,23,23,23,24,25,26,28,26,26,28,26,28,27,28,28,27,29,29,30,30,31,30,30,30,30,31,30,30,31,30,29,29,30,30,27,29,30,30,27,28,30,29,30,29,30,30,30,31,30,30,30,30,31,30,30,27,29,27,29,30,29,29,30,30,30,30,30,30,31,31,31,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,31,30,30,30,31,30,30,30,30,30,31,31,30,30,31,30,30,29,30,31,30,30,31,31,30,30,31,30,31,31,31,31,30,31,30,31,30,31,31,30,30,30,30,29,30,30,30,28,26,27,30,29,23,29,29,27,29,30,29,28,30,30,30,30,31,31,31,30,30,30,30,30,29,30,29,27,29,27,29,29,29,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,30,30,30,30,30,30,30,29,30,30,29,30,30,28,30,29,30,30,29,28,29,29,29,29,29,29,28,29,29,29,28,27,28,28,27,27,28,28,28,28,28,28,28,29,28,28,28,29,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,30,30,29,28,29,29,29,26,28,28,29,28,26,29,28,26,27,28,25,22,27,26,23,24,25,23,24,22,24,21,21,23,20,22,21,21,22,20,20,17,18,20,20,15,15,13,11,9,7,5,6,6,5,2,0,1,3,4,5,5,7,10,12,13,15,15,18,18,18,20,21,20,21,22,23,23,23,24,25,25,28,26,26,28,27,28,28,29,29,27,29,30,30,30,30,30,31,30,30,31,30,30,30,31,29,29,30,30,28,29,30,30,27,28,30,30,30,30,31,31,31,31,30,30,31,30,31,30,30,28,30,28,30,30,29,29,30,30,30,30,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,30,31,31,31,31,30,31,30,30,31,30,30,31,31,30,30,31,30,30,29,30,31,31,30,31,31,30,30,31,30,31,31,31,31,30,31,30,31,30,31,31,30,30,30,30,30,30,31,30,29,27,28,30,29,24,29,29,27,29,30,29,28,30,30,30,30,31,31,31,30,30,30,30,30,30,30,29,27,29,28,30,29,29,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,31,30,30,31,30,30,31,30,30,30,30,29,30,30,29,30,30,30,29,29,29,29,29,28,29,29,28,28,29,29,28,28,27,28,28,26,27,28,28,28,28,29,27,28,29,29,29,29,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,29,28,29,29,28,26,28,28,29,27,25,28,28,25,26,28,24,21,26,26,22,24,24,22,24,21,24,21,21,23,21,22,22,21,22,21,22,17,19,21,21,17,16,15,14,12,10,7,5,6,6,5,2,0,1,3,4,5,6,7,11,13,14,15,17,17,18,19,21,20,21,22,23,23,23,24,25,26,27,25,26,28,26,27,27,28,28,27,29,29,30,30,30,30,31,30,30,31,30,29,31,30,30,29,30,30,28,29,31,30,27,28,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,28,30,27,29,30,29,29,30,30,30,30,31,30,31,31,31,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,31,30,30,31,31,30,30,30,31,30,30,31,30,30,31,31,30,31,31,30,30,30,30,31,30,30,30,31,30,30,31,30,31,31,31,31,30,31,30,31,30,30,31,30,30,30,30,30,30,31,30,29,27,28,30,29,24,29,29,26,29,30,29,28,30,30,30,30,31,31,31,30,31,30,30,30,30,30,29,27,29,28,30,29,29,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,31,30,31,30,30,31,30,30,30,30,29,30,30,29,30,30,30,29,29,29,29,29,29,29,29,28,28,29,28,28,28,27,28,28,27,27,27,28,28,28,28,27,28,29,29,29,28,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,29,30,29,28,28,29,28,26,28,28,29,27,25,29,28,25,26,28,24,22,25,25,22,24,24,22,24,22,23,21,22,23,21,23,22,21,23,22,22,18,21,22,22,18,18,16,15,13,12,10,7,6,6,6,5,2,0,1,3,4,5,6,7,10,12,14,15,15,16,19,20,20,20,21,23,23,22,23,24,25,27,25,26,28,26,27,27,28,28,26,29,29,30,30,30,30,31,30,30,31,30,29,31,31,29,29,30,30,28,29,31,30,27,28,30,30,30,30,30,31,30,31,30,31,30,30,30,30,30,28,30,27,29,30,29,29,31,30,30,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,30,31,31,30,30,31,31,30,30,31,30,30,31,31,30,30,31,30,30,30,30,31,30,30,30,31,30,30,31,30,31,30,31,31,30,31,30,31,30,31,31,30,30,30,30,30,30,30,30,29,27,28,30,29,24,29,29,26,29,30,29,27,30,30,30,29,31,31,31,30,31,30,30,30,30,30,29,26,29,28,30,29,29,30,30,31,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,31,30,30,31,30,30,31,30,29,30,30,29,30,30,29,30,30,30,29,29,29,29,29,28,29,29,29,28,29,28,28,28,27,28,28,26,27,27,28,27,27,28,27,27,29,28,28,28,29,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,29,28,28,29,28,25,27,27,28,27,24,28,27,23,25,27,23,21,25,24,21,23,23,22,23,21,23,21,21,22,20,21,21,20,22,21,21,18,21,22,22,18,18,17,16,14,13,12,10,7,6,6,5,5,2,0,1,3,4,5,6,7,10,12,13,14,16,17,19,19,20,21,22,22,21,22,23,24,26,24,25,28,25,27,27,27,28,26,29,29,30,30,30,30,31,30,30,31,30,29,31,30,29,29,30,30,28,29,31,30,27,28,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,28,29,27,29,30,28,29,30,30,29,30,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,31,30,30,31,31,30,30,30,31,30,30,30,30,30,31,30,30,30,31,30,30,29,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,29,27,28,30,29,25,29,29,25,29,30,28,26,30,30,29,29,31,30,31,30,31,30,30,30,30,30,29,27,29,28,30,29,29,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,29,30,30,29,30,30,30,30,30,29,30,29,29,29,30,29,29,30,29,29,29,28,29,29,28,28,29,29,28,28,28,27,28,29,28,28,28,29,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,29,30,29,28,28,29,28,25,28,28,29,27,26,28,27,25,26,28,24,22,26,25,23,23,23,21,23,22,22,21,21,22,20,22,23,22,23,22,23,19,22,24,25,20,20,19,17,16,15,14,12,10,8,6,6,6,5,2,0,1,3,5,6,7,8,11,13,14,15,17,18,19,19,21,21,21,21,22,23,23,25,25,25,27,25,27,27,27,28,27,30,29,30,30,30,30,31,30,30,31,31,30,30,30,29,28,30,30,28,28,30,30,28,29,30,30,30,30,31,31,31,31,30,30,30,30,30,30,30,28,30,27,30,30,29,29,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,30,29,30,31,30,29,31,30,30,31,31,30,31,30,31,31,30,31,30,31,30,31,31,30,30,31,30,30,30,30,30,29,28,29,31,29,26,29,29,27,29,30,28,27,30,30,29,29,31,31,31,29,31,30,30,30,30,30,29,27,29,29,30,30,30,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,31,30,29,30,30,29,30,30,29,30,29,28,29,29,29,30,29,29,29,29,28,29,29,28,28,29,28,28,28,28,28,28,28,27,28,27,27,27,27,28,27,27,27,26,28,27,27,28,29,29,29,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,29,28,28,28,28,28,25,28,28,28,26,25,28,27,24,25,27,23,22,25,24,22,23,22,21,22,20,23,20,21,22,21,22,21,20,23,22,22,19,22,24,25,20,19,19,17,17,16,14,13,13,11,7,6,6,7,5,2,0,1,3,5,5,6,8,10,12,13,15,16,17,19,19,20,21,20,21,22,22,24,24,24,26,24,27,27,27,29,25,29,30,30,30,30,29,30,30,30,31,30,29,30,30,30,28,30,30,29,29,30,30,27,28,30,30,30,30,30,31,31,31,30,30,30,30,30,30,30,29,29,26,29,30,28,29,30,31,29,30,31,30,30,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,30,31,31,30,30,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,30,31,31,31,31,30,30,31,31,30,30,30,31,30,30,31,30,30,31,31,30,30,30,31,30,30,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,28,30,29,26,29,29,26,28,29,29,27,30,30,29,28,30,30,31,30,30,30,30,30,30,30,29,28,29,29,30,29,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,29,29,29,30,29,29,29,28,29,28,28,28,29,28,28,28,29,29,29,29,28,28,28,28,27,28,29,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,30,30,30,30,30,29,30,29,28,27,29,28,25,29,28,29,28,26,29,28,25,26,27,25,23,26,26,23,24,23,21,22,21,21,22,21,22,20,22,23,21,22,22,23,21,24,25,25,22,22,21,20,19,18,17,16,15,13,11,8,6,7,6,5,2,0,1,3,4,6,7,8,11,13,15,14,17,17,19,20,20,19,22,22,23,24,24,25,26,26,26,26,26,28,26,28,28,30,30,30,30,31,30,31,31,31,30,30,30,30,28,30,30,29,28,30,30,28,29,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,29,29,28,29,30,29,29,30,30,29,30,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,30,31,31,30,30,30,31,30,31,31,31,30,31,31,30,31,30,31,30,30,31,30,30,31,30,30,31,31,31,30,29,30,31,30,30,31,30,30,30,31,30,30,30,31,30,30,30,31,30,29,31,30,30,30,30,30,29,30,30,30,30,29,30,30,29,27,30,29,27,28,29,28,28,29,30,28,29,30,31,31,30,31,30,30,30,30,30,28,27,30,29,30,30,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,30,30,31,30,30,31,30,29,30,30,29,30,30,29,30,30,30,30,29,29,29,29,29,29,29,29,28,29,28,28,28,27,27,28,26,26,27,27,27,26,28,25,26,27,26,27,26,28,29,29,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,30,30,30,30,29,29,29,29,27,27,28,27,25,26,27,28,26,24,28,25,23,25,26,23,21,24,24,22,23,23,21,22,20,22,20,21,21,20,21,20,20,21,21,21,19,23,23,24,20,22,20,20,18,18,17,15,14,13,12,10,7,6,6,5,5,2,0,1,3,4,6,6,7,10,13,13,14,16,17,19,20,18,19,21,22,23,23,22,25,23,25,24,25,27,24,29,29,30,30,30,29,30,30,30,31,30,29,30,30,29,29,30,30,28,29,31,29,27,29,30,30,30,29,31,30,30,31,30,30,30,30,30,30,30,29,29,28,29,30,28,29,30,30,29,30,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,31,31,31,30,31,31,31,31,31,30,31,30,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,30,31,30,31,30,30,30,30,30,30,30,30,29,29,28,27,30,29,25,28,29,26,28,29,29,27,30,30,29,28,30,30,31,29,30,30,30,30,29,30,28,27,29,28,30,28,29,30,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,30,30,31,30,30,30,30,29,30,30,29,30,30,30,29,30,29,29,29,29,29,29,28,29,29,28,28,28,27,27,28,27,27,27,28,27,28,27,26,26,27,27,27,26,29,29,29,30,30,30,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,30,30,30,29,29,29,28,27,28,28,25,27,28,27,25,26,27,26,25,26,26,24,23,25,24,22,23,23,21,22,21,21,21,22,22,20,23,23,21,23,23,23,21,24,24,25,22,22,22,21,20,20,18,17,16,15,14,13,11,8,6,6,5,3,2,0,1,3,4,5,6,8,11,12,13,15,16,17,18,18,19,21,21,23,22,23,24,23,26,25,26,27,25,29,29,29,30,30,29,30,30,31,31,31,30,30,31,30,29,30,30,29,29,31,30,28,29,30,30,30,30,31,31,31,31,30,30,31,30,30,30,30,29,29,27,29,30,28,29,31,30,29,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,30,31,30,31,30,30,31,31,31,31,30,31,31,30,30,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,29,30,29,27,29,29,28,28,29,29,27,29,30,29,28,30,30,31,29,31,30,30,30,30,30,29,29,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,29,29,29,29,29,29,29,28,29,28,28,28,28,27,27,28,27,27,27,27,26,26,28,27,27,26,28,29,29,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,29,30,31,30,30,30,30,30,30,30,28,29,28,27,26,27,26,25,27,27,28,24,25,28,25,25,24,25,24,22,25,24,23,22,22,22,22,21,19,22,21,22,19,22,24,21,22,22,23,21,25,24,25,23,23,22,22,20,21,19,18,18,17,16,15,14,12,8,6,6,6,5,2,0,1,3,5,5,6,8,10,13,14,14,17,16,16,18,20,20,22,23,22,24,23,24,24,24,27,25,28,28,29,30,30,29,30,30,30,31,30,29,30,30,29,29,30,30,27,29,30,29,28,29,30,30,30,30,30,30,31,31,30,30,30,30,30,29,30,28,29,27,29,29,28,28,30,30,29,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,30,31,30,31,30,30,31,31,31,30,30,31,31,30,31,30,31,30,31,31,31,30,31,31,31,31,31,31,30,30,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,31,30,29,30,30,30,30,30,30,30,29,30,30,30,30,31,30,30,30,30,30,30,30,30,29,29,29,29,30,29,27,28,28,27,28,29,29,27,29,30,29,28,30,30,30,29,30,30,30,29,29,30,29,28,29,29,30,29,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,30,30,31,30,30,30,30,29,30,30,29,30,30,28,30,29,30,29,29,29,28,29,28,28,28,28,28,28,27,28,28,26,27,27,26,25,27,27,26,26,26,25,24,26,26,25,25,28,28,28,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,29,28,27,25,27,27,23,26,26,25,24,23,25,24,22,24,24,22,21,23,22,20,21,20,20,21,19,21,19,21,20,19,20,20,19,22,22,22,21,24,24,25,22,22,23,22,21,22,21,20,19,17,16,16,14,13,10,7,6,6,5,4,2,0,1,3,5,6,7,8,11,13,13,15,17,16,19,19,20,22,22,22,23,21,25,24,24,27,24,28,28,29,30,30,29,30,30,30,31,31,30,30,31,30,29,30,30,29,29,30,30,29,29,30,30,30,30,31,31,31,31,30,30,30,30,30,30,30,29,29,28,30,30,29,29,31,30,29,30,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,31,30,30,30,31,29,31,30,30,31,30,31,30,30,31,31,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,30,31,30,30,31,31,30,30,31,30,30,30,29,30,30,29,30,30,30,29,30,29,30,30,30,30,29,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,29,28,30,29,27,28,28,27,28,29,29,26,29,30,29,28,30,30,31,30,30,30,30,30,30,30,29,28,29,29,30,29,30,30,31,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,31,30,30,30,30,29,29,29,29,29,30,29,29,29,29,29,29,27,28,29,28,27,28,28,28,27,28,26,26,27,27,27,26,28,29,29,29,30,30,30,30,31,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,28,28,28,27,25,27,27,25,26,27,28,26,25,27,26,25,25,27,23,22,25,23,21,24,22,21,22,21,20,22,20,22,20,21,22,21,22,22,23,23,25,25,26,25,24,24,24,23,22,22,21,20,19,19,17,16,15,13,9,8,7,6,4,4,2,0,1,3,4,6,6,8,11,13,14,14,17,17,19,19,22,21,21,23,22,25,24,24,27,25,28,27,29,30,29,29,30,30,30,31,31,30,30,30,30,29,29,30,29,28,30,30,29,29,30,30,30,30,30,31,31,30,30,30,30,30,30,30,29,29,28,28,29,29,29,29,30,30,28,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,31,30,30,29,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,30,30,30,31,31,30,29,30,31,30,29,30,30,30,30,31,31,29,31,31,30,30,31,31,30,30,31,30,30,31,30,30,31,31,31,30,30,30,30,30,29,30,30,29,29,30,29,30,29,30,30,29,29,30,30,29,30,30,29,30,30,30,29,30,30,30,29,30,29,30,29,27,29,28,26,27,28,28,27,28,29,28,28,29,30,30,29,30,30,30,29,29,30,28,28,30,29,30,30,30,30,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,29,29,29,30,29,29,29,28,29,28,27,27,28,26,26,28,27,27,26,27,27,26,27,27,26,25,28,29,29,30,29,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,29,30,30,30,30,30,29,29,28,28,28,25,28,27,25,28,28,28,26,26,27,25,24,25,26,23,23,25,24,23,23,23,22,22,21,22,22,21,22,20,22,23,21,23,23,23,23,25,25,26,24,25,24,24,22,23,22,21,21,20,19,18,18,16,15,13,11,8,7,6,5,4,1,0,1,3,5,5,7,8,12,13,15,14,17,18,18,21,21,21,22,21,23,24,23,26,24,28,28,29,30,29,29,30,30,30,30,30,29,30,30,29,28,30,30,29,29,30,30,29,29,30,30,30,30,31,31,31,30,30,30,30,30,30,30,30,29,29,28,29,30,28,29,30,30,29,30,30,30,30,30,30,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,29,30,31,31,31,30,30,30,31,30,30,30,31,30,30,31,31,30,31,31,30,30,30,30,30,30,31,30,31,31,31,30,30,31,30,30,30,30,30,30,29,30,30,29,29,30,29,30,29,30,30,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,29,29,28,30,29,27,27,28,28,27,28,28,26,28,29,28,28,30,30,30,30,29,29,29,29,29,30,29,28,29,30,30,30,30,30,31,30,31,30,30,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,30,30,31,30,30,31,30,29,30,30,29,30,30,29,30,30,30,29,29,29,29,29,28,29,29,29,28,28,28,28,28,27,27,28,27,26,27,27,27,26,27,25,26,26,26,25,25,27,28,28,29,29,30,30,30,30,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,30,30,30,30,30,30,28,28,28,27,25,28,27,25,26,27,27,25,24,26,25,24,24,24,23,22,24,22,21,23,22,20,21,20,20,21,21,21,19,22,23,20,23,23,24,22,25,25,26,25,24,24,24,22,23,21,21,21,20,20,18,17,16,16,13,12,11,8,7,6,5,4,2,0,1,4,5,5,6,9,10,12,13,14,16,17,19,19,20,23,20,24,24,23,27,23,28,28,29,30,29,29,30,30,30,31,31,30,30,31,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,31,31,31,30,30,30,30,30,30,30,29,29,29,30,29,29,29,30,30,29,30,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,29,30,30,30,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,31,30,30,30,30,29,30,29,30,30,30,31,30,30,30,31,30,30,30,30,30,30,31,30,29,31,31,31,30,31,31,31,30,31,30,31,31,30,30,30,31,30,30,30,30,30,30,29,30,30,29,29,30,28,29,29,30,30,29,30,30,30,29,31,30,30,30,30,30,29,30,30,30,29,29,29,30,29,28,29,28,27,28,29,29,26,28,29,29,27,29,30,30,29,30,29,30,30,30,30,29,29,30,30,30,30,30,30,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,29,29,29,29,29,29,30,29,29,29,28,29,28,27,28,28,27,26,28,27,26,26,28,26,26,26,27,25,24,27,27,28,29,30,30,30,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,30,30,30,30,29,28,27,28,26,26,27,26,26,26,28,27,25,26,27,25,23,23,25,23,22,25,24,22,24,24,22,24,21,22,22,21,22,19,22,24,22,22,23,24,22,26,24,26,24,24,24,24,22,23,22,21,21,20,20,20,19,18,17,16,14,13,12,8,6,6,5,4,2,0,1,4,5,6,8,8,11,11,14,16,16,19,19,19,22,20,23,22,23,26,24,28,29,29,30,29,30,30,30,30,31,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,29,30,31,31,31,30,30,30,29,30,30,30,28,29,28,29,29,28,29,30,29,29,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,30,30,31,30,30,29,31,30,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,30,31,31,30,30,30,30,29,30,29,30,30,31,31,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,29,29,28,28,28,28,29,28,28,30,29,28,29,30,30,30,30,30,30,30,30,30,28,29,29,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,30,31,31,30,31,30,30,30,30,30,30,30,29,30,30,28,30,29,30,29,30,29,29,29,29,29,29,28,28,28,28,28,28,26,27,28,27,25,26,28,26,26,27,26,27,27,26,24,25,27,27,28,29,29,30,29,30,30,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,30,29,29,30,29,29,27,27,26,24,26,26,23,26,27,26,25,24,27,26,24,25,26,24,23,26,24,22,25,24,22,23,21,22,22,21,22,20,22,23,22,22,23,24,23,25,24,26,24,24,24,24,23,23,22,22,23,22,21,20,20,18,18,17,16,15,14,12,9,7,7,5,4,2,0,1,3,5,7,7,8,10,12,15,15,18,18,19,22,19,22,22,22,26,24,28,29,29,30,29,29,30,30,30,31,30,29,30,30,30,29,30,30,29,29,30,30,29,29,30,30,30,30,31,31,30,31,30,30,30,29,30,30,30,29,28,28,29,29,28,29,30,29,29,30,30,30,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,29,30,30,30,30,30,31,31,30,31,30,30,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,31,30,30,31,30,29,30,30,29,30,28,30,30,30,31,30,29,30,30,30,30,30,30,30,30,31,30,30,31,31,31,30,31,31,31,30,31,30,31,31,31,30,31,31,30,30,30,30,30,30,29,30,30,29,29,30,28,29,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,27,28,28,28,27,28,28,25,28,30,29,27,29,30,30,29,30,30,30,30,30,30,29,29,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,31,30,31,30,30,31,30,30,30,30,29,30,30,29,30,30,30,29,29,29,29,29,29,29,29,29,29,29,28,29,29,27,27,28,27,26,27,27,27,25,27,26,26,26,27,25,25,27,27,27,28,29,30,30,30,30,31,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,29,30,30,29,30,29,28,27,28,26,25,28,26,25,26,27,26,25,26,27,25,24,25,26,24,24,26,24,23,24,24,22,24,23,23,24,22,23,22,23,25,23,23,24,25,23,27,26,27,25,25,24,24,24,24,22,22,22,22,22,22,22,20,19,18,17,17,16,14,11,7,8,6,5,4,2,0,1,3,5,6,8,9,11,13,14,16,17,18,22,18,22,22,22,25,23,28,28,28,30,30,29,30,30,30,31,30,30,30,31,30,30,30,30,29,29,31,30,30,30,30,30,30,30,30,31,31,31,30,30,30,29,30,30,30,29,29,28,30,29,28,29,30,30,30,30,31,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,31,30,31,31,30,31,31,31,31,31,31,30,31,31,31,31,30,30,31,30,29,30,30,29,30,27,29,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,29,31,30,30,30,31,31,31,31,31,30,31,31,30,31,30,31,31,30,30,30,30,30,29,30,29,29,29,30,28,29,28,30,30,28,30,30,30,29,30,30,29,30,30,30,30,30,31,30,30,30,29,30,29,29,29,29,29,28,28,29,27,27,29,29,27,29,30,30,30,30,30,31,30,30,30,29,30,30,30,30,30,31,30,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,29,30,29,29,29,29,28,29,28,27,28,28,26,27,28,27,25,26,27,27,25,28,27,27,27,26,25,24,27,27,27,29,29,30,29,30,30,30,30,30,30,30,30,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,31,31,30,31,31,31,30,31,31,30,31,30,30,30,29,30,30,29,29,29,29,29,29,28,28,25,27,25,25,27,26,26,27,28,28,25,26,28,25,24,25,25,24,24,27,25,23,24,24,23,24,23,23,24,22,24,21,23,26,24,24,24,26,24,26,25,27,25,25,25,25,24,24,24,23,24,23,23,22,22,21,20,18,18,17,17,15,14,12,8,7,7,5,5,2,0,1,4,5,7,7,8,13,12,14,16,17,20,17,21,21,21,25,23,27,29,28,29,29,29,30,30,30,31,30,29,30,30,29,29,30,30,28,29,30,30,29,29,30,30,30,30,30,30,31,31,30,30,30,29,30,30,30,28,27,28,29,29,28,29,30,29,28,30,30,29,29,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,29,29,30,30,30,29,30,30,31,30,31,30,30,31,30,31,31,30,31,31,31,30,31,31,30,31,31,31,31,30,30,31,30,30,30,30,29,30,28,30,30,30,31,29,29,30,30,30,30,30,30,30,30,31,30,29,31,31,31,30,30,31,30,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,29,30,30,29,29,30,28,28,29,30,29,28,30,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,29,30,29,29,29,27,28,28,28,29,27,28,30,29,27,29,30,30,29,30,29,30,30,29,30,29,29,30,30,30,30,30,30,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,30,30,30,30,29,30,30,29,29,29,29,29,30,28,29,29,30,29,29,29,29,29,28,29,28,28,28,28,28,28,27,26,26,27,26,24,26,26,25,25,26,25,26,26,25,24,24,26,26,26,28,28,29,29,29,30,30,30,30,30,30,30,29,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,30,30,31,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,30,30,29,30,28,28,29,29,28,28,28,28,25,26,26,24,26,26,25,25,25,25,25,23,25,25,24,24,24,23,23,25,23,22,24,23,21,23,22,23,23,22,24,21,22,24,23,23,23,24,24,26,26,26,25,25,25,25,24,23,23,23,23,23,23,21,22,21,21,19,19,18,17,16,15,13,11,8,7,7,6,4,2,0,1,3,5,6,7,9,10,12,13,14,19,16,19,21,21,25,24,28,28,28,29,29,29,30,30,30,31,30,30,30,30,30,29,30,30,29,29,30,30,30,29,30,30,30,30,30,31,31,31,30,30,30,29,30,29,30,29,29,28,30,29,28,29,30,29,29,30,30,30,29,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,31,31,30,30,31,31,30,30,31,30,30,31,30,30,30,30,30,30,30,31,30,30,31,31,31,30,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,30,30,31,30,30,30,30,29,29,29,29,30,30,30,30,30,30,30,30,29,30,31,30,31,31,30,31,31,30,30,31,30,30,30,30,31,31,30,29,30,29,29,29,29,28,29,28,29,30,29,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,30,31,31,30,30,31,31,30,30,30,30,29,29,29,29,29,29,29,29,28,29,29,30,29,29,30,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,29,29,30,28,27,27,27,27,29,29,26,28,29,28,27,29,30,30,29,30,30,30,30,30,30,29,28,30,30,30,30,31,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,31,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,29,28,26,28,27,27,26,28,27,26,26,26,24,23,27,26,26,28,28,30,30,29,30,29,30,29,29,30,30,29,29,30,30,29,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,30,30,30,30,30,30,29,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,31,31,31,30,30,31,30,31,30,29,30,30,30,30,30,31,30,30,31,30,30,30,31,30,30,30,31,30,30,30,30,30,29,29,29,29,28,28,27,26,24,25,25,23,26,26,25,27,27,28,25,25,27,26,24,26,26,24,24,27,25,23,26,25,23,25,23,24,24,23,25,23,23,25,24,24,24,24,24,27,26,27,25,25,25,25,24,24,24,24,24,23,23,23,23,22,21,20,21,19,19,18,17,15,14,11,9,8,7,6,5,3,0,1,3,4,6,8,8,11,13,14,17,18,19,21,21,24,23,27,25,27,29,29,29,30,30,30,30,30,29,29,30,30,29,29,30,28,29,29,30,30,30,29,30,30,30,29,31,31,30,30,30,29,29,29,29,29,30,28,29,29,28,28,29,30,29,29,30,30,29,29,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,30,31,30,30,30,30,30,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,30,31,31,30,30,31,30,29,30,30,30,29,30,30,29,29,30,30,28,30,30,30,30,31,31,30,30,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,31,30,31,30,31,31,30,30,31,30,29,30,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,31,30,31,31,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,28,29,30,29,30,29,28,29,30,29,28,29,30,29,29,30,30,29,30,30,30,30,30,31,30,30,31,30,30,31,30,30,31,31,30,30,30,30,30,29,29,29,29,28,29,29,28,28,28,29,29,27,29,29,29,28,30,30,29,29,30,30,29,30,31,29,30,30,29,30,29,29,29,28,28,27,27,29,28,27,29,28,27,28,29,29,28,30,30,30,29,30,30,28,29,30,30,30,30,31,30,30,31,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,29,29,29,29,29,29,29,28,29,28,27,28,28,27,26,27,26,26,26,26,26,26,26,26,26,26,25,24,23,26,26,25,28,26,29,29,29,30,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,30,30,30,29,29,30,30,30,29,30,31,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,30,30,30,30,30,30,29,30,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,31,31,31,30,30,31,30,31,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,29,28,29,28,27,26,27,23,26,26,24,26,26,25,25,26,26,24,24,26,25,23,26,25,23,24,27,24,22,24,25,22,24,24,23,24,24,24,23,23,24,24,24,24,24,24,26,26,26,26,25,25,25,24,24,24,23,23,23,23,23,24,23,23,22,21,20,19,19,17,16,14,13,12,9,7,6,5,3,1,0,1,3,4,6,7,9,11,11,15,14,18,18,20,23,22,26,27,27,28,28,29,29,30,30,30,30,29,30,30,29,29,29,30,28,28,30,30,29,29,29,30,29,30,30,30,30,30,30,30,29,28,29,29,29,28,28,28,29,29,27,29,29,28,28,29,30,29,29,29,30,30,30,30,30,30,30,31,30,30,31,30,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,31,31,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,29,30,31,30,30,31,31,28,30,31,30,29,30,31,30,30,31,30,29,30,30,30,30,31,31,30,30,30,31,31,30,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,30,30,30,30,29,30,31,29,29,29,29,30,30,29,30,30,30,30,30,29,30,30,29,30,30,29,30,31,30,30,30,30,30,30,30,30,30,29,29,30,29,28,29,29,28,29,28,30,29,29,30,29,29,29,30,29,29,30,30,29,29,30,30,29,30,30,30,30,30,31,30,30,31,30,31,31,30,30,31,31,30,30,30,30,30,29,29,29,29,29,28,29,28,28,28,29,29,28,29,29,29,28,29,29,29,30,30,30,29,30,30,29,29,29,29,29,29,29,28,28,28,27,28,28,25,27,29,27,26,28,29,29,28,29,29,29,29,29,29,28,28,29,29,30,30,30,30,31,30,30,30,30,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,30,29,30,30,30,30,30,29,29,30,29,29,29,28,29,29,29,29,29,29,29,28,29,29,28,28,28,28,28,27,27,26,25,26,25,25,25,24,24,24,23,24,24,25,24,24,24,23,25,24,27,25,28,27,27,29,29,29,28,28,29,29,29,30,30,29,30,30,30,30,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,29,31,30,29,30,29,28,29,30,30,29,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,29,30,30,30,29,30,29,29,29,30,31,30,30,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,31,29,30,31,30,30,30,28,28,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,28,27,29,27,27,28,27,26,26,26,26,23,25,25,23,25,25,24,24,24,24,24,24,24,23,25,24,24,23,24,25,24,24,23,24,23,24,24,23,24,24,24,23,23,24,24,25,24,24,24,26,26,27,25,25,25,25,24,25,24,23,23,24,23,23,24,23,23,22,22,21,20,19,18,16,15,15,13,11,8,7,5,4,3,1,0,1,3,5,5,7,10,10,14,13,16,16,19,22,22,26,27,26,27,28,28,29,30,30,30,30,29,30,30,29,29,30,30,29,29,30,30,29,29,30,30,30,29,30,30,31,30,29,30,30,29,29,29,30,29,28,28,29,28,28,29,30,29,28,30,30,29,29,30,29,30,30,30,30,30,30,31,30,31,31,30,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,29,30,30,30,30,30,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,29,31,31,30,30,31,30,29,30,30,29,30,30,30,28,29,30,30,29,30,30,29,29,30,30,28,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,28,29,30,28,28,27,28,28,28,28,29,29,29,29,30,29,29,30,29,30,30,29,30,30,30,29,30,30,29,30,29,30,30,28,28,29,28,28,28,28,28,28,27,29,29,27,29,28,27,28,29,29,28,28,30,29,29,30,30,29,30,30,30,30,29,31,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,28,28,28,28,26,28,26,27,26,28,28,27,28,28,28,28,29,29,29,30,29,30,29,30,29,29,29,29,28,28,29,28,27,28,28,26,27,27,27,27,28,27,26,27,28,29,29,29,29,29,29,29,29,28,28,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,31,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,28,28,28,28,28,27,27,27,27,26,27,26,26,26,26,24,24,26,25,24,27,25,28,28,28,29,29,29,28,28,29,29,29,29,30,29,29,30,30,30,30,31,31,30,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,30,30,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,29,30,29,31,30,30,29,29,28,29,30,30,28,29,30,30,29,30,30,30,30,30,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,30,31,31,30,30,30,30,29,30,30,29,28,30,29,29,29,30,30,30,30,30,30,31,31,30,30,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,30,31,31,30,30,31,31,30,29,30,30,29,30,30,30,28,30,30,30,30,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,29,28,28,28,28,26,26,25,26,22,24,26,23,26,26,25,27,28,27,26,26,28,27,24,26,27,25,26,27,27,25,26,26,24,26,24,25,25,24,25,24,24,26,25,25,25,25,26,27,27,27,26,26,26,26,25,26,25,25,25,25,25,25,25,24,24,24,23,22,21,19,19,17,16,16,14,13,10,7,6,6,4,3,1,0,1,3,4,6,9,10,13,12,16,16,18,22,19,24,25,25,28,28,29,29,30,30,30,30,29,30,30,29,29,29,30,29,29,30,30,29,29,29,30,30,30,29,30,30,30,30,30,30,29,29,28,29,29,28,28,29,29,27,29,29,29,28,29,30,29,28,30,30,30,30,30,30,30,31,31,30,31,31,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,30,31,31,30,30,31,31,29,30,30,30,29,30,30,30,30,30,31,31,30,31,31,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,31,30,29,30,30,28,30,30,30,28,30,30,29,28,30,30,28,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,29,29,29,30,29,30,29,30,28,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,31,29,29,30,29,29,29,29,28,29,26,29,29,28,29,29,28,28,29,28,27,29,30,29,28,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,28,29,29,28,28,28,26,26,26,29,28,27,28,29,28,27,29,30,29,29,30,30,29,30,30,30,30,30,30,30,29,29,29,28,28,27,28,29,26,27,28,27,26,27,28,29,28,29,29,30,29,30,29,28,29,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,29,29,30,29,29,29,28,29,28,28,27,27,27,26,26,26,27,26,26,26,26,27,25,24,24,26,24,25,26,24,27,27,28,28,29,29,28,28,29,29,29,29,30,29,29,30,30,31,30,31,30,30,31,31,29,31,31,30,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,30,31,30,30,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,29,30,29,31,30,30,30,29,29,28,30,30,29,29,30,30,30,30,30,30,30,31,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,30,30,29,30,30,30,28,30,29,28,29,30,30,30,30,30,30,30,31,30,30,31,30,30,31,31,30,30,30,31,31,31,31,31,31,30,31,30,31,31,30,30,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,30,30,31,30,30,29,30,30,29,30,31,30,29,30,30,30,30,29,28,28,30,29,29,29,30,30,29,30,30,30,29,30,30,29,30,29,28,28,27,26,27,27,27,26,26,26,25,23,25,22,24,25,23,25,26,25,25,27,27,24,24,27,26,23,25,26,23,25,27,25,23,25,25,23,25,24,24,25,24,25,23,24,25,25,25,25,25,25,27,27,28,26,26,26,26,25,26,25,25,25,25,25,24,25,24,25,23,23,22,23,23,20,19,17,16,15,14,13,11,8,7,5,4,4,2,0,1,3,5,7,7,9,10,12,15,16,19,19,22,25,25,27,25,27,28,29,29,29,30,28,29,29,29,28,29,29,29,28,29,29,29,29,29,30,29,30,29,30,30,30,29,29,29,28,28,29,29,27,28,27,29,28,26,28,29,28,26,29,29,26,27,29,29,29,29,30,29,30,30,30,30,30,31,30,30,30,31,31,30,30,31,30,30,31,31,31,31,30,31,31,31,30,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,29,30,30,30,30,30,30,30,31,30,31,30,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,28,29,30,30,28,30,30,29,28,30,30,28,29,30,30,29,30,30,30,29,30,30,30,30,31,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,28,30,30,29,29,29,29,29,28,29,30,29,30,30,30,29,29,30,29,30,30,29,30,30,30,29,30,30,29,30,30,30,31,29,29,30,29,29,28,29,27,28,27,28,28,28,29,28,28,28,29,29,28,29,30,29,28,30,30,28,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,28,28,28,27,26,26,25,28,27,27,27,28,28,28,28,29,29,29,29,30,29,30,30,29,29,29,29,29,29,28,29,28,27,26,28,28,25,26,28,26,24,25,28,28,27,28,28,29,28,29,28,27,28,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,31,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,27,27,26,26,26,25,26,25,25,25,25,26,26,25,24,24,24,23,24,25,23,27,26,27,26,29,29,27,28,28,29,27,29,29,29,29,30,30,30,29,31,30,30,31,31,29,31,31,30,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,30,30,29,30,31,31,30,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,29,30,30,29,30,29,28,28,29,29,28,29,30,29,29,30,30,30,30,30,30,30,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,30,30,29,29,30,29,28,29,29,28,29,30,30,30,30,29,30,30,31,29,30,31,30,30,31,31,30,30,30,31,31,31,31,31,31,30,30,30,31,31,30,31,31,31,30,30,31,31,30,30,31,30,31,31,30,31,30,31,30,30,31,30,29,30,30,29,30,30,30,29,29,30,30,30,29,28,27,29,29,29,29,30,30,28,30,30,30,30,30,30,30,30,29,28,28,26,26,27,26,25,25,26,25,24,24,25,21,23,23,23,25,26,25,25,26,25,25,25,26,25,24,26,26,24,26,26,26,25,25,26,24,25,24,24,25,24,25,24,25,26,24,25,25,25,25,28,26,28,26,27,27,27,25,26,26,26,25,25,25,24,25,24,24,23,22,21,23,21,21,19,19,17,16,15,15,13,11,8,8,5,5,3,2,0,1,3,5,6,8,10,11,15,15,19,21,23,26,23,26,26,27,28,29,29,30,30,29,29,30,30,29,29,30,29,29,30,30,29,29,30,30,29,30,30,30,30,30,29,30,30,29,29,29,29,29,29,28,29,28,27,29,29,28,28,29,29,28,27,29,28,29,29,30,29,30,30,30,30,30,31,30,30,30,31,30,30,30,31,30,30,30,31,31,31,31,31,30,31,30,30,30,30,30,30,30,31,31,31,31,30,30,31,30,30,31,31,31,31,30,31,31,31,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,31,31,30,30,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,30,29,30,30,29,30,30,30,28,29,30,30,28,29,30,29,28,30,30,28,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,31,30,30,30,30,30,29,30,30,30,29,29,29,28,28,27,28,29,27,27,29,28,29,28,29,28,29,30,28,30,29,29,30,30,30,29,30,30,29,30,30,30,30,29,28,29,28,27,28,28,27,28,26,27,28,27,29,28,26,27,29,28,27,28,29,29,28,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,28,28,28,26,26,25,25,25,27,26,27,26,27,28,28,29,29,29,29,29,30,29,30,29,29,29,29,29,29,30,29,29,28,29,25,27,28,26,25,28,26,25,25,28,28,28,28,29,29,29,29,28,28,28,29,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,31,30,31,30,31,30,31,31,31,30,31,30,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,29,30,30,29,29,30,29,29,29,29,29,28,28,27,28,28,27,27,27,27,26,27,26,27,27,26,25,25,23,22,23,25,21,26,25,26,28,28,29,27,27,28,29,28,28,30,29,28,30,30,30,30,30,30,30,31,31,29,30,31,30,30,31,30,30,30,31,31,30,30,31,31,30,30,30,30,30,30,29,29,30,30,30,30,30,30,31,30,30,30,31,31,30,31,31,31,30,30,30,31,30,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,30,29,30,30,29,29,28,28,27,29,30,27,29,30,30,29,29,30,29,30,30,30,30,30,30,31,30,30,31,31,30,30,31,31,30,31,31,31,30,31,30,31,31,30,30,31,31,30,31,31,31,31,30,31,31,30,31,31,30,31,31,31,30,31,31,30,30,30,30,29,30,30,30,28,29,30,29,28,29,28,28,28,29,30,29,30,29,29,30,30,29,29,30,30,29,30,30,29,30,30,31,30,30,31,31,31,30,30,30,30,31,30,30,31,30,29,31,31,30,30,30,31,30,30,31,31,30,30,30,30,30,30,30,29,30,30,27,30,30,30,28,29,30,29,29,29,26,27,29,28,28,28,29,29,28,29,29,29,29,29,29,29,29,28,28,27,26,25,26,26,26,24,25,24,22,21,23,21,24,25,24,25,26,26,26,26,27,26,26,28,27,25,26,27,26,26,27,26,25,26,26,25,25,26,25,26,25,25,24,26,27,25,26,25,25,26,27,27,28,28,26,27,27,26,26,26,26,26,26,26,25,25,26,25,24,24,23,24,23,23,22,20,20,18,17,17,15,12,11,9,7,6,5,3,2,0,1,4,5,7,9,10,12,15,17,19,20,24,22,26,25,25,27,27,28,29,29,27,28,29,29,27,29,29,28,28,29,29,29,29,29,30,29,29,29,30,30,30,29,29,29,29,28,29,28,28,28,27,28,27,25,27,28,27,25,28,28,27,26,28,28,29,28,29,29,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,31,30,31,31,30,30,31,31,30,30,31,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,31,31,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,28,29,30,30,28,30,30,29,28,30,30,28,29,29,29,28,29,29,29,28,29,30,30,30,30,28,30,30,30,29,30,30,29,29,30,30,30,30,30,30,30,29,30,30,30,28,30,30,30,29,29,30,29,28,28,29,29,30,28,30,28,29,30,28,30,30,28,30,30,30,29,30,30,30,30,30,30,30,29,29,30,29,29,29,28,27,27,25,27,28,26,29,28,27,27,29,28,27,29,30,29,28,30,30,29,30,29,30,28,29,30,30,30,30,29,30,30,29,30,30,30,30,29,30,30,30,29,29,29,28,28,28,27,26,25,24,26,27,27,26,28,28,28,29,29,29,29,29,29,29,30,30,29,29,29,29,29,29,29,29,28,28,27,28,29,25,27,28,26,25,26,27,27,27,28,28,28,27,28,29,28,28,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,31,30,31,31,30,30,30,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,31,30,31,30,30,30,30,30,30,30,29,30,30,29,30,30,30,29,30,30,29,30,29,30,29,28,29,29,29,29,28,28,27,27,27,26,26,26,26,26,26,25,25,26,25,25,24,25,24,24,26,22,26,25,26,27,28,28,28,27,28,28,28,28,30,29,28,29,30,30,29,30,30,30,31,30,29,30,31,30,30,31,30,30,30,31,30,30,31,31,31,30,31,30,30,30,30,29,30,30,31,30,30,31,30,31,30,30,30,31,31,30,30,31,30,30,30,30,30,30,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,29,30,30,29,30,28,28,28,29,29,28,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,29,30,31,30,30,31,31,30,30,31,30,30,31,31,31,31,31,30,31,31,30,31,31,31,31,30,30,30,30,30,31,30,31,31,30,30,31,31,30,30,30,30,29,30,30,30,28,29,30,29,28,29,29,27,28,29,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,28,29,30,29,28,29,30,29,29,28,27,26,28,28,27,28,29,29,28,29,29,28,29,29,29,29,29,28,27,27,25,24,26,25,24,23,23,24,22,20,23,20,23,22,23,24,25,24,24,25,25,25,24,26,25,24,26,26,25,25,26,26,25,25,26,25,24,24,25,24,25,25,24,25,25,24,25,26,25,25,28,27,28,26,26,27,27,26,26,26,26,26,25,25,25,26,25,25,24,24,23,23,23,21,22,21,20,20,18,17,16,14,13,11,7,8,6,4,3,1,0,1,3,6,6,8,11,12,15,17,20,22,21,24,24,25,26,28,28,29,29,28,28,29,29,28,28,29,28,28,30,29,28,28,29,29,29,29,29,30,30,29,28,29,29,28,28,29,28,28,28,27,28,27,26,27,28,27,25,28,28,26,26,28,27,28,28,29,29,29,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,29,30,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,29,30,30,29,29,30,30,28,29,30,29,28,29,30,29,28,30,30,28,28,30,30,28,29,30,29,29,29,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,30,29,30,30,30,28,30,30,29,28,29,29,28,28,27,28,28,28,28,28,28,29,28,29,28,29,30,28,29,29,29,29,30,29,29,30,29,29,30,30,30,30,29,28,29,29,28,27,27,27,27,26,28,27,26,29,27,27,26,29,28,27,27,29,28,27,29,29,28,29,30,29,29,28,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,29,27,27,26,25,25,25,23,24,26,26,25,27,27,26,27,28,28,29,29,29,29,29,29,29,29,28,28,29,29,28,28,28,27,26,27,27,24,24,27,25,23,24,26,26,27,27,27,27,27,28,27,27,27,28,29,29,29,29,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,31,31,31,30,30,31,31,31,31,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,28,28,28,28,27,28,27,27,26,26,27,27,26,25,25,25,24,24,25,22,26,25,26,26,28,27,25,27,27,28,26,28,29,28,28,30,30,30,30,31,30,30,30,30,29,30,31,30,30,31,31,31,30,31,31,30,31,31,31,30,31,31,30,30,30,30,30,30,30,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,29,30,29,29,30,28,27,28,29,30,27,28,30,30,29,29,30,30,30,30,30,30,30,31,31,30,30,30,31,31,31,31,31,31,31,31,30,31,31,31,31,30,30,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,28,29,30,29,27,28,28,28,28,29,30,30,30,29,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,31,30,30,31,30,30,30,31,31,30,30,31,31,30,31,31,30,30,30,30,30,30,31,31,31,30,31,30,30,30,30,29,30,30,28,29,30,30,28,29,30,29,29,28,26,26,28,27,26,27,30,28,27,29,30,28,28,29,29,29,29,28,27,27,24,23,25,25,23,23,22,22,21,19,22,21,22,23,25,25,26,26,26,27,28,26,26,27,27,26,27,27,26,27,28,27,26,26,28,26,26,26,27,26,26,26,24,26,27,25,26,26,26,26,29,27,29,27,28,28,28,27,28,27,27,27,27,27,26,27,26,26,25,25,24,25,24,23,22,22,22,21,21,21,18,17,17,15,11,10,10,7,5,5,2,0,1,4,5,7,10,11,14,17,20,22,20,24,24,24,26,27,28,29,29,27,28,29,29,27,29,29,28,28,29,29,29,28,30,30,29,29,29,30,30,29,28,29,29,28,28,29,29,28,28,28,28,28,26,27,28,27,25,27,27,26,25,28,26,29,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,30,30,31,30,31,31,30,30,30,31,29,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,31,31,30,30,31,30,31,30,31,30,31,31,30,30,31,31,30,30,31,30,29,30,30,30,29,30,30,27,29,30,30,27,29,30,29,27,30,30,26,28,30,30,28,29,29,29,29,29,30,30,30,30,28,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,29,30,30,30,28,29,30,29,29,28,29,29,27,28,29,28,29,28,29,27,29,30,28,30,29,27,30,30,29,29,30,30,29,29,30,30,30,29,28,30,29,28,28,27,26,26,26,26,28,26,28,28,26,25,29,28,26,27,29,27,26,29,29,27,29,29,30,29,29,30,29,30,30,29,30,30,29,30,30,30,30,29,29,29,29,28,29,29,27,27,27,26,25,24,22,24,27,26,24,26,28,26,27,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,27,28,28,25,25,27,25,25,24,27,26,26,27,27,27,27,28,27,27,28,29,29,29,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,31,30,30,30,30,31,30,30,31,30,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,29,30,29,28,28,28,28,27,27,27,27,27,27,26,26,28,27,27,24,25,24,24,24,21,25,23,25,24,27,27,26,26,28,28,28,28,30,29,28,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,31,31,30,30,30,30,30,31,31,31,31,31,31,30,30,31,30,30,30,30,31,30,30,30,30,30,31,30,29,30,29,29,28,30,30,28,29,30,30,29,30,30,30,30,30,30,30,31,31,31,30,30,30,31,30,30,31,31,30,30,31,30,30,31,30,30,31,30,30,30,30,30,30,30,31,31,30,30,30,30,30,31,30,31,31,30,30,31,30,30,30,30,30,29,30,30,30,29,30,30,29,27,28,28,27,29,29,30,29,30,30,28,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,28,29,30,30,28,29,30,29,29,28,26,25,28,27,25,27,29,28,26,29,29,28,28,29,29,28,28,28,26,25,23,22,24,23,23,21,21,20,20,16,20,19,23,23,24,25,25,26,26,27,27,26,26,28,26,26,27,27,25,26,27,26,25,26,27,25,25,25,25,25,25,25,24,26,26,26,26,26,26,27,29,28,29,28,28,28,28,28,28,27,27,27,27,26,27,27,27,26,25,25,24,25,25,24,24,23,23,22,21,22,20,18,18,17,14,13,10,8,8,6,5,2,0,1,4,5,8,10,11,14,17,20,19,22,21,24,25,27,27,28,28,26,27,29,28,27,28,29,27,28,29,29,28,28,28,29,28,29,29,30,30,29,28,29,28,28,28,29,28,27,27,26,28,27,25,27,27,25,24,27,28,25,24,26,26,28,27,28,28,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,29,30,30,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,28,29,30,28,28,30,30,27,28,29,29,27,29,29,28,28,29,30,29,30,30,28,29,29,30,28,30,30,29,30,30,30,30,30,30,30,30,29,30,30,30,28,30,30,29,29,29,30,29,27,28,29,29,30,28,30,28,29,30,28,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,29,30,30,29,29,27,27,27,26,27,27,26,29,27,26,26,28,28,27,27,29,27,26,29,29,27,29,29,29,27,28,29,29,29,30,29,30,30,29,30,30,30,30,29,29,30,30,27,29,29,27,27,28,26,25,24,22,23,25,26,23,26,27,26,27,28,28,27,27,29,29,29,29,29,30,29,28,29,29,28,28,28,28,26,28,28,24,25,26,23,22,22,25,24,24,25,26,27,26,27,28,26,27,28,28,29,30,29,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,28,27,27,26,27,28,27,25,27,27,25,24,25,24,24,23,24,22,26,24,24,26,27,27,27,28,28,28,27,28,29,29,28,29,30,29,29,30,30,30,30,30,29,30,30,30,30,31,30,31,31,31,31,31,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,31,30,30,30,31,31,30,31,30,30,30,30,30,30,30,30,30,30,31,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,29,30,29,28,28,30,30,29,29,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,29,29,29,29,27,29,30,30,29,30,30,29,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,29,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,28,29,30,29,28,29,30,29,29,28,26,26,28,26,25,28,29,27,27,29,29,28,28,29,29,29,28,27,25,25,22,21,22,22,21,21,19,20,20,16,19,18,21,20,22,22,24,24,24,26,26,26,26,27,26,26,26,27,26,26,28,27,26,27,27,26,26,26,26,26,26,27,24,25,26,25,26,26,27,27,29,26,29,28,28,29,29,27,28,28,27,28,27,27,27,28,27,27,25,25,24,26,26,24,23,24,22,23,23,24,22,20,20,19,17,16,13,10,8,9,6,4,2,0,1,3,5,8,9,12,16,18,16,22,21,21,24,26,27,28,28,26,27,28,27,26,28,29,27,27,29,29,28,28,29,29,29,28,28,30,29,29,27,28,28,27,28,29,28,27,27,26,26,27,26,25,27,26,24,25,27,24,24,27,26,28,27,29,28,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,29,29,30,30,29,30,30,30,28,30,30,29,28,28,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,27,29,29,28,27,29,29,28,27,29,29,27,28,29,29,28,29,30,29,28,29,30,29,30,30,28,29,29,30,28,30,30,29,29,30,30,29,28,28,29,29,27,29,29,29,27,28,29,28,27,27,29,28,26,26,28,28,29,28,29,27,29,29,28,30,29,29,30,30,30,29,29,30,29,30,29,29,30,29,29,29,29,28,28,26,27,26,25,27,27,26,28,26,25,26,28,26,25,27,28,26,26,28,28,25,28,29,28,27,27,29,28,29,29,28,29,29,28,29,29,29,29,28,28,28,28,26,28,28,26,25,26,25,23,23,21,23,26,23,21,25,25,24,25,27,27,25,26,28,28,28,28,28,28,28,27,29,28,27,27,27,27,25,25,26,23,23,24,23,20,21,23,24,22,25,25,25,25,26,27,26,26,27,27,28,28,29,29,29,29,30,29,29,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,30,31,31,31,30,31,30,30,30,31,30,30,30,30,30,29,29,29,29,28,27,29,28,28,27,28,27,28,28,27,26,26,25,25,22,24,22,24,24,25,26,26,27,25,27,28,29,28,28,29,29,29,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,30,31,30,31,31,31,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31,31,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,29,30,29,29,28,29,30,28,28,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,30,30,31,31,30,30,30,30,28,30,30,28,27,28,29,27,29,29,29,29,29,30,28,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,28,29,30,30,28,29,30,29,28,27,26,26,27,26,26,26,28,27,26,28,28,27,27,28,28,28,28,27,25,25,21,21,23,22,21,20,18,20,20,16,19,16,20,21,23,24,24,25,26,28,27,25,26,28,27,26,27,28,27,27,28,27,27,27,28,27,27,27,28,27,27,27,26,27,28,26,27,27,27,28,29,28,30,28,29,29,29,27,28,29,28,28,28,28,28,28,27,28,27,26,26,27,26,26,26,25,24,25,24,24,23,21,22,22,20,18,15,14,11,11,8,7,5,2,0,1,4,6,7,10,14,16,15,20,19,20,24,25,26,27,28,24,27,28,27,25,27,28,27,25,28,28,27,27,28,29,29,28,28,29,29,28,27,28,28,26,27,28,26,27,28,26,26,27,25,25,26,25,23,25,27,23,22,26,24,28,26,28,28,28,29,29,29,29,30,30,30,30,30,29,30,30,30,30,29,30,30,30,30,30,30,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,29,30,30,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,28,29,30,29,28,29,30,28,28,30,29,26,28,29,29,26,28,29,28,27,29,29,29,29,30,28,29,29,30,28,30,30,29,29,30,30,29,30,29,30,30,29,29,30,29,27,29,30,29,28,28,29,29,27,28,29,29,29,29,30,28,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,29,30,30,29,29,28,28,27,26,26,28,26,28,27,26,25,28,27,25,27,28,26,25,29,29,25,28,29,29,26,28,29,29,29,30,29,30,30,29,29,29,30,30,28,28,29,29,27,28,29,27,26,28,26,24,23,21,22,25,24,21,24,26,25,25,27,27,25,28,28,27,28,28,28,29,28,29,29,28,27,28,27,28,25,27,26,23,24,25,21,20,20,23,23,22,24,24,25,24,26,26,25,27,27,28,29,29,29,28,30,29,30,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,29,29,29,29,29,28,28,29,28,28,27,28,27,27,26,25,26,26,23,25,23,24,26,25,27,27,27,26,27,29,29,27,27,30,28,27,29,30,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,28,28,29,28,29,29,30,30,30,29,29,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,28,29,30,29,28,29,30,29,28,28,26,28,28,27,25,29,29,27,27,28,28,27,28,29,28,28,27,26,26,25,21,21,21,23,23,19,19,22,21,12,18,18,21,20,23,25,26,26,26,28,27,26,26,28,27,26,27,27,27,27,28,28,27,28,28,27,27,27,28,27,27,28,25,25,28,27,26,27,28,29,30,28,30,29,29,30,30,29,29,29,29,29,29,29,29,29,28,28,27,27,26,27,27,26,26,26,25,25,25,26,24,22,25,21,20,21,17,16,15,11,9,9,7,5,2,0,1,4,6,8,12,15,15,19,19,20,24,24,26,26,28,26,26,28,27,25,26,28,27,26,27,28,26,27,28,29,28,28,28,29,28,28,27,27,28,26,27,28,26,26,27,25,26,25,25,25,26,25,23,25,26,23,22,26,25,27,26,28,28,28,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,29,29,28,29,29,29,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,30,29,28,29,29,28,28,29,29,28,28,30,29,27,28,30,29,26,29,29,28,28,29,30,29,29,30,29,29,30,30,29,30,30,29,29,30,29,29,30,29,29,29,29,29,30,29,27,29,29,29,28,27,29,28,26,27,28,28,29,27,29,28,28,29,29,30,30,29,30,30,30,29,30,30,30,30,29,30,30,30,29,29,29,29,29,27,28,27,26,26,27,26,28,27,25,25,28,27,25,27,28,25,25,29,28,24,28,29,29,26,27,29,28,29,29,29,29,30,29,29,29,29,29,28,28,29,28,26,28,29,26,25,27,25,24,24,20,24,25,23,22,26,25,23,24,26,26,25,26,28,27,27,28,28,29,28,28,28,27,27,28,26,26,25,26,26,22,23,24,21,19,20,23,21,22,24,24,24,24,25,26,25,27,27,27,28,29,29,28,30,29,29,29,28,29,29,29,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30],[31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,31,31,30,31,31,30,30,31,30,30,30,30,30,31,30,30,31,31,30,31,30,31,31,31,31,30,30,30,31,30,30,29,30,29,29,28,28,28,27,28,28,27,27,28,28,26,25,25,25,26,23,24,22,25,22,22,24,25,26,26,25,27,28,27,26,28,28,28,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,29,30,29,29,29,30,29,29,29,28,28,27,29,29,28,28,29,29,28,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,29,26,27,27,28,27,28,28,29,28,29,29,28,28,29,29,28,30,29,28,28,29,29,29,29,30,30,30,30,30,30,29,29,28,30,30,29,29,30,30,29,30,30,30,30,29,30,29,30,30,30,30,30,30,29,29,30,29,28,29,29,27,28,29,28,27,28,28,27,27,26,24,24,26,25,24,26,27,25,25,27,27,26,28,28,28,27,26,24,24,23,18,19,21,20,20,18,17,18,18,15,17,18,20,20,23,24,24,25,25,26,27,26,26,27,27,26,27,26,26,27,27,27,26,27,28,28,28,26,28,27,27,28,26,26,27,26,26,26,27,28,29,28,29,28,29,29,29,29,29,29,29,29,28,28,28,28,28,28,27,27,26,27,26,26,25,25,24,25,24,26,24,23,25,22,21,21,18,18,16,14,11,10,9,7,5,2,0,1,3,6,8,11,12,15,15,16,21,22,25,26,26,25,25,27,26,24,26,27,25,25,27,27,26,26,27,28,28,27,27,28,28,27,26,28,27,26,27,28,26,26,27,24,25,26,24,25,25,24,22,23,26,22,20,24,24,27,25,27,26,27,28,29,28,28,29,28,28,28,29,29,29,29,29,29,29,30,29,29,29,29,29,28,29,28,28,28,28,29,28,28,30,30,29,29,30,29,29,29,30,29,29,29,29,28,29,29,29,28,29,29,28,27,28,28,28,29,29,29,30,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,28,29,29,27,28,29,28,27,28,28,27,26,28,28,24,27,28,27,25,27,27,26,26,27,28,27,28,28,27,27,28,29,27,28,29,28,28,29,29,28,28,27,28,28,27,28,28,28,26,28,28,28,27,27,28,28,25,27,28,28,28,27,29,28,29,30,28,29,29,29,29,29,30,29,29,30,30,29,30,29,30,29,29,29,29,29,29,27,27,26,27,26,26,24,27,26,24,24,27,27,22,25,27,24,23,27,27,22,27,27,27,24,26,27,27,27,28,26,28,28,27,28,28,28,28,27,26,27,27,25,26,28,26,24,26,25,24,22,20,21,24,22,19,23,24,21,23,25,25,22,25,27,25,25,27,27,27,26,27,28,26,26,27,25,26,25,25,24,22,21,22,17,16,18,20,19,17,23,21,24,23,23,24,23,25,25,26,26,27,28,26,29,27,29,27,27,28,29,28,28,29,28,28,30,29,29,29,29,29,29,29,29,30,30,30,30,30,29,29,30,29,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,30,31,31,31,31,30,31,30,30,30,31,31,30,31,30,30,30,30,30,31,30,30,30,30,30,31,30,30,30,30,30],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,30,30,30,29,29,29,29,29,28,29,28,28,28,29,27,28,28,28,27,27,26,26,21,24,21,24,21,23,25,25,27,26,26,28,28,26,27,29,28,27,28,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,29,30,29,28,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,30,30,30,31,30,30,30,30,30,29,30,29,30,29,30,29,29,29,28,29,27,29,29,28,28,29,29,29,29,30,29,29,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,29,28,29,30,28,27,27,28,27,28,29,28,27,29,29,27,29,30,28,28,29,29,28,30,29,29,28,29,30,29,30,30,30,30,29,29,28,30,30,29,29,30,30,28,30,30,30,29,30,30,30,29,30,30,29,30,30,29,29,29,29,29,29,29,27,29,29,28,28,28,29,28,28,27,25,24,26,25,22,25,28,26,23,27,27,25,26,27,27,25,25,22,22,22,17,16,21,20,20,17,15,18,19,12,16,14,20,18,21,24,24,25,24,26,26,27,26,28,27,26,27,27,27,26,27,27,26,27,27,27,27,27,27,27,27,27,26,26,27,26,27,27,26,27,29,28,29,28,28,29,29,28,29,28,28,28,28,28,28,28,28,28,27,27,26,26,27,25,26,25,25,25,24,27,24,23,25,24,23,23,20,19,18,15,13,11,9,9,6,4,2,0,1,5,6,9,12,14,13,16,19,22,23,25,26,24,25,26,24,24,25,26,25,24,26,26,24,26,26,28,27,26,26,28,27,26,25,26,25,24,25,27,25,24,25,24,25,24,22,23,24,23,20,23,24,19,17,24,21,25,24,26,27,26,27,29,27,28,29,29,29,28,29,29,29,28,29,29,28,29,29,29,29,29,29,29,30,27,29,28,29,29,29,28,29,29,28,29,30,29,28,29,30,29,28,30,29,28,28,30,29,27,29,29,28,27,29,28,28,29,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,28,29,29,27,28,28,28,27,28,28,27,27,29,29,27,27,29,28,27,28,29,27,28,28,28,28,28,29,29,28,28,29,28,29,29,28,28,29,29,28,28,28,29,29,28,28,29,28,28,28,29,28,28,27,29,28,27,28,28,28,28,27,29,28,29,30,29,29,30,29,30,30,29,29,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,28,27,27,27,26,28,26,26,25,27,27,24,25,28,25,25,28,27,23,27,27,27,24,26,28,27,28,28,27,29,29,28,28,28,29,28,28,27,28,28,26,27,28,26,24,26,25,23,23,18,22,25,22,19,23,25,21,22,25,25,23,25,27,25,25,27,26,28,26,27,27,26,26,27,25,26,25,25,24,19,21,20,16,14,17,19,17,17,22,18,23,23,24,23,22,25,25,26,27,27,29,27,29,28,29,28,28,29,28,28,28,29,28,28,29,29,29,29,29,29,28,29,29,29,29,29,30,30,29,30,30,29,30,30,29,30,30,30,30,30,30,30,31,30,30,30,31,30,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,31,31,31,31,30,30,30,31,30,30,30,30],[31,31,30,30,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,31,30,30,30,30,30,30,29,29,28,28,28,28,27,27,28,27,26,26,26,26,24,24,23,23,24,22,22,22,23,22,21,23,23,23,24,25,26,26,25,24,27,27,24,27,27,28,28,28,29,29,29,29,29,29,30,29,29,30,30,30,29,30,29,30,29,30,29,29,29,29,29,29,30,29,29,29,28,29,29,29,29,30,29,30,30,30,30,29,30,29,29,29,29,29,29,30,30,30,30,30,29,30,30,30,30,30,30,29,29,30,29,29,28,28,28,29,28,28,28,27,26,27,27,28,27,27,28,28,28,28,29,28,28,29,29,28,29,29,29,29,28,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,28,29,29,29,29,29,29,30,29,30,30,29,29,30,29,27,28,28,27,25,27,27,25,26,26,27,26,27,27,27,27,27,27,27,28,28,27,27,28,27,26,28,27,26,27,28,28,28,28,29,29,29,27,28,26,29,29,28,27,29,29,27,29,29,28,29,29,28,29,29,29,29,29,28,29,27,28,28,27,26,27,27,25,26,27,26,26,26,26,25,25,24,22,23,24,23,21,23,25,23,23,25,25,23,25,26,25,26,24,22,21,20,17,15,19,19,19,17,15,18,18,14,16,15,20,18,21,21,23,22,22,24,24,24,24,26,24,24,26,26,24,25,26,27,25,26,28,27,27,26,28,26,25,26,24,25,25,26,25,25,25,26,28,27,28,28,28,28,29,28,29,29,28,28,28,28,28,28,28,28,27,26,26,26,26,25,25,25,25,25,24,26,24,24,25,24,23,22,20,20,19,17,15,14,11,9,9,5,3,1,0,1,4,7,10,13,13,13,17,19,22,25,24,22,24,24,24,23,25,24,23,22,26,25,24,24,26,26,26,25,26,26,25,26,24,26,26,24,27,26,25,23,25,23,23,25,21,22,24,22,18,22,24,18,17,23,20,25,24,25,24,25,27,26,27,26,28,26,26,27,27,27,28,27,27,28,27,27,28,28,27,28,27,27,28,26,27,25,27,28,27,26,28,28,27,27,28,28,27,28,28,28,26,28,28,26,27,27,28,25,27,27,27,25,26,27,26,27,27,27,28,29,28,29,28,28,29,29,29,29,29,29,29,29,30,29,29,28,29,29,29,28,29,29,29,28,28,28,28,27,27,28,27,24,27,27,26,25,26,27,25,24,27,26,24,25,27,25,23,26,25,24,24,26,27,26,26,27,26,25,26,27,25,27,27,26,26,27,27,26,26,25,26,26,25,27,26,26,25,25,25,26,26,25,26,25,24,25,25,26,26,27,27,27,28,28,27,28,28,28,28,28,28,28,28,29,28,28,29,28,28,28,27,28,27,28,27,26,26,25,24,23,25,24,25,24,22,24,25,24,20,24,26,23,22,25,25,21,24,25,25,22,25,25,26,26,26,26,27,27,26,26,25,26,25,26,24,25,25,23,25,25,23,21,24,23,22,21,18,20,23,21,19,22,23,18,20,23,23,19,23,25,22,23,24,24,24,25,24,25,24,23,23,23,23,22,22,20,16,19,18,13,13,15,17,17,14,20,16,22,21,22,20,19,23,23,24,24,25,25,25,26,25,27,25,25,26,26,26,26,28,27,26,27,27,26,27,28,28,27,28,28,28,27,28,28,29,28,28,28,29,29,28,28,29,28,29,29,29,29,29,30,30,29,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30],[30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,28,28,28,27,28,27,28,27,27,26,26,25,25,25,24,23,22,22,22,19,20,20,20,19,19,21,23,24,22,22,24,25,24,24,25,25,26,26,27,28,28,28,29,28,28,28,29,28,29,28,28,29,29,29,29,29,28,29,29,29,29,28,29,29,29,28,29,29,28,28,28,29,29,29,28,29,28,28,29,29,29,29,29,28,29,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,29,27,27,28,28,27,27,27,27,26,26,26,27,25,25,27,26,26,27,28,27,27,28,28,27,28,28,28,28,28,28,28,28,28,29,29,28,28,28,28,29,28,28,28,28,28,28,28,28,28,27,28,28,28,29,28,28,29,28,28,28,29,28,29,29,29,28,28,28,29,28,27,27,27,26,25,26,25,23,24,23,25,23,25,25,25,25,27,26,25,25,26,25,24,26,26,25,25,26,25,26,26,27,27,27,27,27,28,26,27,26,27,28,27,26,27,28,27,27,27,28,27,27,27,27,28,28,27,28,28,28,26,27,27,26,26,25,25,24,25,25,24,23,24,24,23,23,24,20,21,22,21,20,21,22,21,20,21,21,22,22,21,21,21,21,19,19,18,13,13,16,15,16,15,13,15,16,11,13,13,18,16,18,19,19,21,21,23,23,22,23,24,24,22,25,25,24,24,25,26,25,26,27,26,26,25,27,26,25,26,25,24,24,25,26,24,26,26,27,27,28,27,28,28,28,28,29,29,28,28,28,29,28,28,28,28,27,27,26,27,26,25,26,24,25,25,24,25,24,24,25,22,24,23,21,22,21,19,18,17,15,11,10,9,6,4,2,0,1,4,7,8,9,10,13,14,17,21,19,18,19,21,19,18,20,21,20,18,22,22,22,21,23,24,24,22,23,23,23,22,20,22,23,20,23,23,20,20,22,20,20,22,18,18,20,20,17,18,20,16,14,19,16,22,19,21,21,21,21,23,22,22,24,24,23,24,25,25,25,24,26,25,25,25,27,27,26,25,26,25,26,23,24,23,25,26,24,25,27,27,25,25,26,26,25,25,26,25,24,27,26,25,25,26,27,23,25,26,25,23,24,25,25,26,26,25,27,27,26,27,27,27,28,28,27,28,28,28,29,29,29,28,28,29,28,28,28,28,28,28,28,27,26,27,28,26,26,26,26,23,25,25,23,23,24,24,22,22,24,23,21,22,22,22,19,22,22,21,21,22,22,21,23,24,23,23,23,25,23,24,24,23,23,25,26,23,24,21,24,24,22,23,23,23,21,22,24,24,23,23,25,23,22,23,24,24,25,25,27,25,27,28,26,27,26,27,28,28,27,27,28,27,27,28,28,27,28,28,26,26,26,26,26,24,24,23,23,22,22,21,23,22,19,21,22,22,18,21,22,18,19,22,21,17,22,21,22,19,20,22,21,22,23,20,24,24,21,22,23,24,23,22,19,23,23,19,21,23,21,18,22,21,19,18,16,16,21,16,14,18,20,15,17,18,20,15,18,21,20,18,21,21,22,22,22,22,20,23,23,19,20,19,19,17,15,14,14,11,10,11,12,12,10,14,14,17,15,18,17,16,20,20,21,21,22,24,22,24,22,26,23,23,24,24,23,24,24,23,23,25,25,24,25,25,25,24,25,26,26,25,27,26,27,26,26,27,26,27,26,27,28,27,28,28,27,27,29,29,29,28,29,29,29,30,29,29,30,29,30,29,30,30,30,29,30,30,29,30,30,30,29,29,30,30,29,29,29,29,29,30,29,29,29,29,29],[30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,29,28,29,29,28,29,29,28,29,29,29,29,29,28,29,29,30,29,30,29,29,29,29,29,29,28,28,29,28,28,26,27,25,25,27,26,26,24,25,24,23,23,22,22,20,18,16,15,14,13,12,13,12,12,11,13,13,16,14,15,17,18,15,16,19,18,16,19,20,21,21,22,23,22,24,23,23,25,24,23,23,26,25,26,25,25,25,25,26,26,26,25,25,25,25,24,24,24,24,23,25,23,25,25,22,23,25,26,24,25,25,26,24,25,26,24,23,25,25,26,25,25,26,26,24,26,26,25,26,25,24,23,24,24,22,23,21,23,22,24,22,20,22,21,19,20,21,21,18,19,21,20,19,21,23,20,21,24,23,19,22,23,23,24,20,24,24,23,22,24,25,23,23,24,23,23,24,24,24,25,24,24,24,24,24,23,23,23,23,22,23,23,22,24,24,22,25,24,23,23,24,24,21,22,23,21,18,21,22,18,16,20,20,16,16,18,18,20,21,20,19,19,20,19,18,20,21,19,19,20,21,16,19,19,18,18,20,21,21,22,22,22,20,19,20,17,20,21,19,17,22,22,17,21,21,22,20,21,21,22,23,22,22,21,21,19,17,19,19,17,17,19,17,14,16,19,16,14,18,18,15,16,15,11,14,16,13,10,15,16,11,14,15,16,14,18,16,15,17,14,15,15,10,9,7,9,8,8,9,7,8,8,7,8,9,10,11,13,15,15,16,17,20,19,18,18,19,18,19,20,19,20,21,23,23,22,23,24,24,26,23,25,24,23,24,23,21,23,25,24,23,24,24,25,25,27,26,28,28,28,28,29,29,28,28,28,28,28,28,28,27,26,26,25,26,25,24,24,22,24,24,22,24,23,23,24,22,22,23,20,21,20,19,19,17,15,13,11,10,8,6,3,3,0,1,2,4,5,7,7,10,10,13,14,12,12,16,16,14,15,16,16,17,19,17,17,19,20,20,20,19,19,18,16,18,15,17,18,17,19,19,16,16,16,14,16,16,13,14,15,13,14,14,14,13,10,13,11,15,14,14,15,14,16,16,17,18,17,17,18,20,19,18,20,20,20,20,21,20,22,21,18,20,19,19,20,17,18,14,18,21,17,16,20,21,17,18,20,19,16,18,19,18,14,19,20,16,15,19,19,14,18,19,17,14,16,17,18,18,19,18,20,20,20,22,23,20,21,23,21,20,23,24,23,22,23,23,23,24,23,23,23,22,22,22,22,21,20,21,21,18,18,21,18,14,17,19,16,15,17,17,14,14,17,15,11,14,16,12,10,16,17,13,13,15,17,15,17,17,16,16,17,16,15,16,18,15,14,18,18,17,16,13,17,17,13,14,16,16,13,15,16,16,13,14,16,16,13,15,18,17,18,19,21,20,21,22,19,22,21,21,22,23,21,22,22,22,22,23,24,23,22,22,21,21,19,20,19,18,17,15,15,14,16,14,15,15,12,12,16,13,11,12,14,11,11,14,11,10,12,14,12,11,13,15,15,16,14,12,15,16,12,14,16,17,15,14,13,15,15,12,13,15,12,11,13,12,11,9,9,9,10,8,7,10,11,7,9,13,11,9,12,13,11,12,15,12,15,15,14,14,12,15,14,12,16,13,13,12,10,9,8,7,5,5,6,5,6,9,9,12,9,11,9,11,14,14,14,15,14,17,15,17,15,18,18,16,17,18,17,15,19,18,16,17,19,18,16,19,20,18,19,20,21,19,20,22,22,22,21,22,21,23,22,22,23,24,24,25,26,25,27,27,29,27,27,27,27,29,27,28,29,28,28,28,29,28,28,28,29,28,29,29,29,28,28,26,28,28,28,27,28,28,25,27,27,26,27,27,26],[30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,28,29,29,28,29,28,27,29,29,28,28,29,28,29,29,28,29,30,30,29,30,29,29,29,29,29,29,28,29,28,28,28,27,27,26,26,26,26,25,24,25,24,24,23,22,20,18,15,12,11,10,9,8,8,7,7,7,7,7,9,8,9,11,11,10,10,13,12,11,13,14,15,15,16,16,17,18,17,17,17,17,17,17,19,19,19,19,19,19,19,20,19,19,19,19,20,17,18,17,17,18,16,18,17,17,18,17,18,17,18,17,17,19,19,18,18,20,17,18,17,18,17,19,19,19,19,19,20,19,17,18,18,18,15,16,17,15,15,16,15,16,16,16,16,15,16,13,15,15,15,13,15,15,15,14,15,14,15,15,16,15,14,16,16,15,16,15,15,17,17,15,17,16,16,16,16,17,16,16,16,17,18,17,17,18,17,16,18,18,18,18,18,17,16,17,17,18,15,18,18,16,15,17,16,13,14,16,15,12,14,15,12,11,13,13,10,10,12,12,12,14,13,14,15,15,14,13,14,14,13,13,14,15,11,13,13,12,11,13,13,14,15,15,13,14,13,14,11,13,15,12,12,15,15,13,14,15,15,14,14,15,16,15,15,16,14,13,13,12,14,13,11,11,12,11,9,10,12,9,9,10,10,8,9,9,6,7,8,7,6,7,8,6,6,8,8,7,9,9,8,10,7,7,6,5,5,4,5,4,5,5,3,4,5,4,4,6,6,6,9,9,10,11,14,18,18,14,15,20,17,15,19,19,18,18,21,22,21,22,24,24,25,23,25,23,22,25,22,21,23,24,23,22,24,25,25,26,27,27,27,27,28,28,28,28,28,28,28,28,27,28,27,27,26,27,25,27,25,25,25,23,26,24,24,26,23,23,25,22,23,24,21,22,22,20,20,19,17,15,13,12,9,7,5,3,1,0,1,2,3,3,4,5,6,8,8,6,7,8,8,7,8,9,9,9,10,10,9,10,12,13,12,11,11,12,10,10,10,10,9,9,10,11,9,9,9,6,7,8,7,6,7,7,6,6,7,6,5,6,6,8,7,8,8,8,9,11,10,10,10,10,12,13,12,13,14,13,14,14,15,14,16,15,13,14,12,13,13,12,11,9,11,13,12,11,14,14,11,11,13,12,11,12,13,11,10,12,13,10,11,13,12,11,12,13,10,10,11,12,12,14,13,15,15,14,15,14,14,13,14,16,14,14,16,16,18,17,16,16,17,16,16,17,16,15,16,16,15,16,15,14,15,13,12,14,13,10,11,11,9,9,9,10,8,8,10,9,8,8,9,7,7,8,9,8,7,9,10,9,10,11,9,9,10,10,8,11,10,10,10,12,12,10,11,9,11,11,9,9,11,11,10,9,10,10,9,9,10,10,10,9,10,12,12,12,14,14,15,15,13,15,15,15,15,16,16,16,14,17,16,16,17,16,16,16,15,15,15,15,13,12,11,9,10,9,9,8,9,10,9,8,9,9,7,8,9,9,7,8,9,7,7,9,8,7,7,9,8,10,10,8,10,11,10,9,11,10,10,10,9,9,9,8,8,10,9,7,10,7,7,6,6,6,6,7,5,7,8,6,7,9,8,5,7,9,6,8,9,8,10,7,9,8,5,7,8,7,5,7,6,6,4,5,5,2,2,3,3,3,3,5,4,5,5,5,5,5,6,7,8,9,9,12,10,12,10,11,12,9,11,12,10,10,12,11,10,11,13,10,11,12,13,12,11,13,14,12,13,14,15,15,16,16,17,18,18,18,18,19,20,20,23,21,25,25,24,23,25,23,24,27,25,26,28,24,28,27,27,26,27,26,27,28,27,26,26,27,27,24,24,28,27,24,28,25,26,26,27,24,24,26,24],[29,29,29,29,29,30,29,29,29,29,29,28,29,28,29,28,29,29,28,29,29,28,29,29,28,29,29,29,29,29,28,29,29,30,29,29,29,29,29,29,29,28,28,28,28,28,27,26,27,26,25,25,25,24,24,24,23,22,22,21,19,17,15,10,9,7,8,7,7,7,6,6,7,6,7,7,8,9,10,9,9,10,11,9,10,12,12,14,14,13,14,14,13,15,14,14,14,14,15,15,15,16,15,14,16,16,15,15,15,15,15,14,14,14,15,14,14,14,14,14,14,13,13,14,15,14,13,15,14,14,14,14,14,13,14,15,15,15,14,15,14,14,15,14,13,13,14,13,14,14,14,13,13,14,14,14,14,13,15,13,13,12,11,13,12,11,12,14,12,12,12,12,12,12,13,13,12,13,12,13,13,12,12,12,13,12,13,13,13,12,13,13,13,13,13,15,15,15,14,15,15,15,15,15,15,15,15,14,13,15,14,14,13,14,14,13,13,13,12,11,12,13,10,10,11,10,9,8,10,10,8,8,9,9,10,11,12,11,11,12,11,10,10,12,10,10,11,11,8,10,11,9,10,11,11,12,12,12,11,10,10,10,9,10,11,10,9,12,12,10,11,12,12,12,12,13,13,13,12,12,12,12,10,10,10,9,9,9,9,9,7,8,8,8,7,8,8,7,7,7,6,7,6,7,5,6,7,5,5,6,6,5,7,7,6,7,5,5,5,4,4,4,4,5,5,6,3,4,6,4,3,5,5,6,7,8,10,11,14,17,18,15,15,18,17,16,18,18,18,17,18,21,20,21,23,23,24,22,25,22,20,22,21,19,21,22,22,21,22,23,26,25,26,25,25,26,27,26,27,27,26,26,26,26,26,27,27,27,25,26,26,26,25,25,26,23,25,25,24,25,24,24,25,23,23,24,21,22,21,19,19,18,17,15,14,13,10,9,6,3,2,1,0,1,2,3,4,5,5,6,6,6,6,7,7,7,8,8,8,9,9,10,9,9,11,11,11,9,10,9,8,8,8,8,9,9,10,11,10,10,9,9,8,8,7,6,6,6,6,6,5,5,4,4,4,6,6,6,7,7,7,8,8,8,8,9,10,9,9,10,10,11,11,12,12,12,12,11,10,10,10,9,10,8,9,8,9,10,9,10,11,11,9,10,10,10,9,9,10,10,9,10,9,9,10,9,10,9,10,11,11,9,10,10,10,11,13,13,13,13,12,12,12,12,13,13,12,13,14,14,14,13,14,14,14,14,16,16,14,13,14,14,13,13,13,12,11,11,11,11,9,9,10,9,8,8,9,8,8,7,8,8,7,7,8,6,5,7,8,6,6,7,8,7,9,9,8,8,9,9,9,9,9,8,9,9,9,8,9,8,9,9,8,8,8,8,8,9,9,8,8,8,9,8,7,8,9,10,10,10,13,11,13,13,11,12,13,14,14,13,13,13,13,14,14,13,15,13,14,13,14,13,12,12,12,11,9,8,8,8,8,8,7,8,7,7,7,8,7,7,6,7,6,7,8,6,6,7,7,5,6,7,7,9,8,8,10,10,8,9,8,9,8,8,7,8,8,6,6,7,6,7,7,7,6,6,4,5,5,5,4,6,5,5,4,6,6,5,6,7,6,6,8,7,8,6,7,7,5,5,6,7,6,5,5,4,4,5,4,3,2,2,4,3,3,4,4,5,4,5,5,4,6,7,7,8,8,9,8,9,9,10,10,9,9,10,9,9,10,10,9,10,10,10,10,10,11,11,10,10,11,10,10,12,13,12,15,14,15,15,16,16,16,17,18,20,20,20,23,23,23,22,23,22,21,24,23,25,26,24,26,26,26,26,25,25,27,26,26,26,26,26,25,23,25,27,26,24,26,24,25,25,26,23,22,24,23],[29,29,29,29,29,30,30,29,29,29,29,29,29,28,29,28,29,29,28,29,29,28,29,29,29,29,29,29,29,29,28,29,29,30,29,29,29,29,30,29,29,29,29,29,29,29,28,27,28,27,26,26,26,25,25,25,23,23,22,21,19,16,13,11,9,8,6,5,5,5,4,5,5,6,7,7,7,7,8,7,7,8,9,8,9,10,11,11,12,11,12,13,11,12,13,13,12,13,14,13,13,14,13,13,15,15,14,14,13,14,14,13,13,13,13,12,12,13,12,12,13,12,12,14,13,13,12,14,13,12,14,13,12,14,13,14,13,15,14,14,13,13,14,14,12,12,13,12,12,11,12,11,11,11,12,11,12,11,11,11,11,10,10,11,11,9,10,11,11,10,10,11,11,10,11,11,11,11,11,11,12,11,12,12,12,12,12,12,12,12,13,11,13,13,13,14,14,14,14,15,15,13,14,14,14,14,13,13,13,12,13,13,12,13,13,11,11,12,11,11,10,12,10,9,10,9,10,8,9,9,7,7,8,8,9,9,10,10,10,10,9,9,9,10,9,9,10,9,8,9,9,9,9,9,11,11,11,12,11,10,11,9,10,10,10,10,11,10,10,12,11,10,10,11,12,12,12,12,12,11,11,11,10,9,8,9,10,8,8,10,8,7,8,8,7,8,9,7,7,7,5,5,5,5,5,5,6,6,5,6,6,5,5,6,6,5,5,4,5,3,3,2,3,2,3,4,1,2,4,4,4,4,4,5,7,8,9,12,14,17,17,17,16,17,17,16,18,17,18,19,20,21,21,21,23,23,24,22,24,23,21,23,20,20,22,23,22,22,23,24,26,26,27,26,27,28,28,27,28,28,28,28,28,28,27,28,28,28,27,27,26,27,27,26,27,24,27,26,25,26,24,24,26,24,24,24,22,22,22,19,20,18,17,15,13,11,9,8,7,4,2,1,2,0,1,2,2,3,4,4,5,4,4,5,5,4,5,5,6,6,7,7,6,7,8,8,8,7,7,7,7,6,5,5,6,6,6,7,6,7,5,6,5,5,5,4,4,4,4,4,3,3,3,3,3,4,5,5,6,5,6,7,6,6,7,7,7,7,7,8,8,9,11,11,11,11,10,10,9,9,9,8,9,7,9,7,8,8,9,8,9,9,10,10,10,9,10,9,9,9,9,9,9,10,10,8,9,10,10,10,10,10,9,10,10,10,12,12,12,12,12,11,11,11,11,13,10,11,12,12,12,12,13,12,13,14,12,12,12,12,12,12,11,11,11,10,11,9,9,9,8,7,9,9,8,7,8,9,7,7,8,7,6,6,7,6,6,6,7,7,7,7,7,7,7,7,7,6,7,7,7,7,8,7,7,8,9,7,8,7,8,8,7,7,7,7,7,7,7,7,6,6,7,7,7,7,8,8,9,9,10,9,10,11,10,10,11,10,12,11,11,11,11,12,12,11,13,12,12,12,12,11,12,11,10,9,8,7,7,7,7,6,7,7,6,6,7,6,5,6,5,6,6,6,6,6,6,6,6,4,5,6,5,7,6,6,7,7,7,6,7,7,7,7,6,7,7,6,5,6,6,5,5,6,5,5,3,4,5,4,3,5,5,4,3,5,5,4,6,5,6,5,5,6,6,6,6,6,6,5,6,6,7,5,5,4,4,3,3,3,3,3,2,2,3,4,3,4,4,4,4,5,5,7,6,6,7,7,7,7,8,8,8,7,8,7,7,7,8,7,8,8,8,8,9,8,8,8,9,9,8,8,9,10,12,13,13,13,14,14,14,14,15,17,17,17,20,19,24,22,23,20,22,23,21,25,22,24,27,24,26,26,26,26,26,26,28,27,26,26,27,26,25,23,25,27,27,24,26,26,25,27,26,24,23,25,23],[28,28,28,28,28,28,28,28,28,27,26,26,27,26,26,26,26,27,25,26,26,26,26,26,26,26,27,26,26,26,26,27,27,28,26,27,27,27,27,27,27,26,26,27,27,26,25,25,24,24,24,24,23,22,21,22,21,21,20,18,16,15,12,10,8,7,7,6,6,6,5,5,5,5,6,7,6,8,8,8,7,8,10,8,9,10,10,10,10,11,11,11,11,12,12,12,11,11,13,12,13,13,13,12,13,14,14,14,13,14,14,12,11,12,12,12,11,11,12,12,12,11,11,12,12,12,11,13,12,11,13,12,11,12,12,13,13,13,13,13,14,12,13,12,12,12,12,11,10,12,12,10,11,10,10,11,11,11,10,10,10,10,9,10,10,10,10,10,10,10,10,10,10,10,11,10,10,10,10,10,10,10,11,11,10,10,11,11,11,10,11,10,11,12,11,12,13,12,12,13,13,12,12,12,12,12,11,11,11,12,11,11,11,11,12,11,11,11,11,10,9,10,10,9,9,9,8,8,9,8,8,7,8,8,8,9,10,9,10,9,9,9,9,10,10,8,8,9,9,8,8,9,8,9,9,10,11,10,10,9,9,9,8,9,9,9,8,9,9,9,10,9,10,10,10,9,10,10,10,10,10,9,9,9,8,9,8,8,7,8,8,8,7,7,7,8,8,7,6,6,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,3,4,4,4,3,3,4,4,3,3,3,4,3,3,4,6,6,8,11,12,12,14,15,15,16,16,15,15,14,16,16,16,17,18,20,19,20,22,21,22,20,23,21,19,21,20,18,20,21,20,19,21,22,24,24,25,24,25,26,26,26,26,26,26,26,26,26,26,26,26,26,25,26,24,25,25,24,25,23,25,24,23,24,22,22,24,23,22,23,22,21,21,20,20,19,17,15,14,12,11,9,6,5,3,2,1,1,0,1,1,2,2,3,3,3,3,4,4,3,5,5,4,5,6,6,6,6,7,7,7,6,6,5,5,5,4,4,6,5,6,7,5,6,5,4,4,5,5,4,3,4,3,3,3,3,2,2,3,3,4,4,4,4,5,5,5,5,5,7,6,7,7,7,7,8,9,9,9,10,9,8,8,8,8,8,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,8,8,8,8,8,8,7,8,8,8,7,8,8,8,9,10,10,10,10,9,9,9,10,10,10,10,10,11,12,12,11,12,12,12,11,11,12,10,10,10,11,11,10,9,10,9,9,9,9,8,8,8,9,8,7,7,8,7,7,7,7,6,6,7,6,6,6,7,6,6,6,6,6,7,7,7,6,7,8,7,7,7,8,7,8,8,7,8,6,8,7,7,7,7,8,7,7,7,7,7,6,7,8,7,7,8,8,8,9,9,9,10,10,10,11,11,11,11,11,11,11,11,11,11,12,13,11,11,11,10,12,11,10,10,9,8,7,7,7,7,6,7,7,6,6,7,6,6,6,6,6,6,6,6,5,5,6,5,4,4,5,4,5,6,5,6,7,6,6,7,7,6,6,6,6,7,6,6,6,6,5,6,6,5,5,3,3,5,4,4,4,5,4,4,5,6,4,4,5,5,4,6,6,6,6,6,6,5,6,5,6,6,5,5,5,4,4,4,3,3,2,3,2,2,2,2,3,3,3,3,4,4,5,5,6,6,7,6,7,7,8,7,6,7,6,6,6,7,6,6,7,7,7,8,8,7,8,8,8,8,9,9,9,10,10,12,11,12,12,12,13,12,14,14,16,17,18,21,20,19,18,20,20,18,21,19,21,22,21,23,23,24,23,22,23,25,25,23,24,23,23,23,21,23,24,23,20,23,21,20,23,22,20,20,22,20],[29,29,28,29,29,29,29,28,28,27,27,26,28,27,27,27,27,27,27,28,27,26,28,28,27,27,28,27,28,29,27,28,29,29,27,29,28,28,29,29,29,28,27,28,28,27,27,26,26,25,25,24,24,23,23,22,21,22,20,18,16,14,11,9,8,7,6,6,6,6,5,5,5,6,7,6,6,7,8,8,8,9,9,8,9,9,10,10,10,11,11,11,11,11,12,12,11,12,13,13,13,14,14,13,14,15,15,15,14,15,15,14,12,12,12,12,12,12,12,11,13,11,11,12,13,11,11,13,12,11,12,12,11,12,13,13,13,12,13,13,12,12,13,12,11,12,12,11,10,11,11,10,11,10,11,11,11,11,11,10,10,10,9,10,10,10,9,10,10,10,10,10,10,10,10,10,9,9,10,9,10,9,9,10,10,9,10,10,9,9,10,10,10,10,11,12,13,12,11,12,13,12,12,12,13,12,12,11,10,11,11,11,10,11,11,9,10,10,9,9,9,10,9,8,9,9,8,8,8,8,7,7,7,8,8,9,9,9,9,9,9,8,8,10,9,8,8,9,7,8,8,8,7,8,8,9,9,9,8,8,8,8,7,7,8,8,7,8,9,8,8,9,9,8,8,8,9,10,9,9,9,9,8,8,8,8,7,8,7,7,6,7,7,6,6,7,7,6,6,6,5,5,5,5,5,4,5,4,4,5,4,4,4,5,4,4,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,5,5,7,7,10,11,12,15,17,16,17,15,16,16,16,18,17,17,17,18,19,20,21,23,21,23,21,24,22,20,24,21,19,21,22,22,20,23,24,24,25,25,25,26,27,27,27,27,27,27,27,27,27,27,28,27,27,26,26,26,26,26,25,27,23,26,25,25,26,25,24,26,23,24,25,24,23,24,22,22,21,18,17,15,12,10,10,7,5,3,2,2,1,1,0,1,1,2,2,3,2,2,3,3,3,4,4,5,4,4,5,5,5,6,6,6,5,5,5,5,4,4,4,5,4,6,6,4,5,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,3,3,4,3,4,4,4,4,5,5,5,5,5,6,6,7,7,8,8,8,8,8,6,7,6,7,7,6,7,6,6,7,7,6,7,7,7,6,7,7,6,6,7,7,6,6,7,6,6,7,7,6,7,8,8,7,7,7,8,9,9,9,9,9,8,8,8,9,9,10,9,9,10,11,12,11,12,11,12,11,11,11,11,10,10,10,10,9,9,9,9,8,9,8,8,7,8,7,7,6,6,6,5,6,6,5,5,6,6,5,5,5,5,4,4,5,5,4,5,6,5,5,6,6,5,5,5,5,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,6,7,7,8,8,9,9,10,10,10,10,10,10,11,12,11,11,11,10,12,10,11,12,11,11,11,11,10,10,10,9,9,8,7,7,6,7,6,6,7,6,6,6,5,5,5,6,4,5,5,4,5,4,5,4,4,4,4,4,5,4,4,5,5,5,6,6,6,6,5,6,6,6,5,6,5,6,5,5,5,5,5,4,5,4,4,3,4,5,4,4,5,4,4,4,5,4,4,5,5,6,5,5,5,4,5,5,5,5,5,6,4,4,5,3,3,3,3,3,1,2,2,2,3,4,4,3,4,4,5,5,5,6,6,6,6,6,7,6,6,6,5,5,5,5,5,5,5,5,5,6,6,6,5,7,7,6,6,7,7,9,10,10,10,11,13,11,11,13,14,14,16,16,18,20,20,20,17,19,20,19,23,19,22,22,21,25,24,22,23,24,23,24,25,23,22,22,24,23,19,21,24,24,20,23,22,22,22,22,20,21,22,19],[29,29,29,29,29,29,29,29,29,28,28,27,28,27,28,27,27,28,26,28,28,27,28,28,27,28,28,28,28,28,27,28,29,29,27,29,28,28,29,28,28,28,28,28,28,27,26,25,27,25,25,25,25,24,22,23,21,21,21,20,17,15,12,10,9,7,7,7,7,6,6,6,6,6,8,8,7,8,8,8,9,8,8,8,8,10,10,11,10,10,10,11,10,11,11,10,10,11,12,11,11,12,12,12,13,13,12,13,12,13,13,12,11,11,12,12,11,12,12,11,11,11,11,12,11,11,11,12,10,11,12,11,10,12,11,13,11,12,11,11,12,10,11,11,10,10,11,10,10,10,10,10,10,10,11,10,11,11,11,11,11,10,10,9,9,10,10,9,10,10,10,9,10,9,10,9,10,9,9,10,10,10,10,10,9,10,10,9,10,10,9,9,10,10,10,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,10,10,10,10,9,10,9,9,9,8,9,9,9,8,8,9,8,8,8,8,8,8,8,9,9,8,9,9,9,8,9,9,9,9,8,8,8,9,8,7,8,8,8,8,9,9,9,8,8,9,8,9,8,8,8,8,7,8,8,8,8,8,8,9,8,8,9,9,9,9,8,7,8,7,8,8,8,7,8,7,7,8,7,7,8,9,6,6,6,6,5,5,5,4,5,5,5,4,5,4,4,5,6,4,4,3,3,3,3,3,3,4,3,4,4,3,4,5,5,4,5,6,7,8,12,13,13,15,16,16,16,17,17,16,16,17,17,18,17,20,21,21,20,23,22,23,21,24,21,19,21,20,20,20,22,23,21,22,24,24,26,27,25,26,27,26,26,27,27,27,27,27,27,26,27,26,26,25,26,26,26,26,25,26,24,25,25,25,26,24,24,25,24,21,23,25,21,22,22,21,21,20,17,16,14,11,9,8,6,4,2,3,2,1,1,0,1,1,2,2,2,2,2,2,2,3,4,3,4,4,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,5,5,5,5,5,4,4,4,3,3,2,3,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,5,5,5,5,5,5,6,7,7,7,8,8,7,7,6,7,7,7,7,6,8,6,6,8,7,7,7,7,7,7,7,7,7,7,7,8,7,7,7,8,8,7,7,8,7,8,8,8,7,8,8,8,10,10,9,9,9,9,8,9,9,10,8,10,10,11,11,11,10,11,12,11,10,11,10,10,9,10,9,9,9,8,9,8,8,7,7,8,8,7,8,8,8,7,6,7,6,6,5,5,5,5,5,5,5,5,4,5,5,4,5,6,5,6,6,6,6,6,6,6,7,6,7,5,7,6,6,7,7,6,6,7,7,6,6,6,7,7,7,8,8,7,8,8,8,9,9,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,12,12,11,11,11,10,10,10,10,9,8,8,7,8,7,7,7,7,7,6,7,6,6,5,5,6,6,5,5,5,5,5,4,5,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,7,5,6,6,6,5,6,6,6,5,5,4,4,5,3,4,5,4,5,4,4,4,3,4,4,4,5,5,5,6,5,5,5,5,5,5,5,4,5,4,4,4,3,3,3,3,3,1,2,1,2,2,3,3,3,4,4,4,5,5,7,6,6,6,6,7,6,5,6,5,5,5,6,5,5,6,5,5,5,5,6,5,6,6,6,7,7,7,8,9,10,10,11,11,11,12,11,13,14,15,17,17,20,19,19,17,18,18,18,22,19,21,22,22,26,25,24,24,24,23,26,25,24,23,23,24,22,20,21,24,24,20,23,22,22,24,23,20,20,23,20],[29,29,28,28,28,29,28,28,28,27,27,26,27,26,26,26,27,26,26,27,26,26,27,27,26,26,27,26,27,27,26,27,28,28,27,28,27,27,28,27,28,27,27,27,27,27,26,25,26,25,25,24,24,23,22,22,20,21,20,19,16,15,12,9,8,7,6,6,6,6,5,5,5,5,7,6,6,7,7,7,8,8,8,8,8,9,9,9,9,10,10,10,10,11,11,10,10,11,12,11,12,12,12,12,13,13,13,13,13,14,14,13,12,13,12,13,11,12,10,11,12,10,10,11,12,11,10,12,11,11,11,11,10,10,11,12,11,11,11,11,10,10,11,11,10,11,11,10,9,11,10,9,10,9,10,10,11,11,10,11,9,9,9,9,9,9,8,10,10,9,8,9,9,9,9,9,9,8,9,8,8,9,8,9,8,8,8,9,9,8,9,9,9,8,9,10,11,10,10,11,11,11,11,10,10,10,10,10,10,10,10,10,9,10,10,9,9,9,8,8,8,8,8,8,8,8,8,8,7,7,7,7,8,7,8,8,8,8,8,9,9,8,7,8,8,7,7,7,7,7,7,7,7,7,7,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,9,8,8,8,7,7,7,7,7,7,7,7,7,6,6,7,6,6,6,6,6,6,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,6,6,7,10,10,10,14,16,15,15,16,16,16,16,18,17,17,18,19,21,21,22,23,22,23,21,24,21,20,22,21,19,20,22,21,20,22,24,24,25,26,25,26,27,27,27,26,27,27,27,27,27,26,27,27,27,26,26,26,26,26,26,26,25,25,26,25,25,24,25,26,23,22,23,24,21,22,22,21,21,20,19,16,14,13,11,8,6,4,3,3,2,2,1,1,0,1,1,1,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,2,1,2,2,1,1,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,5,6,7,7,7,6,6,6,5,6,6,5,6,6,6,6,6,6,6,7,7,7,6,6,6,5,6,6,6,6,7,6,6,6,7,6,7,7,7,7,7,7,8,8,9,9,9,9,8,8,8,8,8,9,8,9,9,10,11,11,10,11,11,10,11,10,10,10,10,10,9,9,9,9,8,8,8,7,7,7,7,7,6,6,7,6,6,5,6,5,4,5,5,5,4,4,5,5,4,4,4,4,4,5,5,4,5,5,5,5,5,6,5,5,6,6,6,5,5,6,5,5,6,6,5,6,6,6,6,6,7,7,6,7,7,7,8,8,9,9,10,9,9,9,9,9,10,10,10,10,11,11,11,11,12,11,11,11,11,10,10,9,9,9,8,7,7,7,7,6,7,6,5,6,6,5,5,5,6,4,4,5,4,4,4,4,5,3,3,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,6,5,5,5,5,5,5,6,5,5,4,4,5,4,3,4,4,4,3,4,4,3,3,4,4,4,4,4,5,5,5,5,4,5,5,5,5,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,4,4,5,4,6,6,5,6,6,7,6,5,5,5,5,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,7,6,7,8,9,8,9,11,10,10,11,12,12,14,14,15,18,19,19,16,18,18,17,21,18,22,20,20,24,22,21,23,23,21,23,23,22,22,21,22,21,18,21,22,22,18,22,20,19,21,21,18,18,20,17],[29,29,29,29,29,29,29,29,28,28,28,28,28,28,28,27,28,28,28,28,29,28,28,29,28,28,29,29,28,29,28,29,29,29,28,29,29,28,29,29,29,28,28,28,28,28,27,26,27,26,25,26,26,25,24,24,22,21,20,21,18,15,13,11,9,8,7,8,7,7,6,6,7,6,8,8,7,8,10,9,8,9,10,9,9,11,10,11,11,11,12,12,11,12,12,12,11,12,13,13,13,13,14,12,14,14,14,13,13,14,14,14,12,13,12,13,13,13,12,12,13,11,11,12,13,11,11,12,11,11,12,11,10,12,11,13,12,12,12,12,11,11,12,12,10,11,12,11,10,11,11,10,10,10,11,11,12,12,12,11,10,10,11,11,11,9,10,10,10,9,10,10,10,10,10,10,9,9,10,10,10,9,9,10,10,9,10,10,9,10,10,9,10,10,10,11,11,11,11,11,11,11,11,12,11,12,12,11,10,11,11,11,10,11,11,10,10,10,10,9,9,10,9,8,9,9,8,8,9,8,7,7,8,8,9,9,9,9,9,9,9,9,8,9,8,8,8,8,8,8,8,8,8,8,8,9,9,9,8,8,8,8,8,8,8,8,8,8,8,9,8,8,8,8,8,9,9,10,9,10,9,9,9,8,8,8,8,8,7,8,7,7,7,7,7,7,8,6,6,6,5,5,6,5,5,5,5,4,5,5,4,4,5,5,4,4,3,3,4,3,3,4,4,4,5,5,4,4,5,5,5,6,7,7,8,10,11,11,13,15,16,15,15,16,18,17,19,20,19,20,21,24,22,23,24,24,24,23,24,21,21,23,21,20,20,21,23,22,23,24,24,25,26,26,26,27,27,27,27,27,27,27,28,27,27,28,27,27,26,27,26,26,27,26,26,25,25,26,24,26,25,24,24,24,23,24,24,23,22,23,20,21,20,19,17,15,15,12,9,6,4,3,4,2,2,2,1,1,0,1,2,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,3,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,4,4,4,4,5,5,5,6,6,7,8,7,7,7,6,7,6,6,6,6,7,6,6,7,7,7,7,7,8,7,7,7,7,7,7,8,7,8,7,8,8,7,7,8,8,8,8,8,8,8,8,9,10,10,10,10,9,9,9,9,9,10,10,10,11,11,12,12,12,11,13,12,12,12,12,11,11,11,10,10,10,9,10,8,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,5,4,5,5,4,5,5,5,4,4,5,4,4,5,6,5,5,6,7,7,6,7,7,7,7,6,7,7,6,6,7,7,7,7,7,7,7,8,7,7,8,8,9,9,9,11,10,11,11,10,11,10,11,12,11,11,12,12,12,12,12,12,13,12,13,11,11,11,11,10,10,9,9,8,8,8,7,8,7,7,7,7,6,6,6,6,6,5,6,5,5,4,4,4,4,4,4,4,5,4,5,6,6,7,6,6,6,6,7,6,6,7,6,5,6,6,5,6,7,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,4,4,4,4,4,4,4,3,2,2,2,2,3,3,3,3,4,4,5,5,6,6,6,6,6,6,7,6,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,6,6,6,6,6,6,8,8,9,9,9,11,10,10,11,12,13,14,17,17,19,19,18,17,19,19,17,22,19,21,22,21,25,23,24,24,23,24,25,24,23,22,23,24,22,20,20,24,23,19,23,21,21,23,22,18,19,22,18],[28,28,28,28,28,28,28,28,28,27,27,26,27,26,27,26,27,26,27,27,27,27,27,28,27,27,28,28,27,27,27,27,28,28,27,28,27,28,28,28,28,28,27,27,27,27,26,25,26,25,25,24,24,23,23,23,22,22,20,20,18,16,14,11,10,9,7,8,7,7,6,6,6,6,7,7,7,8,9,8,7,8,9,8,8,9,9,10,10,10,11,11,11,11,11,11,11,11,12,12,12,13,12,12,13,13,13,13,13,13,14,13,12,12,12,12,11,11,10,11,11,10,10,11,11,11,10,12,11,10,11,11,10,11,11,12,12,11,12,11,12,10,12,11,11,11,12,10,10,11,11,9,10,9,10,10,11,11,10,11,10,9,9,9,9,9,9,10,9,8,9,9,9,9,10,10,9,9,9,9,9,9,9,10,9,8,9,10,9,8,10,9,9,9,10,11,11,11,10,11,11,11,11,11,11,11,11,10,10,10,11,10,9,11,10,9,10,10,9,8,8,9,9,8,8,9,7,7,8,8,7,7,8,8,9,9,8,9,8,9,9,8,8,8,8,7,7,8,7,7,7,7,7,7,8,8,9,8,8,7,7,7,7,7,8,7,6,7,8,7,7,8,8,7,8,8,8,9,9,9,8,8,8,8,8,8,7,7,7,7,6,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,5,4,4,4,4,3,4,5,4,3,3,3,3,3,4,4,4,4,4,5,4,5,5,5,5,6,7,7,9,10,11,12,14,15,17,15,15,17,17,17,19,19,18,18,20,21,21,21,23,22,24,21,23,20,19,20,19,18,19,20,20,20,21,22,24,23,25,23,26,25,25,26,25,26,26,26,26,26,26,26,25,26,24,25,24,24,26,24,25,24,23,24,23,25,24,23,25,24,23,24,24,23,22,23,20,20,19,18,17,16,13,13,9,7,5,4,4,3,3,2,1,1,1,0,1,1,1,1,1,2,2,2,2,3,2,3,3,3,3,3,4,3,3,4,4,3,2,3,3,3,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,3,5,4,5,6,6,8,7,7,7,7,6,6,5,6,6,6,6,6,5,6,6,6,7,6,6,7,7,7,7,6,6,6,6,7,7,7,6,7,7,7,7,8,7,7,7,7,8,8,10,9,9,9,8,8,8,8,9,9,9,9,10,11,11,12,12,11,12,12,11,12,11,11,11,11,10,9,10,9,9,8,8,8,8,7,8,8,6,7,7,7,6,6,6,5,5,5,5,5,4,5,5,4,4,4,5,4,4,5,5,5,5,6,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,7,6,7,7,7,7,8,8,8,8,9,10,9,11,10,9,10,9,10,11,11,11,11,12,12,12,13,13,13,12,12,12,11,11,10,10,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,6,5,4,5,5,4,4,4,4,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,5,6,6,5,6,6,6,5,6,6,6,6,5,5,6,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,6,6,6,5,5,6,5,5,5,5,5,5,5,4,4,4,4,3,3,3,2,2,3,3,3,3,4,4,5,5,5,6,6,5,6,6,6,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,5,6,7,7,8,9,9,9,10,10,10,11,12,13,14,16,17,19,20,18,17,20,20,18,22,19,20,22,19,23,23,22,23,24,23,23,24,23,21,23,23,22,20,21,23,23,20,22,19,21,21,22,19,18,21,20],[28,28,28,28,29,28,29,28,28,28,27,27,27,26,26,27,27,27,27,27,28,26,28,28,27,28,28,27,28,28,27,28,29,29,28,29,27,28,28,28,28,27,27,28,28,27,27,25,26,25,24,25,24,23,21,22,21,20,19,20,17,14,13,11,10,9,8,9,8,8,7,7,7,6,8,8,8,9,9,9,9,9,9,9,10,11,10,11,11,12,11,12,12,12,12,12,12,12,13,13,13,14,14,13,14,15,14,14,14,15,15,15,13,14,13,14,13,13,12,12,12,12,11,12,13,12,11,13,12,10,12,12,11,11,11,12,12,11,11,12,11,11,12,12,10,12,12,11,11,13,12,10,11,10,11,12,12,12,12,12,12,11,11,11,11,10,10,11,10,9,10,10,9,10,11,10,9,9,10,9,10,9,8,10,10,9,9,10,10,9,10,10,9,10,10,11,11,11,11,11,11,11,11,12,11,12,11,11,11,11,11,11,10,12,11,10,10,10,10,9,9,10,9,9,9,9,8,9,9,8,7,8,8,9,9,9,9,9,9,9,9,8,8,9,8,7,8,8,7,7,8,8,7,7,7,8,9,9,7,7,7,8,8,7,8,8,8,7,9,8,8,8,9,8,8,9,9,9,9,10,9,10,9,9,9,8,8,8,8,8,7,7,7,7,7,7,7,6,6,6,5,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,4,3,4,4,5,5,5,5,5,6,6,6,6,7,7,8,9,11,11,12,13,15,16,14,15,16,17,16,16,18,18,18,19,21,21,22,22,22,23,21,22,21,19,20,20,19,19,21,22,21,21,23,23,25,26,25,26,26,25,26,27,26,26,26,26,26,26,27,26,26,25,26,25,25,26,24,26,24,25,25,24,25,24,23,25,23,23,24,24,22,22,22,20,21,19,17,16,14,13,12,10,7,6,5,5,4,3,3,2,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,3,3,4,3,4,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,4,4,5,5,5,6,6,7,7,7,7,7,6,6,5,6,6,5,6,6,5,6,7,6,6,6,7,6,7,7,7,7,7,7,7,7,7,8,7,7,8,8,8,8,8,7,8,8,8,9,10,10,10,10,9,9,9,9,10,10,10,11,11,12,12,12,12,12,13,13,12,12,12,11,11,11,11,10,10,10,10,9,9,9,8,9,9,8,8,8,7,7,7,7,7,6,6,6,6,5,5,5,5,4,5,5,5,4,4,5,5,4,5,6,6,5,6,6,6,5,7,6,7,6,6,7,7,6,7,8,8,7,7,7,8,8,8,8,7,9,8,9,9,9,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13,14,13,14,12,13,12,12,12,11,11,10,10,9,9,9,8,8,8,7,8,7,7,8,7,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,5,6,6,6,6,6,6,7,6,6,6,7,6,6,7,7,7,7,7,7,6,6,6,6,6,5,5,6,5,5,5,5,5,4,5,5,5,4,5,5,5,6,5,5,5,6,6,6,6,6,5,5,6,5,5,5,5,4,3,3,3,2,3,3,3,4,5,4,5,5,5,6,6,5,6,5,7,6,5,6,4,4,4,6,4,5,5,6,4,5,5,5,6,5,6,6,6,6,6,7,8,9,8,9,10,10,10,10,12,12,14,16,16,20,20,17,17,20,19,17,21,19,20,21,21,25,24,22,22,24,23,25,24,24,22,23,23,22,20,20,23,22,18,22,20,20,22,22,18,18,21,19],[29,29,29,29,29,29,29,29,28,28,28,27,28,27,27,27,28,28,28,28,28,27,28,28,27,28,28,27,28,28,27,28,29,29,28,28,28,28,29,28,29,28,28,28,28,28,27,25,26,26,25,24,24,23,23,22,21,21,20,18,16,15,12,10,9,8,8,8,7,8,7,6,7,6,7,7,8,8,9,9,8,8,9,8,8,10,9,10,11,10,11,12,11,11,12,11,11,11,13,12,12,13,13,13,13,14,14,14,14,14,14,14,13,13,12,13,12,13,12,12,13,12,11,12,12,11,10,13,12,11,12,12,11,11,11,12,12,12,12,12,12,11,12,12,11,11,11,11,10,11,11,10,11,10,10,11,12,12,11,11,10,10,10,10,10,8,9,10,10,9,10,10,9,9,10,10,8,9,10,9,10,8,8,9,9,8,9,10,8,8,9,10,8,9,9,10,11,11,10,10,10,11,10,11,11,11,11,10,10,10,11,10,9,10,10,9,10,10,10,8,9,10,9,8,8,9,7,7,8,8,7,7,8,8,9,9,9,9,8,8,9,8,8,8,8,7,7,8,7,7,7,7,6,6,7,8,8,8,7,6,6,7,7,6,7,7,6,7,8,7,7,8,8,7,7,8,9,8,8,9,8,9,8,8,8,7,7,7,7,7,6,7,6,6,6,6,6,5,6,6,5,5,5,4,4,5,4,3,4,4,4,3,4,4,3,4,3,4,4,3,4,4,4,4,5,5,5,5,6,6,5,6,7,7,8,10,11,10,13,14,14,15,14,17,16,16,18,18,17,18,20,21,21,21,22,22,24,22,25,21,21,22,20,19,19,20,21,19,21,22,23,23,27,25,26,25,26,26,27,27,26,26,27,26,26,27,27,26,26,26,26,26,26,25,26,25,26,26,25,26,25,25,26,25,24,26,25,23,23,23,22,21,20,18,17,15,14,12,9,7,5,4,4,3,3,2,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,3,2,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,6,6,6,7,7,7,6,5,6,5,6,5,5,6,5,5,6,6,5,6,6,6,5,6,6,6,5,6,6,6,6,6,6,6,6,7,7,6,7,7,6,7,7,8,9,9,10,9,9,8,8,9,8,9,9,9,10,10,11,10,11,11,11,11,11,12,11,11,10,10,11,10,10,9,9,9,8,8,8,8,7,8,7,7,7,6,6,6,6,6,5,5,6,5,4,4,5,5,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,6,5,5,6,6,5,6,7,7,7,7,7,7,7,8,7,8,8,8,9,9,9,10,9,11,11,10,10,10,10,12,11,11,12,11,11,11,11,11,11,11,11,10,11,11,10,10,10,9,9,8,9,8,7,8,7,7,7,7,7,6,6,6,5,5,5,5,4,4,4,4,3,3,3,4,4,5,5,4,5,5,5,5,5,5,6,5,6,6,6,5,6,7,5,6,6,7,6,5,5,6,5,4,5,5,5,4,5,5,4,4,5,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,2,3,3,3,3,4,4,4,5,5,5,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,7,8,8,8,9,10,10,10,11,12,13,15,16,17,20,19,19,17,20,19,19,22,19,22,22,21,24,23,22,24,23,23,24,25,24,23,23,24,22,20,22,24,24,20,22,21,20,22,22,18,20,22,19],[29,29,29,29,29,29,29,29,28,28,28,27,28,27,27,27,27,27,27,27,27,27,27,28,27,27,28,27,27,28,26,28,28,29,27,28,28,28,28,28,29,28,27,28,28,28,27,25,26,25,25,24,24,23,23,23,21,21,20,19,17,16,13,10,10,8,8,8,7,7,6,5,6,5,7,7,7,8,8,8,8,8,8,8,8,9,9,10,10,11,11,11,11,12,11,11,11,12,12,12,12,12,12,12,13,14,13,14,14,14,14,14,13,14,13,12,12,11,10,11,13,11,10,11,12,11,10,12,12,11,11,12,11,11,11,12,11,12,11,12,12,10,12,11,11,11,12,11,10,11,11,9,11,10,11,11,12,12,12,11,10,10,10,10,10,8,9,11,9,8,9,10,9,8,10,10,8,9,10,9,10,8,8,9,9,8,8,9,9,8,9,9,8,9,9,10,11,11,10,10,11,10,10,11,11,10,10,10,10,11,11,10,9,10,10,9,10,10,9,8,9,10,8,8,8,8,7,7,7,8,7,7,7,8,9,9,8,9,8,9,9,9,8,8,8,8,7,7,7,7,7,7,6,7,7,8,8,8,7,7,7,7,6,6,7,7,6,7,7,7,7,7,7,7,7,7,8,9,8,9,8,8,8,7,7,7,6,7,7,6,5,6,6,6,6,6,6,5,5,5,4,5,5,4,4,5,4,3,4,4,4,3,4,4,4,3,3,3,3,3,4,4,4,4,5,5,4,4,5,5,5,6,7,6,7,9,11,11,13,16,16,14,15,17,17,17,19,19,18,19,20,22,23,22,23,23,24,23,24,21,21,22,20,20,20,22,21,21,22,23,24,23,26,25,25,26,26,26,27,26,26,27,27,27,27,27,27,27,26,27,26,27,27,26,27,25,26,27,25,26,26,25,27,25,24,25,25,23,24,24,22,22,21,19,18,16,14,13,9,7,5,4,4,3,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,2,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,5,6,6,7,7,7,7,6,6,6,6,6,5,5,5,5,5,6,6,5,6,6,6,5,6,6,6,5,5,6,5,6,6,6,5,6,7,6,6,7,6,6,7,7,7,8,9,9,9,8,8,8,8,8,9,9,9,9,10,11,12,11,11,11,12,12,10,11,11,10,9,11,10,9,9,9,8,7,8,8,8,7,7,7,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,7,7,7,8,8,8,10,9,11,10,9,10,10,9,11,11,11,12,12,12,11,13,13,12,11,11,11,11,10,10,10,9,9,8,8,7,7,7,6,6,6,6,6,5,5,5,5,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,5,4,5,5,5,5,5,4,5,5,4,5,6,5,5,6,6,6,5,5,5,5,5,4,4,5,4,3,4,4,3,4,4,4,4,4,5,5,5,5,5,4,5,5,5,5,5,4,4,4,4,4,3,4,4,3,2,2,2,2,2,3,3,3,4,4,4,5,5,6,6,5,6,5,6,5,5,5,5,5,4,5,5,4,5,5,5,4,5,5,5,5,6,6,5,6,6,7,8,9,9,10,11,10,11,11,12,13,14,15,17,19,20,18,18,20,19,19,23,20,22,22,21,24,24,23,24,24,23,24,24,24,23,23,23,23,20,22,23,23,20,22,21,20,21,22,20,20,21,19],[29,29,28,29,29,29,29,29,28,28,28,27,28,27,27,27,28,27,27,28,27,27,28,28,27,28,28,28,28,28,27,28,29,29,29,29,28,29,29,29,29,28,28,28,28,28,27,26,27,26,26,25,25,25,22,24,22,22,21,20,18,16,14,11,11,9,8,8,7,8,7,7,7,6,7,8,8,8,9,9,9,9,10,10,10,11,11,12,12,13,13,13,14,13,13,13,13,13,14,14,14,14,14,14,14,14,15,15,15,15,15,15,14,16,14,14,14,12,12,12,13,12,12,12,14,12,11,14,13,11,12,13,12,12,12,13,12,13,13,13,14,13,14,13,13,13,13,12,12,13,13,11,12,12,12,13,13,13,13,12,12,12,11,11,11,10,11,12,11,10,11,11,10,10,11,11,9,10,11,10,11,9,9,10,10,9,10,10,9,9,10,11,9,10,10,11,12,12,10,12,12,11,11,13,12,12,12,11,11,11,13,11,10,12,11,10,11,11,10,9,10,10,10,9,10,10,9,9,9,8,7,8,8,9,9,10,9,9,9,9,9,9,8,9,9,8,8,8,7,8,8,8,8,7,8,8,9,9,8,7,7,8,7,7,8,8,7,8,8,8,8,8,9,8,8,9,9,10,9,10,9,9,9,9,9,8,8,8,7,8,7,7,7,7,7,7,6,7,6,6,6,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,3,3,4,3,4,4,4,4,5,5,5,5,6,5,6,7,8,8,9,11,12,12,14,15,16,15,15,17,17,17,17,19,19,18,20,21,23,22,23,23,24,21,23,21,20,22,20,19,19,20,21,20,21,23,23,22,25,24,25,25,26,26,26,27,26,27,27,27,26,27,27,26,26,26,25,26,26,24,26,23,25,26,24,25,25,25,26,25,23,25,25,23,22,24,22,21,20,18,18,15,13,13,8,6,5,4,4,3,3,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,6,7,7,7,7,7,6,6,6,6,6,6,6,7,6,6,7,7,7,6,7,7,6,6,7,7,6,7,7,7,7,7,7,7,7,7,7,8,8,8,7,8,9,9,10,10,10,10,9,9,9,9,10,10,10,11,11,12,13,12,13,13,13,13,12,13,12,12,12,12,12,10,11,11,10,9,9,9,9,9,9,8,8,8,7,7,6,6,6,6,5,5,6,5,4,5,5,4,4,5,4,4,5,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,7,7,6,7,7,7,7,7,7,7,8,8,8,9,9,10,9,10,11,11,12,12,11,12,12,12,13,13,12,13,13,14,13,14,14,13,13,13,13,13,12,11,12,11,10,9,8,9,8,8,8,8,8,7,7,7,6,6,6,6,5,6,5,4,4,5,5,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,6,6,5,6,5,5,5,6,5,4,5,5,4,4,4,5,5,5,5,5,6,6,6,6,5,6,6,5,5,5,5,5,5,5,4,4,4,4,3,3,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,8,10,9,9,11,10,10,11,12,13,15,15,15,18,18,17,17,18,18,18,21,20,19,22,20,22,22,22,22,23,22,23,22,22,22,22,23,22,18,20,22,23,20,23,20,19,22,22,19,19,22,19],[29,28,27,28,29,28,28,28,28,27,27,27,28,27,27,27,28,26,27,28,27,27,28,28,27,28,29,27,28,28,27,29,28,29,28,29,28,29,29,28,29,28,27,28,28,27,27,26,26,25,24,24,24,23,22,22,21,20,19,18,16,15,13,11,10,9,9,8,8,8,7,7,7,7,7,8,8,8,9,9,9,9,9,9,9,11,10,12,12,12,12,13,13,12,13,14,12,13,15,14,14,15,15,15,15,15,15,15,15,15,16,16,14,15,13,14,14,13,12,12,14,12,12,13,14,13,12,14,13,11,12,13,11,12,12,13,13,13,14,14,13,12,14,14,13,14,13,12,12,13,13,11,13,11,12,12,13,13,12,12,11,11,11,11,11,10,11,12,11,11,11,11,10,10,11,11,10,10,11,10,10,9,9,10,10,8,10,11,9,9,11,10,9,10,10,11,12,11,10,11,11,11,11,12,12,12,12,11,11,11,12,12,9,12,11,10,11,11,11,9,10,11,10,9,9,10,8,9,9,9,7,8,8,9,9,9,9,9,8,9,9,8,8,9,9,8,8,8,7,8,8,8,7,7,7,8,9,9,8,7,7,8,7,7,9,8,7,7,9,8,8,9,9,8,8,9,9,9,9,10,9,9,9,9,9,8,8,8,8,7,7,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,3,4,4,4,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,8,10,11,12,13,15,15,14,14,17,17,17,18,18,18,18,19,21,22,21,23,22,24,22,24,22,20,21,19,19,19,21,20,19,20,23,22,22,24,25,25,25,25,26,26,27,26,27,27,27,26,26,27,26,25,26,25,26,27,25,26,24,25,26,25,26,25,25,26,25,25,26,25,24,24,24,22,21,20,18,17,15,13,12,9,7,6,4,5,4,4,3,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,2,2,2,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,4,4,4,4,4,5,5,6,5,6,7,6,6,6,5,6,5,6,6,6,6,6,6,6,7,6,6,7,7,6,7,7,7,6,7,7,7,7,7,7,7,7,8,7,8,8,8,7,8,8,9,9,10,10,10,10,9,9,9,9,10,10,10,10,11,12,12,12,13,12,12,13,12,12,12,10,12,11,11,10,10,10,10,9,9,9,9,8,9,8,7,8,7,7,7,7,6,6,6,6,6,5,5,5,5,4,4,5,4,4,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,6,6,6,7,6,7,7,8,7,7,7,7,8,8,8,8,9,9,9,9,10,11,11,12,11,11,12,11,12,12,12,12,13,13,13,12,13,13,12,12,12,11,12,11,11,11,10,9,9,8,9,8,8,8,8,7,7,7,7,7,6,6,5,5,6,5,5,5,5,5,4,4,4,4,5,5,5,6,6,6,5,6,6,6,6,5,6,6,6,6,7,7,6,7,7,7,6,6,6,6,6,5,5,6,5,4,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,6,5,6,6,5,5,5,6,5,4,5,5,4,4,3,3,3,3,3,3,4,4,4,5,5,4,7,6,5,6,5,6,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,7,8,9,9,9,10,9,9,10,12,11,14,15,15,18,19,19,15,18,19,18,22,18,22,21,20,24,23,21,24,24,23,23,24,23,21,22,22,21,18,20,22,22,18,21,20,19,21,21,18,19,21,18],[29,29,28,28,29,29,29,28,28,27,27,26,28,26,27,27,27,27,26,27,27,25,27,28,26,27,28,26,27,28,26,27,28,28,26,28,27,27,28,27,28,27,27,27,27,27,26,25,26,25,24,24,23,23,22,22,20,20,19,18,15,15,12,11,9,9,8,8,8,7,7,6,6,6,7,7,8,8,9,8,7,9,9,8,8,10,10,11,11,11,12,13,11,12,12,12,12,12,14,12,13,14,14,13,14,14,14,13,14,15,15,14,14,14,14,14,13,13,11,13,14,12,11,13,13,12,11,14,13,12,12,12,11,11,12,13,13,12,13,13,12,12,13,12,12,12,13,12,11,12,12,10,11,10,12,12,13,13,12,13,11,10,10,11,10,9,10,11,10,9,10,11,9,9,11,11,8,10,10,9,10,9,9,10,10,8,10,10,9,9,10,10,9,9,10,10,12,11,10,11,12,11,10,12,12,11,11,10,11,11,12,11,9,12,11,10,11,11,10,8,10,10,9,8,9,9,7,7,8,7,7,7,8,8,9,9,8,10,8,9,8,8,8,9,8,8,7,8,7,7,7,7,7,7,7,8,9,8,7,7,7,7,6,7,7,7,6,7,8,7,7,8,8,7,8,8,8,9,9,10,8,9,8,8,8,7,7,7,7,7,6,6,7,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,5,4,3,4,4,3,4,3,4,4,4,4,4,4,4,5,5,5,5,6,6,5,6,7,7,8,10,11,11,13,16,15,14,15,16,15,16,18,17,16,17,18,19,20,20,22,22,23,22,23,22,20,22,19,19,19,21,20,19,20,23,21,21,24,23,25,25,25,25,26,26,26,27,27,27,26,27,27,27,25,26,26,26,26,24,26,24,25,26,25,26,25,24,26,25,23,24,24,21,22,22,21,21,19,19,16,14,14,12,9,6,5,4,4,4,3,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,6,6,7,7,7,7,6,6,6,5,6,5,6,6,5,5,6,6,5,6,6,6,5,6,6,5,5,6,6,5,6,6,6,6,6,7,6,7,7,7,7,7,7,8,9,9,9,9,9,8,8,9,8,10,10,9,10,11,11,12,12,12,12,13,12,12,12,12,10,11,11,10,9,9,9,9,8,8,8,8,7,8,8,6,7,6,6,6,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,7,8,7,7,8,8,9,8,9,10,10,11,11,9,10,11,10,11,12,11,12,12,12,12,12,13,12,12,12,12,11,11,11,10,10,9,8,9,8,8,7,7,7,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,4,4,4,4,4,5,5,4,5,5,5,6,5,5,6,5,5,5,6,6,5,6,6,7,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,4,5,5,4,5,5,5,5,5,5,5,5,5,4,4,5,4,4,3,3,3,2,3,3,3,3,3,4,4,4,4,5,6,5,5,5,6,6,5,5,5,4,4,5,4,4,5,5,4,4,5,5,5,5,5,5,5,6,6,7,8,9,9,9,11,11,11,11,12,14,15,16,17,19,19,19,18,20,18,19,22,20,21,22,21,24,24,22,24,24,22,24,24,23,22,22,23,22,20,21,23,23,20,22,20,19,22,21,20,20,21,19],[29,29,29,28,29,29,29,29,29,28,28,27,28,27,28,28,27,27,27,27,27,27,27,27,27,27,27,27,27,28,26,28,28,28,28,28,28,28,28,28,29,28,28,28,28,28,27,26,26,26,25,25,25,24,24,23,21,23,21,19,17,16,14,11,11,9,8,8,8,8,7,7,7,7,8,8,9,9,11,9,10,11,11,10,11,12,12,13,14,14,14,15,15,14,15,15,15,15,16,16,15,15,15,16,16,16,16,16,16,16,16,17,16,17,15,16,15,15,14,14,15,14,13,14,16,15,13,15,15,13,14,15,13,14,13,14,13,14,14,15,15,14,15,16,15,14,15,15,13,15,15,13,13,13,14,14,15,16,15,14,14,13,13,14,12,10,12,13,12,10,12,13,11,11,13,12,10,12,12,11,12,11,10,12,12,10,11,12,11,11,11,12,11,11,12,12,14,13,12,12,13,13,12,13,14,13,13,13,13,13,15,14,12,14,13,12,13,13,12,11,11,13,11,10,11,11,9,9,9,9,8,9,8,9,9,11,10,11,9,11,10,9,9,10,9,9,9,9,9,9,9,9,8,8,9,9,9,10,9,9,8,8,8,8,9,8,8,8,9,9,9,9,10,9,9,9,10,11,11,12,10,10,10,10,10,10,8,8,8,8,8,8,8,7,7,8,8,7,7,6,6,6,6,6,5,5,5,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,5,4,5,6,5,5,6,6,6,7,8,7,9,11,13,12,14,16,17,16,16,17,17,16,17,18,18,18,19,22,22,20,23,23,23,22,23,22,21,23,19,19,21,22,21,21,22,23,24,22,24,24,24,26,26,26,27,27,27,27,27,27,26,28,28,28,26,27,26,27,27,26,27,25,26,26,26,27,26,26,26,24,24,26,25,23,24,24,22,22,21,19,18,15,14,13,9,7,5,5,4,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,7,8,8,8,8,8,7,7,7,7,7,7,7,6,7,7,7,6,8,7,8,7,7,7,7,7,7,7,7,8,8,7,7,8,9,8,8,9,8,8,8,8,9,9,11,10,10,10,10,10,10,11,12,12,12,12,12,13,14,14,13,14,14,14,13,14,14,12,13,15,13,11,12,12,11,10,10,10,10,9,9,9,8,8,8,8,6,6,7,6,6,6,6,5,5,6,5,4,5,5,5,4,5,6,5,5,6,6,5,5,6,6,6,6,7,7,6,6,7,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,9,11,11,11,12,12,13,13,12,13,13,13,14,14,14,14,15,15,14,15,16,14,14,14,14,14,13,12,12,12,11,10,9,8,8,8,8,8,8,7,7,7,6,6,6,6,5,5,5,5,4,5,5,4,4,4,5,5,5,5,6,6,5,6,6,6,7,6,6,6,6,5,6,7,7,6,7,7,7,6,6,5,6,6,5,4,5,5,4,5,5,4,4,5,4,4,5,5,6,6,6,6,5,6,6,6,5,6,5,5,5,5,4,4,4,4,4,3,3,3,2,3,3,3,4,4,4,5,5,5,6,6,5,6,6,7,7,5,6,6,5,5,5,5,5,5,6,5,5,6,6,6,6,7,7,6,7,7,8,9,10,10,11,12,11,11,11,13,13,15,15,17,19,19,18,17,18,19,19,22,20,21,21,22,25,24,22,23,23,23,23,24,23,22,22,23,22,20,20,22,22,20,22,20,20,22,22,20,19,21,20],[29,28,28,29,28,28,29,28,28,28,27,27,28,26,27,26,27,26,27,28,26,26,28,27,27,28,28,28,28,28,27,28,28,29,28,29,28,28,29,29,29,28,28,28,28,28,27,26,27,27,25,24,25,24,23,23,23,21,20,19,18,16,14,12,12,10,10,9,9,9,8,8,8,7,8,9,10,10,12,10,11,11,12,12,11,13,13,14,14,15,15,16,16,15,15,16,16,16,17,17,17,16,16,17,17,17,18,17,17,18,18,17,16,18,16,16,16,15,15,14,16,15,14,15,16,16,14,17,16,13,14,15,13,14,14,15,15,16,16,15,16,16,16,16,16,16,16,15,14,15,16,14,14,13,15,15,16,16,15,15,14,14,13,14,14,12,13,15,14,12,13,14,12,12,13,13,11,12,13,11,13,11,10,12,12,10,12,13,11,10,13,13,11,12,12,13,15,14,12,14,14,13,13,15,14,14,14,12,13,13,15,14,12,15,14,12,14,14,12,10,12,13,11,10,11,11,10,10,11,10,9,10,9,11,10,11,11,11,9,11,11,10,9,11,10,9,9,10,9,9,10,9,9,9,9,9,10,10,10,9,8,9,9,9,9,9,8,9,10,9,10,10,10,10,10,10,11,11,11,12,10,11,10,11,11,9,9,9,9,9,9,8,8,8,8,8,8,8,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,5,4,5,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,8,9,9,10,11,12,13,14,15,17,15,15,17,18,16,17,19,19,17,18,21,22,21,23,23,24,22,24,21,20,22,19,18,19,20,20,19,19,22,21,20,22,23,24,24,25,26,26,27,27,27,27,27,26,27,27,27,25,27,25,26,27,25,26,25,24,26,24,26,25,25,26,25,24,25,24,23,23,23,22,21,21,18,18,15,13,12,9,7,6,5,5,4,4,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,3,3,4,4,3,3,2,3,3,2,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,3,3,2,3,3,4,4,4,4,4,5,5,4,5,5,5,5,6,6,6,7,7,8,8,8,8,8,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,10,9,10,9,9,10,11,12,12,12,11,11,10,10,10,12,12,11,12,13,14,15,15,15,14,15,15,14,15,13,13,14,14,13,13,13,12,12,11,11,11,10,10,10,9,9,9,8,8,8,8,7,7,8,6,6,7,6,6,7,5,6,6,6,5,5,6,6,6,6,7,7,6,6,7,7,7,7,7,7,8,7,7,9,8,8,8,9,8,8,8,9,9,9,9,9,10,11,11,11,12,13,13,14,14,14,14,13,13,15,16,15,15,15,16,14,15,16,14,15,14,14,14,13,14,13,12,11,10,10,10,10,10,9,8,9,8,8,8,8,7,7,7,6,7,7,5,5,6,5,4,4,5,5,5,6,6,6,7,7,6,7,7,7,7,8,7,7,8,8,8,8,8,8,8,8,7,7,7,6,7,6,6,7,6,5,6,6,5,5,5,6,5,5,6,6,6,6,7,6,6,7,6,7,6,6,6,6,6,6,6,6,5,5,4,4,3,3,3,4,4,5,5,5,6,6,6,7,7,7,6,6,7,7,6,6,7,7,6,6,7,5,6,6,6,6,6,6,6,7,8,7,7,7,8,9,10,10,10,10,11,10,11,11,13,12,15,15,17,18,19,19,17,17,19,19,22,19,20,22,21,23,23,22,23,24,22,23,23,23,22,21,23,21,18,19,23,22,19,23,21,20,23,21,19,20,22,20],[29,28,28,28,28,28,28,28,28,27,27,26,27,26,27,27,27,26,27,27,27,26,27,27,26,27,28,27,28,28,26,28,28,28,27,28,27,28,28,28,28,27,26,27,27,27,26,25,25,25,24,24,23,23,22,21,21,20,19,19,18,16,14,13,11,10,10,10,9,10,9,8,8,8,8,9,9,10,12,10,10,12,12,10,12,14,13,14,15,15,16,16,17,17,16,17,16,16,16,16,17,17,17,17,19,18,17,17,17,17,17,17,17,19,17,16,17,15,15,15,16,16,15,15,17,17,15,17,16,14,15,16,14,15,14,15,15,16,16,16,16,17,17,16,16,17,17,16,15,16,16,14,15,14,15,16,16,16,14,15,13,14,13,14,14,13,13,16,14,14,14,14,13,14,14,15,12,13,13,13,15,13,12,14,14,11,12,14,12,12,13,14,10,13,13,13,15,15,12,14,15,13,13,15,15,13,14,13,14,15,15,14,12,16,14,13,15,15,14,11,13,15,12,11,12,12,10,10,11,11,9,10,9,10,10,11,11,11,10,12,12,10,10,12,11,10,10,11,9,9,10,9,8,9,9,10,11,11,9,9,8,10,9,8,11,9,8,9,11,9,9,11,10,10,10,11,11,12,11,13,12,12,10,11,11,10,9,10,9,9,9,9,9,8,8,8,8,7,8,7,7,7,7,7,7,6,6,5,6,6,5,5,6,5,4,5,4,5,5,5,5,6,6,6,6,6,7,6,7,7,7,8,8,8,10,11,11,14,15,16,17,14,15,16,17,17,16,17,17,17,19,20,20,20,21,20,23,21,21,20,18,20,20,20,20,21,20,19,19,20,20,20,22,24,24,24,24,26,26,26,26,26,25,26,24,25,25,25,24,26,25,25,26,24,26,24,25,26,24,26,25,25,27,25,23,26,25,23,24,22,21,21,19,19,17,14,13,12,9,7,6,5,6,4,4,4,3,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,7,6,7,8,7,8,7,6,7,6,7,7,7,7,6,7,7,8,7,7,8,7,7,8,8,7,7,8,8,7,8,8,8,7,8,9,8,9,10,9,9,9,10,10,11,11,12,12,12,11,10,11,10,12,12,12,12,14,14,15,15,15,14,15,15,14,15,14,12,14,14,13,13,12,13,11,11,11,11,10,9,10,10,9,9,8,8,7,8,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,6,6,5,6,6,6,5,6,6,6,7,7,7,7,7,7,7,8,7,8,8,8,8,8,9,9,10,10,10,9,10,10,11,10,11,13,13,14,15,13,15,14,14,15,15,15,16,15,16,14,15,16,15,14,15,14,14,14,13,13,12,12,10,10,10,9,9,9,9,9,9,8,8,8,7,7,6,7,6,6,5,6,5,5,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,6,8,7,7,7,8,7,7,8,8,8,7,8,7,7,7,7,6,7,6,5,6,6,5,4,5,6,5,5,5,6,6,6,6,6,6,7,6,6,7,6,6,6,6,5,5,6,6,5,4,4,3,3,4,4,4,5,5,4,5,6,6,7,7,7,7,6,7,7,6,6,6,6,5,6,5,5,6,6,5,6,6,6,6,6,7,7,7,7,7,8,9,10,10,10,11,10,11,11,13,13,15,16,16,19,21,19,17,19,20,20,23,20,22,23,21,24,24,23,24,25,22,24,24,23,23,23,23,22,19,21,23,22,21,21,22,18,23,21,20,21,21,19],[28,28,28,28,29,29,28,28,28,27,27,26,27,27,27,27,27,27,26,27,27,26,26,27,26,26,27,27,27,27,26,27,28,28,27,28,28,28,29,28,28,27,27,27,27,27,26,24,26,24,24,24,23,23,22,21,20,20,19,18,16,15,13,11,10,10,10,9,10,8,9,8,8,7,8,8,10,9,12,9,10,11,12,10,12,13,13,14,14,14,14,14,15,16,15,14,15,15,15,16,16,17,16,16,16,17,17,17,17,17,17,17,17,17,16,17,15,15,14,14,16,14,14,14,16,16,14,16,16,14,15,16,14,14,13,14,15,14,15,15,14,15,16,15,15,15,16,15,14,15,15,15,15,13,14,15,16,15,14,16,14,13,14,13,13,12,13,14,13,12,13,14,12,13,13,14,12,13,13,11,13,11,11,13,13,11,11,13,12,11,12,13,11,12,12,13,14,14,12,13,14,14,13,13,14,12,14,12,13,14,15,14,12,14,13,12,14,13,13,12,13,13,12,11,12,12,10,10,11,10,9,10,10,10,11,12,10,12,10,12,11,10,9,11,10,10,9,10,8,9,10,9,8,9,9,10,11,11,10,9,8,9,8,9,10,9,8,9,11,9,9,10,10,9,9,10,10,11,11,12,11,11,10,11,11,9,9,9,9,8,8,8,8,8,8,8,8,7,7,7,7,7,6,7,6,6,6,5,6,6,5,5,6,5,5,5,4,5,5,5,5,5,6,6,6,6,7,7,7,7,7,8,8,8,10,11,13,12,15,16,16,15,16,17,16,16,18,17,16,18,19,19,20,21,22,22,23,22,23,21,20,22,20,19,21,22,20,20,21,21,21,21,23,24,24,25,25,26,26,27,26,27,27,27,27,27,28,27,26,27,26,27,27,26,27,24,26,26,25,27,26,26,26,24,24,26,25,22,23,22,21,22,20,19,17,15,14,13,10,7,6,5,6,4,4,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,5,4,3,4,5,4,4,5,5,4,5,5,6,7,7,7,8,9,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,8,8,7,8,7,7,7,7,7,7,6,7,8,7,7,8,8,7,8,9,8,8,8,8,8,10,11,11,10,10,10,9,11,10,12,12,12,12,13,14,14,15,13,13,14,14,13,14,15,12,13,14,13,12,12,12,11,11,11,10,10,9,9,9,8,8,7,7,7,6,7,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,6,5,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,8,7,8,9,8,8,9,9,12,10,11,12,13,13,13,13,14,14,13,15,15,14,14,15,15,14,15,16,15,15,14,15,14,13,13,12,12,12,10,10,8,9,8,8,8,8,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,5,4,4,5,5,5,6,6,6,7,6,6,7,6,6,7,7,7,7,8,7,8,7,7,6,6,6,6,6,6,6,5,5,5,4,4,4,4,4,4,5,5,5,6,6,5,6,6,6,5,6,6,5,6,5,4,5,5,6,4,4,4,3,3,3,3,3,4,5,4,5,5,5,6,6,5,7,6,7,6,5,6,5,5,5,6,5,5,5,6,5,5,6,6,6,6,7,7,7,7,7,8,9,10,10,10,12,11,11,12,14,14,16,17,17,19,20,20,18,20,20,19,22,20,21,22,21,23,23,23,25,24,23,25,24,22,24,22,24,22,21,22,24,22,21,21,21,19,23,21,20,20,22,20],[29,29,28,29,29,29,29,28,29,28,27,27,27,27,27,27,27,26,27,27,26,26,27,27,27,26,27,27,27,27,26,28,28,28,28,28,28,27,29,28,29,28,28,27,28,27,27,26,26,25,25,24,24,23,24,23,22,22,21,20,18,17,14,13,12,10,9,10,9,8,8,8,7,7,8,9,10,10,12,11,11,12,12,11,12,13,14,13,14,13,14,14,14,15,15,15,15,14,15,15,15,15,16,16,15,16,16,17,16,17,17,17,15,17,16,16,15,15,15,15,16,14,14,14,16,15,13,15,15,15,14,14,14,15,13,15,14,15,15,15,15,14,15,15,15,13,15,15,14,14,15,14,14,13,14,15,15,15,15,15,13,14,14,14,13,13,13,13,14,12,13,12,12,12,13,13,12,13,13,13,13,11,12,13,13,12,12,13,12,12,12,12,12,12,12,13,14,13,13,13,14,13,13,14,15,13,14,14,12,15,15,13,12,14,13,13,14,13,13,12,12,13,12,11,12,11,10,10,11,10,9,9,10,11,11,12,11,11,10,13,11,10,10,11,10,10,10,10,9,9,10,9,9,9,9,10,11,11,10,9,8,9,8,9,10,9,9,9,10,9,10,10,10,10,10,10,11,11,11,11,11,11,10,11,11,10,10,9,10,9,8,8,9,8,8,8,8,8,7,7,7,7,6,7,6,6,5,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,8,8,9,10,11,12,13,15,15,17,16,15,18,18,18,19,20,20,19,20,22,23,22,23,25,25,23,24,22,22,22,19,20,20,20,21,21,21,22,22,22,23,23,24,25,25,25,27,27,27,27,27,27,27,27,27,27,27,27,26,27,27,26,27,24,26,26,26,26,26,26,27,25,23,26,24,24,25,23,22,22,21,19,18,16,13,12,8,7,6,5,5,4,4,3,3,2,3,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,1,2,3,3,3,3,3,3,2,3,2,3,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,5,4,5,5,5,4,6,6,5,6,6,7,6,7,7,8,8,8,8,9,8,8,8,7,8,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,7,7,8,8,8,9,8,9,8,9,10,9,9,9,9,10,11,12,12,11,12,11,10,11,11,12,12,12,13,14,14,15,15,14,13,14,14,15,15,15,12,13,14,13,13,13,12,11,12,12,11,11,10,11,10,9,8,8,8,8,7,7,8,7,6,7,6,6,6,6,6,6,5,6,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,6,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,11,10,12,11,12,13,13,14,14,13,14,13,13,14,15,14,15,15,17,14,16,18,15,15,15,16,15,15,14,15,13,12,12,11,9,10,9,9,9,9,8,8,8,7,6,7,7,5,6,7,5,5,6,6,5,4,4,5,5,5,5,6,6,6,6,7,6,7,7,7,7,7,6,7,8,7,7,8,7,8,7,7,6,7,6,6,5,6,6,5,5,6,4,4,5,5,5,5,6,6,6,7,6,6,6,7,6,6,6,6,6,6,5,5,5,5,5,4,4,3,3,3,3,4,4,4,5,5,5,5,5,6,7,6,7,6,8,7,6,6,6,5,6,6,6,5,6,7,5,6,7,7,7,7,8,8,7,8,8,9,10,11,11,11,12,12,13,13,13,14,15,14,17,18,20,18,18,19,20,19,23,21,22,22,21,25,23,23,23,24,22,23,24,23,22,21,23,22,20,21,22,22,22,21,21,22,22,22,22,21,23,21],[29,28,28,28,28,29,29,28,28,28,27,27,28,27,27,27,28,26,27,28,27,26,28,27,26,27,27,27,28,27,26,28,28,29,27,28,27,28,28,28,28,28,27,26,27,27,26,26,26,25,25,24,24,24,23,22,22,21,20,19,18,16,14,12,12,10,10,9,9,9,9,9,8,8,9,10,11,12,13,11,11,13,13,11,13,15,15,15,16,16,17,16,17,17,16,16,17,16,17,18,18,17,17,19,18,18,18,17,18,18,17,17,18,19,17,17,17,16,16,15,17,16,14,15,18,17,14,17,17,14,15,17,14,14,15,16,16,17,15,16,16,16,16,17,16,16,17,16,15,17,17,16,16,15,16,16,17,16,16,15,15,14,14,15,16,14,13,16,15,14,15,15,15,15,15,15,13,14,13,13,15,13,12,14,14,12,13,14,13,12,13,14,12,14,14,15,15,15,12,15,15,14,14,16,16,14,14,13,15,15,15,15,13,16,16,14,16,16,14,12,14,15,13,11,14,13,11,10,12,11,9,10,9,11,11,11,12,13,11,12,13,10,11,13,11,9,10,11,9,9,11,9,9,9,9,11,12,12,10,9,8,10,9,10,11,10,9,10,11,10,10,11,11,10,11,12,12,12,12,13,12,13,11,12,13,11,10,10,11,9,9,10,9,9,8,9,8,8,7,7,8,7,7,7,7,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,9,9,8,11,11,12,13,15,15,17,15,15,17,18,16,16,18,19,17,19,21,21,21,22,22,24,22,23,20,20,21,20,20,20,22,23,20,21,21,22,21,24,23,24,24,25,26,26,26,26,26,26,26,26,26,26,26,25,26,25,26,27,24,26,24,25,25,24,26,25,24,26,24,24,24,24,23,22,22,21,20,19,18,17,14,13,11,9,8,7,6,6,5,4,4,4,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,2,3,3,3,3,3,2,3,3,2,3,2,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,4,4,4,5,5,4,4,5,5,5,6,5,5,6,6,7,7,7,7,9,8,8,9,9,7,8,7,7,8,7,8,8,8,8,8,8,8,8,8,8,9,8,8,9,9,8,8,9,9,9,9,9,9,9,10,10,9,10,9,10,11,12,13,13,13,12,12,10,12,11,13,13,13,14,14,15,15,15,16,14,15,16,15,15,15,14,14,15,15,14,13,14,13,12,12,12,11,10,11,11,10,10,9,9,9,8,8,8,8,7,7,7,7,6,7,7,6,6,7,6,6,7,7,7,7,7,8,7,7,7,8,8,8,8,8,8,8,8,9,9,8,9,10,10,9,10,10,11,11,10,10,11,11,12,11,13,14,14,15,15,14,16,15,14,16,17,16,16,16,17,14,16,17,15,15,15,16,16,14,14,15,14,13,12,10,11,10,10,10,10,10,9,9,10,9,8,8,8,7,7,7,7,6,6,6,6,5,5,5,6,7,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,8,9,9,9,9,8,8,8,7,8,7,7,7,8,6,7,7,6,5,6,7,6,5,6,6,7,7,7,7,7,8,7,8,7,7,7,8,6,7,7,7,6,6,5,4,4,4,4,5,5,6,6,6,7,7,6,8,8,7,8,8,8,7,7,7,6,6,7,7,6,6,7,7,7,7,8,8,8,7,8,8,8,8,9,9,10,11,11,11,13,12,12,13,14,13,15,16,18,20,20,19,16,18,20,19,21,19,21,21,22,24,23,21,22,24,22,23,23,22,22,22,22,21,19,21,23,22,20,22,22,20,23,20,21,22,22,19],[27,27,27,27,27,28,28,27,27,26,25,26,26,25,26,26,26,25,25,26,26,25,26,26,24,26,26,26,26,26,25,27,26,28,26,27,26,27,27,27,27,26,25,26,26,26,25,24,24,24,23,23,22,22,21,20,20,20,18,18,16,15,14,13,11,11,11,11,10,10,10,10,8,9,10,11,11,12,15,12,12,14,15,13,14,17,16,16,16,16,17,17,17,16,17,17,17,17,17,17,17,18,18,18,18,18,17,18,18,17,18,18,18,18,18,17,17,17,16,17,18,18,16,16,17,18,16,17,17,16,16,17,16,15,15,15,16,16,17,17,16,17,17,18,18,17,17,18,16,17,17,17,17,15,17,16,17,16,17,16,16,15,14,15,16,14,14,16,17,15,15,16,15,15,15,16,14,15,15,13,17,13,13,15,16,13,14,15,14,14,13,15,13,14,14,14,16,16,15,14,15,15,14,15,15,15,16,15,15,17,17,16,14,18,17,15,16,17,16,14,16,16,15,14,15,14,12,12,14,12,10,11,10,12,11,13,12,12,11,14,13,11,11,13,12,11,11,12,10,10,12,10,10,10,10,12,13,13,11,10,9,11,10,10,13,11,9,11,13,10,11,13,12,11,11,12,12,14,14,15,13,15,12,13,14,12,10,11,12,10,9,10,11,9,9,10,9,8,8,8,8,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,5,6,6,6,7,7,7,7,7,8,8,7,8,8,8,10,10,9,11,11,13,14,14,15,16,15,16,18,17,17,17,17,17,17,18,20,20,20,22,21,23,22,23,22,20,21,19,19,21,21,19,20,21,20,20,20,20,23,22,24,25,25,26,26,26,26,26,26,25,26,26,26,24,25,24,25,26,23,25,22,25,26,24,25,24,25,26,22,22,25,23,21,24,21,21,22,19,18,16,15,14,12,10,9,7,6,7,5,6,4,5,4,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,3,3,2,3,3,3,3,4,5,4,4,5,4,5,5,6,5,5,5,5,5,5,6,5,6,7,6,7,8,8,9,9,8,9,8,7,8,8,8,8,8,8,8,8,9,8,8,9,10,8,8,9,9,8,8,9,9,8,10,10,9,9,10,11,9,10,11,10,10,10,10,10,12,13,12,11,12,11,11,13,12,14,14,14,14,15,16,16,16,16,16,16,16,17,16,16,14,15,16,15,15,15,15,14,12,13,13,11,11,12,11,10,9,10,9,9,8,8,8,8,8,7,7,7,7,7,7,6,6,7,6,7,7,7,6,7,7,6,6,7,7,6,8,8,8,7,7,8,8,8,8,9,9,9,9,9,10,10,11,11,10,10,11,12,13,13,13,15,15,17,16,15,16,16,15,18,18,16,16,16,18,16,17,17,17,16,16,16,15,15,14,14,14,14,12,12,11,12,10,11,10,9,9,9,9,9,7,8,7,7,7,7,7,6,6,6,6,5,5,5,6,6,6,7,7,7,6,8,7,9,7,8,8,8,8,9,9,8,8,10,9,10,9,9,8,8,8,7,7,7,7,6,6,7,5,5,6,6,5,5,6,6,6,8,7,6,7,7,7,7,8,7,6,7,7,6,6,7,6,6,6,4,5,4,3,5,5,6,5,5,6,6,6,7,7,7,6,7,8,6,6,6,6,5,6,6,6,6,7,7,6,7,7,7,7,7,8,8,8,8,8,9,10,10,11,11,12,11,12,13,13,14,17,17,18,19,19,20,17,18,20,19,22,21,21,21,20,24,23,22,23,24,21,23,24,21,23,23,23,21,20,20,23,21,20,20,21,19,22,20,20,21,21,19],[27,28,27,27,28,28,27,27,28,26,27,26,27,26,26,27,27,25,26,26,25,26,25,25,26,26,26,26,26,26,25,27,26,27,27,27,27,27,28,27,27,27,26,27,26,26,26,25,24,24,24,22,23,22,22,21,20,21,20,18,16,16,13,14,12,11,11,11,11,10,10,10,9,10,11,12,13,13,15,13,14,15,15,14,15,17,16,17,17,18,17,17,17,17,17,17,18,18,18,18,18,19,18,19,18,19,18,17,18,19,19,18,19,21,18,19,18,17,17,17,19,18,16,17,18,17,15,18,19,17,16,17,17,16,16,16,17,17,17,17,18,17,18,18,18,17,18,18,17,17,18,18,17,17,17,18,17,17,17,16,17,17,16,15,17,15,15,17,18,16,16,17,15,15,16,17,15,16,15,15,17,15,14,16,16,15,15,15,15,15,14,17,15,15,15,14,16,17,15,15,17,16,15,16,17,15,16,15,16,18,17,16,15,17,16,16,18,17,16,16,15,17,17,14,16,16,14,14,15,14,12,12,11,13,14,14,13,14,13,14,15,12,12,14,13,12,12,13,12,11,13,12,11,11,12,13,14,13,12,12,12,12,11,12,13,13,11,12,14,13,13,13,13,12,13,13,12,14,15,15,13,17,15,15,15,13,13,13,13,12,11,11,12,11,11,10,10,10,8,8,9,8,7,8,8,7,8,7,7,7,7,7,7,7,7,7,6,6,7,6,6,7,7,8,8,8,8,8,9,9,8,9,11,10,11,12,13,13,15,16,16,16,17,18,17,17,18,19,19,18,19,21,21,21,22,23,24,22,24,22,21,21,19,20,21,22,21,20,21,20,21,21,20,23,23,24,25,24,25,26,26,26,26,27,26,26,27,26,25,26,24,27,26,25,26,22,26,25,24,25,25,25,26,22,23,25,23,22,23,21,21,21,19,18,17,15,14,12,10,9,8,7,7,6,6,5,4,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,0,1,1,2,3,3,3,4,3,3,3,3,3,3,2,2,2,3,2,2,3,3,3,2,3,4,3,4,4,4,4,5,4,5,6,6,5,6,6,6,6,7,6,7,7,7,8,9,9,9,9,10,10,10,9,9,8,9,8,9,9,9,9,10,10,9,9,10,10,10,10,10,10,9,10,9,10,9,11,11,10,10,11,12,11,11,12,12,11,11,11,12,12,15,13,13,13,13,13,13,14,15,15,15,17,16,17,17,17,16,16,15,17,16,17,17,15,15,18,16,16,16,17,15,15,15,14,14,13,14,13,12,11,12,11,11,9,9,9,9,8,8,9,8,8,8,8,7,7,8,7,8,7,7,8,7,8,8,8,8,8,8,8,9,8,9,8,9,9,9,9,9,9,9,9,10,10,10,10,12,11,11,12,13,14,13,15,16,17,16,17,17,17,17,16,17,17,17,16,17,19,17,17,21,17,17,17,18,18,17,16,15,15,15,13,12,10,13,11,12,12,10,9,10,10,9,8,9,9,8,8,8,7,7,7,7,6,6,6,5,7,6,6,7,7,7,7,8,7,8,8,7,8,8,8,8,9,9,8,9,8,10,9,9,8,8,8,7,7,8,7,6,7,6,6,5,6,5,5,6,6,7,6,7,7,6,7,7,7,7,8,7,6,8,7,6,6,6,6,6,5,4,4,4,4,4,4,5,5,5,5,6,6,7,8,7,8,8,9,8,7,7,8,7,7,7,8,7,7,8,8,7,8,9,8,8,9,9,9,9,9,10,11,11,12,12,13,12,13,13,14,15,17,17,18,20,20,20,18,20,20,20,22,20,22,22,22,24,24,23,23,24,22,24,24,23,25,22,24,22,22,21,23,22,21,20,21,19,22,21,20,20,21,19],[28,28,28,28,28,29,28,27,28,27,26,27,27,27,27,27,26,25,26,26,25,26,26,26,26,26,27,26,27,27,26,27,27,28,27,28,28,27,28,27,27,27,27,27,27,26,26,25,25,25,25,23,23,23,22,23,22,22,20,20,19,18,17,15,15,14,14,14,14,14,14,13,14,14,16,16,18,18,19,18,20,19,18,21,20,20,21,20,19,21,21,20,21,21,20,20,21,21,21,21,21,21,21,21,21,22,21,20,21,21,21,21,22,22,22,21,21,21,21,20,22,21,20,20,21,20,19,21,21,19,19,21,20,19,18,19,21,21,20,20,21,20,20,21,20,20,21,21,20,20,21,21,20,20,21,21,21,21,21,20,21,20,21,20,20,20,19,21,21,20,19,20,19,20,19,20,18,19,19,20,20,19,18,18,20,19,18,19,19,19,17,20,20,20,18,18,19,19,19,18,19,18,18,18,19,18,18,19,18,20,20,19,19,21,20,19,21,20,19,19,19,20,20,19,19,20,18,18,19,18,17,17,16,17,17,18,17,17,16,18,19,17,16,17,16,16,17,18,15,16,17,16,15,15,15,16,17,17,16,15,15,16,14,16,17,16,15,16,18,16,18,17,18,17,17,17,17,18,18,18,18,18,18,20,18,17,17,17,17,15,16,16,16,14,15,15,14,15,13,13,13,11,11,11,11,10,11,9,10,10,10,9,10,10,10,10,8,8,8,8,8,9,9,10,10,10,10,11,12,12,11,12,13,13,13,15,15,15,18,16,19,17,16,19,19,17,17,19,19,18,19,22,21,20,22,23,23,22,23,22,21,21,20,19,20,21,21,20,21,22,22,22,22,23,24,24,25,25,26,26,26,26,26,26,26,26,26,26,24,25,24,26,26,24,26,24,24,25,24,26,25,25,26,24,23,25,23,22,22,22,22,20,20,18,18,15,16,14,12,10,9,9,9,8,7,6,6,6,5,5,5,5,4,4,4,3,4,4,3,3,3,2,1,1,0,1,4,5,5,5,6,5,4,5,5,4,4,3,2,3,4,3,3,3,4,4,4,5,6,5,5,7,6,6,7,7,9,8,10,9,9,9,10,9,10,11,10,10,11,11,10,10,11,13,13,12,12,12,12,12,12,12,13,13,13,12,13,14,13,13,14,15,14,14,14,14,12,15,14,13,13,15,15,14,15,15,16,15,15,16,17,17,16,16,15,16,18,16,18,18,17,17,17,19,18,18,19,19,18,18,20,20,17,19,20,19,17,18,20,17,17,20,19,19,19,20,18,19,20,19,18,19,19,18,17,16,16,14,15,15,14,14,14,12,13,13,12,12,12,12,10,11,11,11,11,11,11,12,11,11,12,12,11,12,13,13,13,13,13,12,14,13,14,14,13,14,15,14,15,15,15,16,16,15,15,17,17,18,19,19,20,20,19,19,20,21,20,19,19,20,19,20,21,21,18,21,22,20,19,19,19,20,20,18,20,19,18,17,16,16,16,17,17,16,14,14,14,14,13,12,13,13,12,12,12,11,9,10,12,9,8,10,9,11,10,10,11,10,11,12,12,11,12,11,12,12,12,12,12,14,13,12,13,13,13,12,12,11,12,12,10,10,11,11,9,10,10,9,9,10,9,8,9,10,11,9,11,10,9,11,11,10,11,10,10,10,10,9,9,9,9,8,9,7,6,6,5,5,6,6,7,7,7,7,8,8,10,10,9,11,11,12,11,10,11,10,9,12,12,10,11,11,13,10,12,12,12,11,12,13,12,12,12,14,13,13,13,13,13,15,14,15,15,16,16,17,17,18,17,21,19,18,19,21,19,22,20,22,22,21,25,24,22,22,25,22,22,23,22,22,21,23,22,20,21,22,21,20,22,20,20,22,22,19,19,21,19],[28,28,27,28,28,28,28,27,28,27,26,27,27,26,27,26,26,24,27,27,24,27,27,25,27,28,26,27,28,26,28,28,26,28,28,28,27,28,28,29,29,28,27,28,28,28,28,27,26,27,26,25,25,25,25,24,24,24,22,21,22,19,18,17,18,16,16,16,15,17,17,17,17,17,17,18,20,19,21,21,22,20,22,21,21,22,22,22,23,23,23,22,24,23,23,23,24,23,23,23,24,24,23,24,23,23,24,23,23,23,25,24,24,24,23,23,23,24,22,22,24,23,22,22,23,23,21,24,24,21,22,25,22,21,21,23,22,22,23,22,24,22,23,24,23,23,24,23,22,23,23,24,23,21,23,23,24,22,23,22,23,23,21,22,23,22,21,23,23,22,21,23,22,22,22,22,21,20,21,20,22,22,21,21,22,21,20,21,21,21,20,23,21,21,21,21,22,22,20,21,21,21,22,21,22,21,21,22,22,23,23,22,22,23,23,21,24,23,22,22,21,23,22,21,21,21,22,20,21,20,19,19,18,19,18,18,20,18,17,19,20,20,17,20,20,20,18,20,18,19,18,17,17,17,17,18,19,18,17,17,18,18,18,17,19,18,18,18,19,18,19,18,21,17,19,21,19,21,20,21,21,21,20,20,19,20,18,19,19,17,18,18,19,18,16,17,17,17,16,16,16,14,14,15,14,12,14,13,12,12,13,13,11,11,11,12,10,11,11,11,10,12,12,13,13,12,14,14,13,14,12,13,14,14,15,16,17,17,19,19,20,19,18,21,21,19,19,21,20,18,21,23,22,22,23,24,24,22,25,22,22,22,22,20,21,22,23,21,22,22,22,23,23,23,24,26,26,26,26,26,26,26,26,25,26,26,26,26,25,25,25,26,25,24,26,23,25,24,25,25,24,24,26,23,23,25,23,23,22,22,22,20,21,19,19,17,16,15,14,12,12,11,12,12,10,9,9,8,8,7,5,6,7,4,5,5,3,4,5,4,2,3,3,2,1,0,1,3,4,4,5,5,5,6,4,4,4,4,3,3,4,4,5,4,6,6,5,7,8,7,7,7,9,9,10,10,11,12,12,10,12,12,10,9,12,12,9,11,12,10,9,11,12,11,12,13,13,13,13,12,15,13,14,16,15,16,15,15,15,16,16,16,15,16,15,15,16,15,15,15,16,16,16,16,16,15,18,16,16,18,17,17,16,17,17,17,20,17,18,19,18,19,20,21,20,21,20,23,21,21,22,22,21,21,22,23,22,22,22,21,21,22,21,22,22,22,22,21,21,21,19,19,20,19,18,18,18,17,18,16,16,16,16,15,15,14,13,14,14,13,13,13,14,13,12,13,14,13,14,14,13,13,13,14,13,14,14,14,15,13,13,14,16,15,14,16,16,15,16,17,17,17,19,17,18,18,19,20,20,22,22,22,22,22,22,24,23,21,23,23,22,22,23,23,21,23,23,23,22,22,23,22,21,20,22,21,20,20,18,18,19,19,19,17,17,17,16,17,17,15,15,15,14,14,14,13,13,13,13,13,11,11,11,10,14,12,12,13,15,12,14,14,14,15,12,14,14,15,14,15,16,15,15,16,15,15,15,16,14,14,14,14,14,14,13,14,13,12,10,13,12,10,10,12,12,12,12,14,11,13,14,14,14,13,15,11,14,13,12,12,12,13,13,11,10,8,8,7,9,8,10,10,10,11,10,10,11,12,11,12,13,13,11,11,12,10,11,13,12,10,13,15,12,12,16,13,14,14,14,14,14,14,14,14,14,14,14,15,15,15,14,15,16,17,17,19,17,21,19,24,23,19,20,24,22,26,22,25,23,23,26,24,22,24,25,22,25,26,23,23,22,24,21,19,21,23,22,20,23,21,20,22,20,20,19,20,17],[28,28,28,28,28,29,29,28,28,28,27,27,27,27,27,27,27,26,27,27,26,27,28,27,28,28,28,28,28,28,28,29,28,29,29,29,28,29,29,29,29,29,29,29,29,29,28,28,28,28,27,27,27,27,26,26,25,26,25,24,23,22,20,20,20,18,19,19,18,18,18,17,18,17,20,20,21,21,23,21,22,22,23,22,23,24,24,23,24,24,25,23,24,24,24,24,25,24,24,24,24,25,24,25,25,24,25,24,25,25,25,25,25,26,25,25,25,24,24,24,25,24,23,23,24,24,21,23,24,23,22,24,23,23,23,24,23,24,24,24,24,24,24,24,24,24,24,24,25,24,24,25,25,23,25,24,25,24,24,24,23,25,22,23,24,23,21,24,24,23,22,24,23,22,23,23,22,22,22,23,24,22,21,22,23,21,21,23,23,22,20,23,22,22,21,21,22,23,22,22,22,23,23,22,23,22,22,23,22,24,24,22,23,24,24,23,24,24,23,23,23,24,22,22,23,21,21,21,23,20,19,20,18,20,19,20,20,20,19,20,22,19,20,20,21,18,19,21,18,17,19,19,17,17,17,19,20,19,17,17,17,19,17,16,20,20,16,19,20,19,19,19,21,19,20,21,20,21,21,22,22,22,20,22,22,21,20,21,21,18,18,20,19,16,17,19,18,15,16,16,16,14,14,13,13,13,13,11,12,12,10,10,12,11,9,10,9,10,11,10,11,12,11,12,13,14,14,14,15,15,14,15,17,16,16,19,19,19,21,19,21,21,19,22,22,22,21,22,22,22,24,25,25,24,26,25,26,24,25,24,22,23,22,21,22,22,22,22,23,23,24,23,23,24,24,25,26,26,26,26,26,26,26,26,26,26,26,26,25,26,24,26,26,25,26,24,25,25,26,26,25,25,26,24,24,24,23,24,24,24,24,22,23,20,20,18,18,16,15,13,13,12,12,11,10,11,8,8,6,6,5,5,5,4,5,4,3,4,5,4,2,3,4,4,2,1,0,1,3,3,4,5,4,6,7,6,6,5,6,6,8,7,6,7,7,6,6,7,8,7,7,8,8,8,8,8,9,10,10,9,9,9,9,8,9,10,10,11,10,10,10,10,11,11,11,11,12,13,10,12,12,13,14,14,15,13,13,14,15,13,14,16,15,13,15,15,13,14,15,15,13,15,17,15,15,17,19,16,17,19,19,19,18,19,19,19,21,20,20,21,20,20,19,22,22,22,22,23,23,22,23,23,23,22,23,24,24,24,23,22,22,24,23,23,22,24,22,22,24,22,21,20,22,21,20,19,19,18,17,17,16,14,14,14,14,12,12,13,13,11,12,11,11,10,10,12,12,11,11,13,12,11,13,13,12,12,14,14,14,12,15,15,15,14,16,17,16,16,17,18,18,18,20,19,19,20,21,22,22,23,22,23,23,23,24,24,23,23,24,25,24,24,23,24,21,25,25,23,24,23,24,24,22,23,23,22,21,21,19,19,21,21,20,19,19,18,18,18,17,15,16,15,12,14,14,12,10,11,13,12,10,10,11,10,12,12,12,11,12,13,12,13,14,14,13,15,15,14,14,16,17,15,17,18,17,16,16,15,15,15,13,12,14,14,11,12,13,12,10,11,14,11,12,12,12,13,13,14,13,14,14,13,14,14,14,12,14,13,13,14,13,13,12,11,12,8,8,8,9,9,11,11,11,11,11,11,12,12,12,12,12,13,12,11,11,12,12,12,11,10,10,12,11,10,12,12,11,10,13,13,12,12,13,15,14,14,14,14,14,16,15,15,16,18,16,19,18,19,19,23,22,21,21,24,22,24,23,24,24,23,26,26,25,24,25,24,26,25,25,25,24,24,23,21,23,24,24,22,22,23,20,24,20,20,22,21,18],[29,29,29,29,29,29,29,29,29,29,28,28,29,27,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,29,30,29,30,30,29,30,29,29,29,29,29,29,28,28,28,27,27,27,27,27,27,26,26,25,25,24,22,20,21,20,19,20,18,19,19,19,19,18,19,19,19,22,21,23,22,21,23,24,22,23,25,25,25,25,25,25,26,26,26,25,26,27,26,26,27,26,26,26,27,26,26,26,26,25,25,26,26,27,27,25,26,25,25,24,24,25,25,24,24,26,26,24,26,26,25,24,26,25,24,24,25,25,25,25,25,26,26,26,27,26,26,26,26,26,26,25,25,26,25,25,26,26,25,25,24,25,24,24,25,25,23,23,26,25,24,24,26,24,24,25,25,22,23,24,23,24,22,23,24,24,23,24,25,23,24,24,24,22,24,24,23,24,25,24,24,23,24,24,25,25,24,25,24,24,25,25,25,25,26,25,25,26,26,25,23,25,25,24,22,24,23,20,20,23,21,18,21,19,20,18,19,20,21,18,20,22,19,20,21,20,20,20,21,19,19,20,18,19,19,19,18,20,19,18,19,19,19,19,19,21,20,19,21,22,19,21,22,22,20,22,22,22,22,23,24,22,23,22,22,23,22,19,20,21,19,19,19,19,18,17,19,18,17,17,17,17,16,16,16,15,15,14,11,12,13,13,11,11,12,10,10,9,11,12,11,12,13,14,14,15,15,16,17,16,19,17,18,18,19,18,19,20,20,21,20,20,22,21,21,22,23,22,22,23,23,22,25,25,24,25,25,26,25,26,26,25,25,24,23,24,25,24,22,23,24,25,24,24,25,25,26,26,26,26,26,26,27,26,26,27,27,27,27,26,27,27,27,28,26,26,26,26,26,27,27,27,26,27,26,26,26,26,25,24,25,24,23,24,22,23,19,18,19,16,14,15,13,13,14,12,12,11,9,9,6,6,8,6,5,6,6,5,3,6,6,4,3,5,5,5,2,1,0,1,3,4,4,5,6,6,6,6,7,6,8,10,11,7,8,10,9,7,9,10,9,8,10,9,9,11,9,11,12,11,10,10,12,10,9,11,11,10,10,11,10,11,11,12,13,13,13,13,13,12,14,14,15,16,15,16,16,15,17,17,16,17,18,16,16,18,17,16,18,17,18,17,18,18,17,18,18,20,18,19,21,19,19,19,20,20,20,22,21,22,22,22,21,23,21,23,24,23,23,24,25,25,25,25,24,25,26,26,25,25,25,24,25,25,26,24,24,24,23,23,23,21,21,21,20,19,19,19,19,18,17,18,17,17,16,16,15,13,14,15,13,13,14,12,12,12,15,14,13,15,16,15,14,15,16,16,18,17,16,17,16,18,16,18,18,17,18,19,18,20,20,19,20,22,20,19,21,23,23,24,22,24,24,25,26,25,25,25,25,26,25,25,25,24,26,24,24,26,25,26,25,24,25,25,23,23,23,22,22,22,21,22,19,20,20,19,18,18,19,18,17,17,17,14,16,15,15,14,15,14,12,11,11,13,12,13,13,13,15,16,15,17,17,16,17,17,17,16,18,17,18,18,17,19,17,18,17,18,16,16,16,15,16,16,16,13,15,16,12,12,13,14,12,12,14,14,13,14,16,13,13,16,14,15,15,17,14,15,15,14,14,14,13,14,13,12,10,11,9,9,11,12,11,12,11,12,11,13,12,13,13,14,12,12,13,11,13,12,12,12,12,12,14,13,14,14,15,13,13,15,15,14,14,15,16,16,16,16,16,16,17,16,16,17,18,18,21,19,21,21,22,22,20,21,22,22,24,23,24,25,23,25,26,24,25,25,25,24,25,25,24,23,24,24,21,21,23,24,23,24,22,22,22,23,22,21,22,20],[28,28,28,29,28,29,29,28,28,28,27,27,27,27,28,27,28,27,28,28,27,27,28,28,28,28,28,28,28,29,28,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,28,29,28,28,28,28,28,27,27,26,27,26,26,24,23,22,22,21,20,21,20,20,20,20,19,19,18,20,21,22,23,24,23,22,25,24,24,24,25,26,26,25,26,26,26,26,26,26,26,27,27,27,26,27,27,27,26,26,27,27,26,26,26,26,26,26,27,26,26,26,26,26,25,26,26,26,24,27,26,24,26,27,25,25,26,26,25,23,24,25,26,26,26,27,26,26,27,27,27,27,27,26,27,26,26,26,26,26,26,27,26,26,25,25,26,25,25,26,24,24,26,26,25,24,26,25,24,25,25,23,24,24,24,25,24,23,24,25,22,24,24,24,24,22,25,22,23,24,22,23,24,24,23,23,24,24,23,24,22,24,25,24,25,25,25,25,26,26,25,26,26,26,25,25,26,25,23,24,24,22,22,23,22,20,21,21,22,21,22,22,22,20,23,23,20,20,22,21,19,20,22,19,18,20,20,19,19,19,19,20,20,18,18,19,21,18,19,20,22,18,20,22,20,20,22,23,21,21,21,21,23,24,25,24,24,24,24,24,23,21,23,23,20,20,21,21,18,18,19,19,17,18,18,17,16,16,15,15,14,14,13,13,13,12,12,12,12,11,12,11,12,13,12,14,14,13,14,16,15,15,16,17,17,17,18,18,19,18,20,21,20,21,22,22,23,22,23,23,23,23,24,24,24,25,25,26,26,27,26,26,25,26,25,25,24,22,21,23,23,22,22,23,24,24,24,25,24,25,26,26,26,27,28,27,28,28,28,27,28,28,28,27,27,26,28,28,27,28,25,27,27,26,28,27,27,27,26,26,27,24,26,26,25,25,24,23,23,21,19,19,17,17,15,16,13,14,13,13,12,10,9,8,7,6,7,6,5,6,7,5,4,6,6,3,5,5,6,5,4,2,1,0,1,3,5,5,6,5,7,7,7,7,9,9,9,7,9,10,8,7,8,10,9,9,11,10,10,9,10,10,12,11,9,10,11,10,10,11,11,11,10,11,12,12,11,12,13,13,13,14,14,12,14,14,14,16,15,16,14,15,16,17,13,16,17,16,16,18,16,15,17,16,16,15,18,19,17,18,19,22,18,19,21,21,19,20,20,21,20,21,20,20,22,19,22,22,23,24,24,24,25,24,25,26,25,23,25,25,25,24,26,26,24,24,26,25,24,24,25,24,24,25,25,23,23,23,23,21,21,21,19,18,18,18,17,17,16,16,14,14,15,14,13,13,13,12,12,12,14,13,13,14,15,14,14,15,15,14,15,16,16,16,14,17,16,17,17,18,19,19,18,19,20,19,21,21,21,21,23,23,24,25,24,25,25,26,26,26,26,26,25,26,27,26,26,26,25,24,25,27,25,25,25,24,25,25,24,25,24,23,23,22,22,23,22,23,22,21,20,19,20,18,17,17,17,15,16,16,15,13,15,15,14,12,13,13,13,14,14,14,14,15,15,16,16,16,17,15,17,17,16,17,20,19,17,19,20,21,18,18,17,18,17,15,14,16,16,14,15,15,14,13,14,14,13,13,14,16,15,15,16,14,15,16,15,15,16,17,15,14,15,15,14,14,13,16,14,13,10,10,10,10,11,13,13,12,13,12,12,13,13,14,13,14,13,14,12,14,13,12,13,12,11,12,14,13,11,13,14,12,11,14,14,13,14,15,16,15,15,16,16,16,16,14,14,16,18,16,21,19,20,20,22,21,20,22,23,21,24,22,23,23,23,25,25,24,25,26,24,24,24,24,24,23,24,24,21,22,23,24,21,24,21,21,22,23,20,20,22,18],[29,29,29,30,29,29,30,29,29,29,28,28,29,28,29,28,29,27,29,29,28,29,30,29,29,30,30,30,30,30,29,30,30,30,30,30,29,30,30,30,30,30,29,30,30,30,30,29,29,29,28,29,29,29,28,28,28,27,27,28,27,25,24,23,24,22,23,22,22,22,23,19,21,19,22,23,24,24,26,25,24,26,26,24,26,27,27,28,28,27,27,28,28,28,28,28,29,28,29,28,28,29,28,28,28,29,29,28,28,28,29,28,29,29,28,29,27,28,27,28,28,28,28,28,28,28,27,28,28,27,27,28,27,27,26,27,27,28,28,28,28,28,28,28,29,29,28,28,28,28,28,28,28,27,28,27,29,28,28,28,28,27,27,27,27,26,26,28,27,27,27,28,26,27,27,27,25,26,26,27,26,25,25,26,27,25,26,26,26,25,26,26,24,26,26,25,26,26,25,26,26,26,26,27,27,27,27,27,26,26,28,27,26,28,27,27,27,27,27,26,26,28,26,24,26,26,24,23,26,25,21,23,22,24,23,25,23,25,23,24,25,23,24,25,24,20,23,23,20,20,22,22,20,22,21,21,22,22,21,20,20,22,19,20,23,23,19,23,24,21,22,23,24,23,22,25,25,25,26,26,25,26,23,24,25,25,21,23,24,21,20,22,23,19,20,22,21,17,20,20,17,18,18,17,17,17,17,14,16,15,14,15,15,15,12,13,11,12,14,13,14,17,16,16,17,18,18,18,19,21,17,20,19,19,21,22,22,23,24,23,25,25,23,26,26,26,25,27,26,25,28,27,27,26,28,28,28,26,28,26,26,25,24,22,24,26,24,24,23,25,25,23,25,26,26,27,27,27,28,28,28,28,27,27,28,28,28,28,28,28,27,28,28,28,28,26,27,26,27,28,27,27,28,26,27,27,25,27,25,25,26,24,25,24,23,21,21,19,19,17,18,15,16,16,14,13,11,9,8,6,7,9,5,5,9,9,6,6,9,9,6,7,8,8,7,6,4,4,1,0,1,5,4,7,8,8,7,8,8,10,12,12,10,10,11,11,10,10,11,9,8,11,11,9,11,10,12,13,13,11,11,13,12,9,13,14,10,12,13,13,12,16,14,16,18,15,17,16,14,16,15,16,18,17,18,16,16,19,18,16,18,20,18,17,20,19,17,20,19,19,18,20,21,19,19,21,23,19,21,24,23,21,23,23,22,23,25,23,24,23,22,24,25,23,25,26,26,26,27,27,27,27,28,27,28,29,28,28,27,27,27,28,27,28,27,27,26,26,25,25,24,24,24,24,21,21,22,21,19,19,20,19,18,17,17,16,16,17,16,15,15,16,14,16,14,17,16,16,15,19,16,16,18,17,17,18,18,18,18,17,19,19,19,19,20,21,19,20,22,24,21,24,24,24,24,26,26,26,26,25,27,27,28,28,27,27,27,27,28,28,28,28,28,27,27,27,27,28,28,27,27,27,27,26,26,25,26,25,24,24,25,23,23,23,22,21,21,22,19,18,19,19,17,18,18,18,16,16,16,16,13,14,16,16,16,16,17,17,18,19,18,19,18,19,18,20,20,18,20,22,20,20,22,22,23,21,20,19,19,20,18,18,19,19,16,17,18,15,16,18,17,16,17,18,19,18,19,21,18,19,21,19,19,20,19,18,18,18,18,18,18,17,17,17,14,13,12,12,13,15,15,15,16,17,17,17,18,18,17,17,17,17,17,16,16,17,16,16,16,16,15,15,14,14,15,15,13,14,15,16,14,15,17,18,18,18,18,18,16,20,18,18,19,18,20,22,22,23,23,24,22,22,22,24,23,27,23,25,26,25,27,27,26,26,27,26,26,28,28,26,26,26,26,22,24,25,25,23,26,24,25,25,25,23,23,23,21],[30,29,29,29,30,30,30,30,29,29,29,29,29,28,29,28,29,29,28,30,29,29,30,29,29,30,29,29,30,29,29,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,29,29,29,28,28,28,28,28,27,27,28,26,27,26,25,22,22,24,21,22,21,21,22,22,20,20,21,22,21,23,23,24,23,23,24,24,24,25,25,26,25,26,27,26,26,28,27,27,27,27,27,27,27,27,27,27,28,27,28,27,27,26,27,27,27,27,28,27,27,27,26,25,25,26,26,26,26,26,26,26,26,27,26,25,27,26,25,25,26,25,26,25,26,26,26,27,27,27,27,26,27,27,27,26,26,26,25,25,26,27,26,26,26,26,26,25,25,26,25,24,26,25,25,24,26,24,25,25,25,24,24,24,25,24,24,24,25,25,24,25,25,24,24,24,24,23,25,24,24,25,25,24,24,24,24,25,24,26,24,25,25,25,25,25,26,25,26,25,25,25,26,26,25,24,26,24,23,24,24,23,22,23,23,21,22,21,22,22,22,23,22,21,22,23,21,22,23,23,22,21,23,21,22,21,21,22,22,22,21,21,22,22,21,22,22,20,21,23,23,21,22,22,22,23,23,23,23,23,23,23,23,24,24,24,25,22,24,24,23,21,22,22,21,20,22,22,20,20,20,21,20,20,19,18,17,18,17,16,15,15,14,12,13,13,12,11,11,11,11,12,11,12,12,12,14,15,13,17,17,16,18,19,20,17,18,19,19,20,22,22,22,24,22,25,25,24,26,24,25,25,25,25,24,26,26,26,26,27,27,27,26,27,26,24,25,23,22,24,24,22,23,23,24,25,24,25,25,25,26,27,26,27,27,26,27,27,27,27,27,27,27,26,27,26,27,28,26,27,26,27,27,26,28,27,26,28,25,27,27,26,27,26,25,26,24,25,24,23,20,20,18,17,16,16,14,15,14,11,12,11,8,8,6,7,9,5,5,9,7,5,6,7,6,6,7,9,8,7,7,6,4,3,2,0,2,4,4,6,6,7,8,7,9,9,10,8,7,8,7,7,6,9,8,7,9,10,8,10,10,12,13,13,9,10,14,10,9,10,12,9,9,13,10,9,11,13,15,17,14,14,16,12,14,14,15,19,16,19,18,16,19,19,18,19,20,19,17,20,19,19,18,20,19,18,20,20,20,19,21,22,19,21,21,21,22,21,21,21,22,22,23,22,23,21,22,23,23,23,24,24,25,25,25,25,24,26,25,26,26,25,25,26,26,25,26,25,26,24,25,24,24,23,23,24,22,22,22,21,22,21,20,19,19,20,18,17,18,17,15,15,16,15,13,12,14,12,14,14,14,13,15,13,18,14,14,16,17,15,16,18,17,18,17,17,18,19,18,20,20,20,19,21,21,20,22,22,23,22,23,23,24,24,24,25,25,26,26,25,26,26,26,26,26,26,26,25,26,25,25,26,26,26,24,26,26,25,25,25,24,23,24,22,23,23,23,22,21,21,20,20,20,18,18,18,18,16,17,18,14,14,14,14,14,13,14,15,13,14,14,14,14,17,14,15,18,17,18,16,19,19,19,19,21,19,18,21,21,21,19,18,17,18,18,16,17,18,17,14,15,17,13,13,15,14,13,14,16,15,16,16,18,15,16,19,18,16,19,18,16,17,17,14,15,16,15,14,12,12,11,10,10,11,12,13,13,13,13,13,14,14,14,14,14,16,15,14,14,14,14,13,14,12,12,14,13,12,14,14,13,12,12,14,14,12,13,17,17,18,17,17,17,16,19,16,17,19,17,18,22,21,22,23,25,24,21,23,25,24,27,23,26,27,24,27,27,27,27,28,28,27,28,27,26,25,27,26,22,23,26,25,24,25,24,24,25,23,22,24,24,20],[29,29,28,29,29,29,30,29,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,29,29,28,29,28,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28,27,27,27,26,26,26,25,24,23,23,22,20,19,20,17,18,18,17,18,18,18,17,17,17,18,19,19,20,20,22,20,20,23,22,21,23,22,22,23,24,23,23,24,24,24,24,23,24,25,24,24,24,24,24,23,23,24,24,22,23,24,23,24,24,23,24,22,22,21,23,23,22,22,24,23,21,23,23,22,22,23,21,21,21,21,21,22,22,23,23,23,24,24,24,23,23,24,22,23,23,23,23,21,22,23,24,23,23,21,22,22,21,21,23,22,21,22,22,21,21,22,21,21,21,22,20,20,21,21,21,21,20,20,21,20,20,21,21,22,19,20,20,20,20,19,20,21,20,19,21,21,22,21,23,20,21,22,22,22,23,22,21,22,22,22,22,23,22,22,21,22,22,21,20,21,20,19,20,20,17,18,17,18,18,18,18,18,17,18,19,17,18,18,19,18,17,19,16,17,17,18,18,17,17,17,18,18,18,17,17,18,18,16,18,19,17,18,19,20,18,19,20,20,20,19,19,21,20,21,22,20,21,22,21,21,20,21,19,19,18,18,19,17,16,18,17,16,17,15,15,14,14,14,13,13,14,12,11,12,12,10,11,12,10,10,9,10,10,10,9,11,13,12,13,13,13,14,14,15,14,15,15,16,17,17,18,19,20,19,20,21,20,22,21,22,22,21,22,22,24,24,26,25,26,26,27,25,27,25,23,24,22,22,22,23,22,23,23,24,25,24,27,25,26,27,27,27,27,28,28,28,28,28,28,28,28,28,27,28,27,28,28,26,28,26,26,27,26,27,27,26,28,25,26,26,25,26,25,25,24,23,23,21,21,19,18,17,15,13,13,11,10,10,9,8,9,5,5,4,4,4,4,4,5,4,3,4,5,5,6,6,6,5,6,6,5,5,4,3,1,0,1,2,2,4,6,6,5,7,5,5,5,5,5,4,4,4,5,5,5,5,6,6,8,7,9,10,9,8,9,9,9,8,9,9,8,9,10,9,9,10,10,12,11,12,12,12,12,13,13,14,14,15,14,14,14,15,15,14,15,16,16,15,15,15,15,15,15,16,16,16,18,17,17,18,20,18,17,19,19,19,17,17,19,18,20,18,18,20,18,20,18,21,21,20,22,22,22,22,22,22,21,21,22,22,22,23,24,22,21,23,23,21,23,23,22,21,22,21,21,21,22,21,20,20,19,19,18,16,16,16,15,15,14,14,14,14,14,12,11,13,12,10,10,13,13,11,13,14,14,12,13,14,13,14,14,14,15,13,14,15,16,16,16,18,18,17,17,17,18,18,19,20,20,19,20,20,21,21,22,22,23,23,23,23,22,22,24,24,23,23,22,24,21,23,24,22,22,21,22,22,21,22,21,20,19,20,19,20,20,19,20,19,18,18,19,17,16,15,15,15,14,15,14,13,13,14,13,10,10,10,10,10,12,12,13,13,14,15,14,15,14,15,14,15,16,15,15,17,17,15,17,18,16,16,15,15,14,14,14,15,14,14,12,14,13,11,11,13,13,10,13,13,14,14,13,16,12,13,14,13,14,13,14,12,13,12,13,12,12,12,13,10,9,8,6,7,7,8,10,11,10,12,11,12,13,13,12,13,13,12,12,11,12,10,10,11,10,9,9,11,10,9,11,11,10,12,13,12,12,11,13,14,14,14,15,14,14,15,14,14,15,15,17,18,19,19,20,22,20,20,22,21,21,24,22,24,23,24,26,26,24,24,26,26,25,27,25,25,24,26,24,22,23,25,26,23,25,22,22,24,22,21,22,21,19],[29,29,29,29,29,30,29,29,29,29,29,29,29,28,29,28,29,29,28,29,29,28,29,29,28,29,29,29,29,29,28,29,30,30,29,30,29,29,30,29,30,29,29,29,29,29,28,27,28,27,27,27,27,27,26,26,26,25,24,25,22,21,18,18,17,16,17,17,17,17,17,17,16,16,16,18,18,18,17,18,18,18,18,18,18,18,19,19,20,20,20,21,21,22,20,22,22,21,22,22,23,22,22,23,22,22,22,22,22,20,21,21,22,23,22,21,22,19,20,19,19,20,20,19,21,20,20,21,21,20,20,21,20,19,20,20,20,21,20,21,22,21,21,23,21,21,21,21,20,20,20,19,20,20,20,20,21,21,21,18,20,18,19,19,20,19,19,20,20,20,19,20,19,19,19,18,19,18,19,18,19,18,18,19,18,18,19,18,18,18,18,18,18,18,19,18,18,19,18,18,19,19,20,19,21,19,20,20,19,19,20,20,18,20,20,19,20,19,19,18,18,20,18,16,18,18,17,17,18,18,17,18,18,18,17,17,19,16,16,16,18,17,17,18,19,20,17,18,17,18,16,17,17,18,17,16,16,15,15,16,17,17,16,16,17,16,15,16,16,16,16,16,16,15,16,17,17,18,18,18,18,18,18,17,18,16,15,16,16,15,16,16,17,15,15,16,16,16,15,13,15,12,13,13,11,12,11,9,8,9,9,9,8,8,9,7,7,7,8,8,8,9,10,10,12,12,11,13,12,12,13,13,15,15,16,16,19,18,19,18,19,20,21,20,20,21,21,21,22,24,23,25,25,24,26,25,25,25,26,24,23,23,22,22,23,23,23,22,24,25,25,24,27,25,26,28,28,27,28,28,28,27,28,28,28,28,28,28,27,28,27,28,28,27,28,26,26,28,27,27,27,27,28,26,26,27,26,26,25,25,25,24,23,22,22,19,18,17,12,12,10,11,10,10,8,8,6,5,5,4,4,5,3,2,5,4,3,3,5,4,4,5,5,5,5,6,5,5,4,3,2,1,0,1,3,3,4,5,4,5,5,5,5,3,4,5,4,4,6,4,4,5,7,5,5,6,6,9,8,6,7,9,7,6,9,9,6,7,8,8,8,9,10,12,12,12,12,11,11,11,13,12,13,14,14,14,14,14,13,14,15,15,13,13,14,13,15,13,14,15,14,14,15,14,14,16,16,15,16,16,15,16,15,15,15,16,16,16,16,17,17,18,17,17,18,18,18,18,20,21,20,20,21,20,20,21,20,20,20,19,19,20,20,19,19,19,18,17,18,18,17,18,17,17,16,16,15,15,15,14,14,14,15,13,12,11,11,12,11,10,10,11,10,9,9,11,11,10,10,12,11,10,11,12,11,12,13,12,13,12,13,13,15,15,15,14,16,14,16,16,16,17,16,16,17,17,18,18,17,18,20,20,20,20,19,19,20,20,21,21,21,21,20,22,20,20,22,20,20,19,20,20,19,18,19,19,17,18,18,18,17,17,16,15,16,16,15,15,16,12,12,14,13,12,12,10,10,11,10,9,7,8,9,9,10,10,11,11,13,12,12,13,12,13,13,13,13,14,13,15,14,14,15,15,15,15,14,13,12,13,11,12,12,13,9,11,12,9,10,11,10,9,10,11,11,11,11,12,10,10,13,12,12,12,12,11,10,11,11,10,11,12,10,8,10,6,7,5,7,8,8,9,9,9,9,10,10,11,10,11,10,11,10,9,10,9,8,9,10,8,9,10,9,9,10,10,9,11,11,11,11,13,12,13,14,13,14,14,14,14,13,15,15,16,17,18,18,19,20,20,21,19,22,22,21,24,22,23,25,23,25,25,25,24,26,25,25,25,25,24,25,25,25,22,23,25,25,23,24,22,22,23,22,21,21,22,20],[29,29,28,29,29,29,29,29,28,28,28,28,29,27,28,28,28,28,28,28,27,28,28,28,28,28,28,28,28,28,28,29,29,29,28,29,28,29,29,29,29,29,28,28,29,28,28,27,28,27,28,27,26,27,26,25,26,25,24,24,21,20,18,17,17,15,16,16,17,16,17,15,15,14,15,17,17,17,17,18,18,17,18,18,18,18,20,21,21,21,21,21,22,22,21,21,21,22,22,22,23,22,21,22,22,21,21,23,22,21,22,22,22,23,22,22,22,21,20,20,21,19,20,21,21,19,20,21,21,20,21,22,19,20,20,21,21,21,21,20,22,21,22,22,21,22,22,21,20,21,20,20,20,19,20,20,22,21,21,20,21,18,19,20,20,19,18,20,18,19,19,19,18,19,19,19,18,19,19,18,18,18,19,18,18,17,18,18,17,18,17,19,17,19,18,18,20,19,18,18,19,20,19,19,20,18,20,20,19,20,21,20,19,21,20,19,20,21,19,18,18,19,18,17,18,18,16,17,18,17,16,18,18,18,17,19,19,17,17,17,17,18,17,17,17,18,16,16,16,17,16,15,16,16,16,15,15,15,17,14,15,15,14,14,16,15,13,15,16,15,14,16,18,16,16,16,17,17,17,19,18,19,18,18,17,16,15,16,15,14,15,15,15,14,14,16,16,13,14,12,13,12,12,11,10,10,10,8,8,9,9,8,8,8,7,7,7,7,8,8,7,9,10,9,11,12,10,12,11,13,12,14,14,14,15,16,16,17,20,17,19,19,19,20,20,21,21,21,22,21,22,23,24,23,25,26,25,24,26,24,22,22,21,20,21,22,20,21,21,22,22,22,25,24,24,25,25,26,26,28,27,27,27,27,27,27,27,27,26,27,26,28,27,26,27,24,27,27,26,27,26,26,28,24,26,26,25,24,25,24,24,23,23,22,21,19,16,16,11,11,10,9,9,9,7,7,6,5,4,3,4,4,4,3,3,4,3,4,4,4,4,5,6,5,4,6,5,4,4,4,3,2,1,0,1,2,3,4,4,5,4,6,4,3,4,5,4,4,5,5,4,5,5,4,5,5,7,7,7,6,6,8,6,5,7,7,6,6,8,8,8,9,9,11,11,11,11,10,10,10,10,11,12,11,13,11,11,13,12,11,13,13,13,11,12,12,12,12,12,13,12,13,13,13,13,14,15,14,15,16,15,15,15,15,15,16,18,16,16,17,16,17,17,17,18,18,18,20,19,20,20,20,20,20,20,21,19,20,20,18,19,20,20,19,20,20,19,18,19,18,17,18,17,17,14,16,15,14,14,13,13,13,12,12,11,10,10,11,10,9,9,10,9,8,8,10,10,9,10,11,10,10,10,11,10,10,12,11,11,10,11,12,13,12,13,14,14,13,15,15,14,16,16,16,16,17,17,17,18,18,20,20,21,21,19,19,19,20,21,22,20,21,20,21,20,20,22,20,19,20,20,21,19,19,19,18,17,17,16,18,17,16,15,15,15,14,13,14,14,12,12,12,11,10,11,10,9,10,10,8,7,7,8,8,9,9,10,9,11,11,10,11,11,12,12,12,12,12,12,14,13,14,14,14,15,13,13,12,12,12,11,10,11,11,9,10,10,9,9,10,10,9,10,10,11,12,11,12,10,11,11,12,12,12,11,11,12,11,11,10,11,11,10,7,7,6,6,6,6,7,8,9,10,9,9,9,10,11,10,10,10,12,10,9,9,8,8,8,9,8,8,9,9,8,9,9,8,9,10,10,9,10,11,12,12,13,13,13,13,14,13,15,15,16,17,19,19,19,20,22,21,20,21,23,21,25,21,24,24,23,26,26,24,26,27,26,24,27,26,26,24,26,25,22,23,25,26,23,24,22,22,24,25,21,22,24,21],[27,28,27,28,28,28,28,27,28,27,26,26,27,26,27,27,27,26,27,26,26,27,27,27,27,27,27,27,27,28,27,28,28,28,28,28,29,27,29,28,29,28,28,27,28,27,27,26,27,27,27,26,26,26,25,24,24,25,23,22,20,19,18,17,17,14,15,15,15,15,15,14,14,14,15,15,17,16,17,17,20,18,19,20,19,20,20,20,20,22,22,20,22,22,21,20,22,21,22,23,22,21,21,22,22,20,20,21,22,20,20,21,21,23,21,20,21,20,20,18,20,20,20,19,22,22,19,20,22,20,19,21,20,20,19,20,20,21,20,20,21,21,21,22,22,22,21,22,21,21,20,21,21,19,21,22,22,21,21,18,19,21,19,19,21,20,19,20,20,20,18,19,20,18,18,20,18,17,18,19,19,19,17,18,20,18,18,19,19,19,17,20,18,19,18,18,18,19,18,18,20,19,19,18,20,17,20,20,18,21,20,20,20,21,21,20,21,21,21,20,19,20,20,19,18,18,17,18,17,16,16,17,15,16,16,15,16,15,14,15,16,15,15,16,16,15,13,16,14,14,15,14,14,15,14,15,16,15,14,14,14,15,13,14,16,16,13,15,17,16,15,17,18,16,16,16,16,18,17,19,20,18,19,19,19,18,17,17,17,15,15,16,15,13,14,14,13,12,13,12,12,12,10,11,11,10,10,9,8,8,8,7,8,7,6,5,5,6,7,7,8,9,10,10,10,12,11,11,12,13,13,12,13,14,15,16,16,16,18,17,18,19,18,20,19,19,19,20,20,19,21,22,22,21,23,24,24,22,24,23,21,22,20,20,21,21,20,20,21,22,23,22,24,24,24,25,25,26,26,26,27,27,26,27,27,27,26,26,25,25,25,26,26,24,26,24,25,25,25,26,25,25,26,23,24,25,23,23,23,23,22,21,22,19,18,16,14,14,12,11,11,9,10,9,8,8,7,5,4,3,4,4,3,3,4,4,4,4,4,3,3,4,4,4,4,5,5,6,4,4,4,3,2,1,0,1,3,2,2,3,3,4,3,3,4,3,3,3,4,4,4,4,5,4,5,5,7,6,7,6,6,7,6,6,7,7,7,7,8,9,8,8,9,10,11,11,11,10,10,10,10,12,11,13,11,11,11,12,12,11,12,12,12,12,12,12,12,12,12,13,13,13,14,13,14,14,16,14,15,16,16,16,15,14,17,16,17,16,16,19,17,18,17,18,19,19,21,21,20,20,21,20,20,20,18,19,19,20,20,19,18,20,20,19,19,22,19,19,20,20,18,19,19,18,17,17,15,14,12,13,12,12,12,12,11,10,11,10,10,9,10,9,10,8,9,9,11,10,10,10,11,11,10,10,11,11,11,11,11,10,12,12,13,13,13,15,14,13,14,15,15,15,16,16,16,16,18,18,18,19,20,20,19,20,21,21,19,19,20,22,20,20,20,22,18,20,22,18,19,19,20,20,19,18,20,19,16,18,16,18,16,17,16,15,15,15,13,14,13,12,11,12,11,10,10,10,10,9,10,9,8,9,9,10,10,10,12,10,11,12,12,12,11,12,12,12,12,12,12,13,13,12,14,14,14,13,13,12,11,11,11,10,11,11,10,9,9,9,9,9,10,10,12,10,11,10,11,12,10,11,11,11,12,12,10,10,9,10,9,11,12,10,9,8,8,7,6,6,8,7,9,8,9,10,9,10,11,11,11,11,11,11,10,11,10,9,9,10,9,8,9,9,10,8,10,10,10,10,10,10,10,10,11,12,12,12,13,12,14,14,13,15,15,16,15,18,18,18,18,19,20,20,19,21,20,23,21,23,23,22,25,25,24,23,24,24,24,24,23,24,22,24,23,22,23,23,23,22,24,21,21,22,22,22,20,22,20],[29,28,28,28,29,29,29,29,29,28,28,27,28,28,28,27,28,28,27,28,28,27,27,28,27,27,28,27,27,28,27,28,29,29,27,28,28,28,28,28,29,28,28,28,28,28,27,27,28,26,26,26,25,25,25,24,23,23,23,22,20,19,16,16,15,14,16,14,16,14,16,14,13,13,14,15,16,15,17,16,16,17,18,17,17,19,19,19,21,20,21,21,21,21,22,21,21,21,22,23,22,22,22,23,22,22,22,22,22,21,22,22,23,22,21,21,21,20,20,18,21,20,19,20,21,21,19,22,22,20,20,22,19,18,20,20,20,21,21,21,21,21,21,23,21,22,22,21,20,21,21,20,20,19,21,21,22,21,22,20,20,18,18,20,20,18,18,20,18,18,19,20,17,17,19,19,16,18,19,18,19,16,17,19,18,16,18,19,18,18,18,20,17,18,19,18,19,20,19,18,20,19,19,19,21,19,20,20,20,21,21,21,18,22,21,19,21,21,20,18,18,20,18,15,18,17,15,15,17,15,13,15,15,15,17,17,16,15,15,16,15,15,14,15,15,15,14,15,13,14,15,13,12,14,14,15,15,15,14,14,14,14,13,14,17,13,14,15,16,14,16,16,16,15,15,16,16,18,17,19,17,18,16,16,17,16,14,14,15,13,13,13,13,12,13,13,13,12,12,12,12,11,10,11,11,10,9,9,8,9,8,9,9,8,7,7,6,7,9,8,9,8,10,9,10,11,11,11,11,13,12,13,14,15,15,14,17,16,17,18,17,18,20,19,18,19,20,20,20,21,22,23,24,23,25,24,25,25,26,24,24,23,21,21,22,23,21,21,22,23,24,22,26,24,25,26,26,27,27,27,27,27,27,27,27,28,28,27,26,27,26,27,27,26,27,25,26,27,26,27,26,26,27,25,25,26,25,25,24,25,24,23,22,21,19,18,16,16,12,11,10,10,10,9,8,9,7,5,5,4,5,4,3,4,5,4,3,5,4,3,3,4,4,3,3,5,5,5,4,4,5,3,3,2,1,0,1,2,2,2,2,4,3,2,4,5,3,3,5,4,3,5,6,4,7,6,8,8,9,7,7,8,7,6,7,8,7,7,8,8,9,9,9,10,11,10,10,11,9,11,10,12,12,11,12,11,11,12,12,11,12,13,12,11,12,13,11,12,12,11,12,14,14,12,13,13,14,13,14,16,14,14,13,13,13,15,17,16,16,16,16,16,18,17,18,18,18,20,20,20,21,21,21,20,20,21,20,21,21,19,19,21,20,20,19,20,19,17,18,17,16,16,15,15,14,14,13,12,13,13,11,12,12,12,12,11,11,10,11,10,10,9,9,9,9,10,11,11,10,10,11,11,11,11,11,12,11,12,11,11,13,12,12,12,13,12,13,13,13,14,14,15,15,14,14,15,17,18,17,17,20,20,20,20,19,19,19,19,21,21,21,20,20,22,20,20,23,20,19,19,21,20,18,19,18,17,18,16,16,15,16,14,14,13,14,13,12,14,13,11,12,12,11,11,11,11,10,10,10,10,8,8,9,10,9,10,11,11,11,11,12,12,12,11,12,12,11,12,13,13,12,13,13,13,14,13,13,12,12,12,12,11,11,13,10,10,10,9,9,10,11,9,10,10,11,10,11,10,10,10,12,11,12,12,10,10,11,11,10,10,11,10,11,8,7,6,6,6,7,7,8,8,8,8,9,9,10,11,10,12,10,12,10,9,10,10,9,9,11,9,10,9,10,9,10,10,10,10,10,10,11,10,11,12,12,13,13,12,12,14,13,13,14,15,16,17,17,20,19,20,20,20,21,20,21,23,22,24,24,23,25,25,25,25,25,25,24,25,25,26,24,25,25,22,22,24,24,23,23,21,22,22,23,21,20,21,19],[28,28,27,28,28,28,27,28,27,26,26,26,27,26,26,26,26,26,26,26,26,25,26,26,26,26,27,26,27,27,26,27,28,27,27,27,27,27,28,28,28,27,27,27,27,27,26,26,26,26,25,25,24,24,23,23,22,22,21,20,19,18,17,15,15,14,14,15,14,14,13,12,13,13,15,15,16,16,18,17,17,18,18,18,18,19,20,19,20,21,21,20,21,20,20,21,20,21,21,21,21,21,21,21,20,22,21,20,21,22,22,21,22,22,20,20,20,19,19,21,21,20,19,19,20,21,18,20,21,19,19,21,20,18,18,19,20,21,21,20,21,20,21,21,22,21,20,21,21,20,20,20,20,18,21,20,22,20,20,19,19,20,20,19,19,20,18,19,20,19,18,20,18,18,18,19,18,18,19,18,20,17,17,18,19,17,17,19,19,18,17,19,18,19,17,19,20,19,18,18,20,19,19,18,19,18,19,19,19,21,20,18,18,21,20,20,20,20,19,19,18,20,19,17,17,17,17,17,17,17,15,15,14,15,15,16,15,16,15,17,16,15,14,16,15,14,14,16,14,13,15,15,14,13,14,16,16,16,14,14,15,14,14,14,16,16,14,15,17,16,16,16,18,16,17,17,17,19,18,18,19,19,18,18,18,18,17,17,16,16,15,15,15,14,14,13,13,13,12,11,12,11,11,11,11,9,9,9,8,9,9,9,8,7,7,7,7,7,7,8,8,9,8,10,10,10,10,11,11,11,12,12,12,14,13,17,17,16,18,19,19,18,17,20,19,18,18,20,19,19,21,21,21,23,23,23,24,23,22,22,21,21,19,19,20,20,19,20,20,21,21,21,23,22,23,24,24,24,25,26,26,26,26,26,26,26,26,25,24,25,24,25,25,24,25,23,25,24,23,24,23,24,25,23,22,24,23,22,22,22,22,20,21,18,18,16,15,14,11,11,10,9,9,8,7,7,6,6,5,4,5,5,4,4,5,4,3,4,4,4,4,4,4,4,4,4,5,6,6,5,5,5,4,2,2,1,0,1,2,2,3,3,3,3,4,3,3,3,4,4,3,6,5,5,6,6,7,8,8,7,7,7,8,7,7,8,9,8,8,9,9,10,11,11,10,11,11,11,9,10,10,12,11,11,11,12,11,12,13,12,13,13,13,13,12,14,12,13,14,13,13,14,15,14,14,14,15,15,15,16,16,17,16,16,16,16,19,16,17,18,17,18,16,20,19,18,20,20,19,20,20,20,18,21,20,20,20,20,20,18,19,20,20,19,18,21,18,18,19,19,17,17,18,17,16,15,16,15,14,13,13,14,12,12,12,12,10,10,10,10,9,9,9,10,10,10,11,12,10,12,12,11,11,12,12,11,12,12,12,13,12,12,13,13,13,14,15,13,14,15,15,15,16,16,16,16,17,18,17,19,19,19,19,20,20,20,20,18,19,21,19,18,19,21,19,20,22,20,19,20,19,20,17,19,20,18,18,17,15,15,16,16,16,15,15,14,14,14,13,12,12,13,11,11,12,10,10,10,10,11,9,10,10,11,10,11,11,10,12,12,11,12,12,12,12,12,12,13,12,13,14,13,13,13,13,12,13,11,11,11,11,10,11,11,9,10,10,9,9,9,10,10,10,10,11,11,12,12,10,11,12,11,12,11,11,11,10,10,10,10,10,9,9,8,7,5,6,5,7,7,9,9,9,10,9,9,11,11,11,12,11,12,11,12,11,11,11,10,11,11,11,10,11,11,10,11,11,11,10,11,10,10,11,12,12,13,14,13,14,15,15,16,14,16,16,17,17,18,19,20,19,18,19,20,19,23,19,22,23,23,25,25,23,24,24,24,24,23,23,24,20,23,23,20,20,23,23,22,23,21,21,22,24,21,20,21,20],[27,27,27,27,27,28,28,27,27,27,26,26,26,26,26,26,26,25,27,26,26,26,26,26,27,27,27,27,27,26,26,27,27,28,27,27,27,27,28,27,27,26,26,27,28,27,26,26,26,25,26,25,24,25,25,23,22,24,22,20,19,18,17,15,15,14,15,14,14,14,14,14,15,15,14,16,17,17,19,17,18,19,18,19,20,19,21,20,20,21,21,20,20,21,20,20,22,20,20,21,21,21,20,21,21,21,21,21,20,21,22,21,21,23,21,20,20,19,20,20,21,21,19,20,20,21,19,20,21,20,20,22,21,19,19,21,20,21,21,20,21,21,20,21,22,21,20,21,21,20,21,22,21,20,20,21,21,20,20,19,19,20,18,19,21,20,18,20,21,18,18,20,20,19,19,20,18,18,19,18,20,19,20,20,20,18,19,20,20,19,19,20,20,20,19,19,20,21,19,20,20,20,20,18,19,18,20,20,20,22,21,19,19,21,21,21,22,21,20,19,20,20,20,18,20,18,19,17,18,17,18,17,15,16,16,17,16,16,15,17,18,16,15,18,17,17,16,17,16,16,16,15,17,14,15,17,17,18,16,16,16,16,16,16,17,16,16,17,18,18,18,17,19,16,17,18,18,19,19,19,19,20,19,19,18,18,17,18,18,16,17,15,16,17,16,15,14,14,13,13,15,13,12,11,11,10,10,9,9,9,10,9,9,8,8,9,7,7,8,8,8,10,9,10,11,10,11,12,11,12,11,13,13,11,14,16,16,15,18,17,19,19,17,19,19,18,18,21,19,19,21,23,21,21,23,23,23,22,22,22,20,20,20,19,19,20,20,19,20,21,21,21,24,22,24,25,24,24,25,25,25,26,25,25,25,26,26,26,25,25,23,25,24,24,25,22,25,24,24,25,24,24,25,23,23,24,23,22,23,23,21,21,21,18,18,16,15,14,11,10,10,8,10,9,8,6,6,6,6,6,5,5,4,4,5,3,3,5,4,3,3,5,3,2,3,5,5,5,4,5,6,5,4,3,3,1,1,0,1,2,3,3,2,2,4,3,3,4,5,4,4,6,6,6,6,7,8,9,9,8,9,9,9,8,9,9,8,10,10,10,9,11,11,12,12,12,12,12,11,11,12,12,12,12,12,13,13,13,13,14,13,15,13,15,14,15,14,14,15,13,14,17,16,14,15,16,17,15,16,17,17,17,16,16,17,16,19,17,17,19,17,19,18,20,20,19,20,20,19,18,20,19,18,19,20,20,19,20,20,19,18,20,20,20,20,21,19,19,21,20,18,17,19,18,17,17,17,15,16,15,14,15,15,14,13,12,12,12,12,11,11,10,11,10,11,10,13,12,12,12,13,11,13,13,12,13,14,13,12,12,14,14,15,13,13,14,15,14,15,16,16,15,17,15,16,16,18,18,18,20,19,20,19,19,20,20,20,19,19,20,19,19,19,21,19,20,21,20,20,20,20,21,19,18,19,19,18,18,16,16,17,17,17,16,15,15,15,14,16,13,13,14,13,12,12,11,11,11,11,10,9,9,9,11,10,10,10,11,11,10,12,13,12,13,11,13,13,12,12,14,14,12,13,14,14,14,13,14,13,12,11,11,12,12,9,11,11,9,9,9,11,8,10,11,10,8,11,12,8,10,13,12,10,12,12,8,10,12,10,9,11,10,10,9,6,6,6,6,7,6,9,8,7,8,8,8,11,10,10,12,12,14,10,11,12,10,11,12,11,10,11,11,12,11,12,12,11,13,12,12,13,12,12,13,14,14,15,15,16,16,15,15,16,18,17,20,19,20,20,22,22,20,20,23,22,26,21,25,23,24,26,25,24,24,26,25,24,26,25,25,23,25,24,22,21,24,25,22,24,21,21,24,23,21,20,21,20],[29,29,29,29,29,30,29,29,29,29,28,28,29,28,28,28,28,27,28,28,27,27,28,28,27,27,28,27,28,28,27,28,28,29,28,29,28,28,29,28,29,28,28,28,29,28,28,27,27,27,26,26,25,24,24,23,23,23,22,21,19,18,15,14,13,12,12,12,11,12,11,11,10,11,11,12,13,13,14,12,14,14,15,14,14,17,17,17,18,18,17,18,19,19,19,19,18,18,19,19,19,20,18,20,19,20,19,20,19,19,20,20,20,20,19,19,18,19,18,17,19,18,17,17,20,18,16,19,18,18,17,19,17,18,17,18,17,20,18,19,21,19,19,20,18,19,18,19,18,18,19,18,18,16,17,18,18,19,18,17,16,17,15,17,17,15,15,17,17,17,16,16,15,15,16,17,15,16,16,16,17,15,16,17,17,15,17,16,16,16,14,18,15,18,15,16,17,17,16,16,17,16,17,17,17,16,16,17,18,17,18,18,16,19,19,17,19,18,18,15,16,18,17,14,16,16,13,13,14,13,11,12,13,12,14,13,13,14,13,14,13,12,12,14,13,13,12,13,12,12,14,11,11,11,12,13,14,14,14,13,11,13,12,12,14,12,12,14,13,12,13,15,14,13,15,15,15,15,16,16,15,16,14,15,15,14,12,12,13,12,11,10,12,13,11,11,11,11,11,10,10,9,9,9,8,8,8,7,7,8,7,7,8,7,6,7,5,6,7,5,6,6,6,7,8,8,7,8,9,9,8,10,11,10,12,14,15,14,17,17,18,18,18,19,20,19,19,20,22,20,22,24,23,23,25,25,25,24,24,24,22,23,20,20,21,23,21,20,24,23,23,22,24,25,25,26,26,27,27,27,27,27,27,27,27,27,27,27,25,27,25,28,26,26,27,24,27,26,26,27,25,27,27,23,25,26,24,24,25,24,24,23,22,21,19,16,14,12,9,7,7,5,6,5,4,4,4,4,4,3,4,3,3,3,3,2,2,2,3,2,2,3,2,2,2,3,3,4,3,4,4,3,3,3,2,1,1,1,0,1,1,2,2,1,2,2,2,3,3,3,3,4,4,4,4,4,5,6,7,5,6,7,8,6,7,7,7,7,7,8,8,8,8,9,10,10,10,11,9,10,9,10,10,11,10,11,11,10,10,10,11,11,10,10,12,10,11,12,11,10,11,11,12,10,11,11,12,12,11,14,11,12,11,11,12,13,15,15,14,15,14,14,14,14,15,15,14,15,15,16,18,17,17,16,17,18,17,18,17,16,16,18,17,16,15,16,16,14,15,14,14,13,13,13,13,11,11,11,12,10,10,11,10,10,10,10,9,9,9,10,8,8,9,9,9,9,9,9,9,9,9,9,9,10,10,11,11,10,10,10,11,10,12,11,10,11,12,11,10,11,11,11,13,11,12,12,12,15,14,14,15,17,17,16,16,16,16,16,17,18,17,18,17,18,17,18,19,17,17,17,16,16,17,15,14,15,14,13,12,12,11,11,11,11,11,10,11,11,10,9,9,10,9,9,9,8,7,8,8,7,7,7,7,9,8,7,8,8,8,8,10,10,10,9,9,9,9,10,9,10,11,9,11,10,10,10,9,8,9,8,8,8,9,8,7,7,8,6,6,7,7,6,8,8,8,7,9,9,6,7,9,8,7,8,8,6,7,7,7,6,6,7,6,5,4,4,4,4,4,5,6,5,5,6,6,6,8,9,7,9,9,10,9,7,9,9,7,9,8,9,8,9,10,8,9,10,9,9,9,10,10,9,10,11,12,13,12,12,12,14,12,13,14,14,15,16,16,18,20,21,20,18,20,21,21,23,22,24,23,22,26,25,23,23,24,23,23,24,24,22,21,24,24,20,19,24,24,23,24,22,22,23,23,22,21,23,21],[28,28,28,28,28,28,28,28,28,27,26,26,27,27,27,27,27,26,27,26,26,26,26,26,26,27,27,27,27,27,25,28,28,28,27,28,28,28,28,28,27,27,26,27,27,27,27,26,25,25,25,24,24,24,22,21,21,22,20,18,17,15,14,13,12,11,10,11,11,10,10,10,10,10,11,12,12,12,14,12,14,15,13,15,14,15,16,15,16,17,16,16,17,16,18,16,16,16,17,17,17,18,17,16,17,18,18,17,18,19,20,18,17,17,17,17,16,18,16,17,18,16,15,16,17,16,14,17,16,15,16,17,16,15,16,16,17,16,16,17,15,16,18,17,16,16,16,16,16,17,17,17,17,15,16,16,16,16,16,15,16,16,14,14,16,14,14,15,16,14,14,15,14,14,14,16,14,14,15,14,16,15,14,14,15,14,13,15,15,14,13,15,15,14,14,14,17,15,14,15,16,15,15,15,15,15,17,15,15,17,17,14,14,17,16,15,15,16,15,15,15,16,14,14,15,15,14,14,14,13,11,12,11,12,12,13,13,13,12,13,13,11,11,13,12,12,12,13,12,11,12,12,12,12,12,13,13,14,13,13,11,12,11,13,12,13,13,12,12,12,13,13,13,13,13,13,13,14,14,14,13,13,13,13,13,13,13,13,13,12,11,11,12,12,12,11,11,11,10,9,9,8,9,8,7,7,8,6,6,7,7,6,8,7,6,6,5,5,7,6,5,6,7,7,8,8,7,8,8,8,8,9,9,8,11,11,12,13,15,15,17,16,15,19,18,17,19,20,18,17,20,22,21,20,24,23,23,22,23,22,21,21,20,20,21,21,21,20,22,22,22,22,22,23,24,24,25,25,26,26,25,26,25,25,25,25,25,25,24,25,24,25,24,23,25,22,25,24,23,25,23,24,26,22,24,25,23,23,24,22,23,22,21,18,17,15,13,12,9,7,6,5,7,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,2,2,1,1,0,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,5,5,7,6,5,6,7,6,6,6,7,6,7,8,7,7,8,9,10,10,9,10,10,9,9,9,9,10,10,10,10,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,11,11,10,11,11,12,12,12,12,12,12,11,10,11,13,15,13,13,14,13,13,13,15,15,14,15,16,15,15,16,15,14,15,17,18,16,17,17,14,14,16,15,14,15,15,14,15,13,13,12,13,14,13,12,12,12,11,11,10,11,10,10,9,9,8,7,8,8,7,8,7,7,7,7,8,8,8,8,8,8,8,9,9,8,8,9,9,9,8,9,9,10,9,9,10,10,9,10,10,10,10,12,11,11,12,12,13,13,15,15,16,16,15,16,15,15,15,15,17,16,16,15,17,15,16,17,16,16,16,16,16,15,15,15,14,14,13,12,11,11,11,11,11,11,11,10,10,10,9,9,9,8,8,8,7,7,7,7,6,6,6,6,7,6,6,7,7,8,7,8,7,8,7,7,8,8,8,8,9,9,8,9,9,9,8,8,8,8,8,7,7,7,7,6,6,6,5,6,6,6,6,6,6,7,6,8,8,6,7,8,7,8,7,7,6,6,7,6,5,7,6,6,5,4,4,4,4,5,5,5,6,5,6,6,6,8,8,7,8,8,9,7,7,8,7,7,7,7,7,7,7,8,8,7,8,8,8,9,9,9,9,9,10,11,12,11,12,12,13,12,12,14,13,13,17,15,18,19,20,20,17,19,19,19,22,19,22,21,21,25,24,22,23,23,22,22,24,23,23,21,24,22,20,18,22,22,19,21,20,19,21,20,18,18,19,19],[28,28,27,27,28,28,27,27,27,25,25,25,26,26,26,26,26,25,25,26,26,26,26,27,26,26,26,26,26,27,26,26,27,27,25,27,27,27,27,27,27,27,27,26,27,26,26,24,25,23,24,24,23,23,24,22,21,22,21,18,16,16,14,12,11,10,10,10,9,10,9,9,8,8,10,10,11,12,13,11,11,13,13,11,13,15,14,14,16,16,15,17,17,16,17,16,17,17,17,17,17,17,17,17,17,19,19,18,17,20,19,20,19,18,18,18,17,18,16,17,18,16,15,17,16,16,15,18,17,15,16,19,16,15,16,17,16,16,15,17,17,16,18,17,16,17,17,16,16,16,16,15,16,14,17,17,17,16,16,17,14,14,13,14,15,12,13,16,14,13,14,16,13,13,15,15,13,15,15,14,15,13,14,14,15,13,14,15,14,14,14,15,13,14,15,15,15,15,14,15,16,14,14,15,15,15,15,14,15,17,17,15,14,17,16,15,16,16,16,13,15,15,14,12,14,13,11,11,12,12,10,10,10,11,9,11,12,12,10,13,13,11,11,13,10,10,11,12,10,10,11,11,9,10,11,12,13,13,12,11,10,11,10,10,12,11,10,12,13,11,12,12,13,11,13,13,13,13,14,15,12,15,12,13,13,13,11,11,11,11,10,10,11,10,9,9,10,9,8,8,8,7,8,7,6,7,7,5,5,6,7,6,6,6,5,6,5,5,5,5,5,5,6,5,7,6,6,7,7,7,7,8,8,8,9,11,12,13,15,15,17,14,15,18,17,17,18,20,17,17,20,21,19,18,23,21,22,21,22,21,19,20,18,19,20,20,19,20,20,19,22,20,24,22,23,22,24,24,25,25,24,25,25,25,25,25,25,25,24,25,24,24,24,23,25,23,25,23,23,25,22,24,25,22,25,25,23,23,23,22,21,21,20,18,18,16,13,14,9,6,6,5,5,4,4,3,3,3,3,3,4,3,3,3,3,2,3,3,3,2,2,3,3,2,3,3,4,4,4,4,4,4,4,3,3,3,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,2,3,3,3,4,4,5,5,4,5,6,6,5,6,6,6,6,7,7,8,8,9,10,9,9,9,10,8,8,8,8,9,8,9,8,8,9,9,9,10,9,9,9,10,10,9,9,10,9,8,9,10,9,9,10,11,9,10,11,11,10,10,10,11,11,13,12,13,12,12,12,13,12,14,13,13,14,14,16,16,15,15,15,16,16,15,16,15,14,14,15,15,14,14,14,13,13,13,13,13,10,12,12,10,10,10,10,9,8,9,9,9,8,9,7,7,8,8,7,6,7,7,7,7,8,7,6,8,8,7,8,9,8,8,8,9,9,8,8,8,9,9,8,9,9,9,9,10,9,9,9,11,11,10,10,12,12,12,13,14,14,15,15,13,14,14,15,15,17,15,18,15,17,15,16,17,16,15,16,16,16,14,14,13,12,12,11,10,9,11,10,11,10,9,9,9,9,9,8,8,8,7,7,7,7,6,7,7,6,5,6,6,7,6,7,7,7,7,7,8,8,8,7,7,8,8,8,8,9,8,8,8,9,8,8,7,7,8,8,6,7,7,7,6,6,7,5,6,6,6,6,6,7,7,7,7,7,6,7,7,7,7,7,7,7,6,6,6,5,6,5,5,4,4,4,4,4,4,5,5,5,5,6,6,6,7,8,7,8,7,8,8,6,7,7,6,7,7,6,6,8,8,7,8,8,8,8,9,9,9,8,9,10,10,11,11,11,11,13,11,12,13,12,14,16,15,16,19,22,20,18,20,20,19,23,21,21,24,22,24,24,23,24,25,25,24,25,25,24,24,26,23,20,20,24,24,21,22,20,20,21,19,20,18,21,20],[29,28,28,28,28,29,28,28,28,28,27,27,28,27,27,28,27,26,27,27,27,27,27,28,27,27,28,27,27,28,26,28,28,29,27,28,28,27,29,28,28,27,27,28,28,27,27,26,26,25,25,24,24,24,23,22,21,22,19,18,18,16,13,12,11,10,10,9,9,9,8,7,8,8,9,9,10,10,11,10,10,12,12,11,12,14,14,14,15,15,16,16,15,15,16,16,16,16,17,16,17,18,17,17,17,18,18,18,17,18,18,18,17,18,16,17,16,17,15,15,16,15,14,16,16,15,14,17,17,14,16,17,15,15,16,16,17,16,16,16,15,15,17,16,16,15,17,16,14,16,16,14,15,13,15,16,15,15,15,15,14,13,11,13,13,12,12,14,13,12,13,14,12,12,13,14,12,13,14,12,14,11,13,14,13,12,13,14,13,14,13,15,13,14,14,15,16,17,14,15,16,16,15,15,16,15,16,15,15,16,16,15,14,16,15,14,14,14,14,12,14,14,12,11,13,12,10,10,11,11,9,10,9,10,10,11,10,11,10,12,11,9,10,12,10,9,11,11,9,9,11,10,9,10,10,12,13,13,11,10,9,10,9,10,12,10,9,11,12,9,10,12,12,11,12,12,12,13,13,13,12,14,10,10,12,11,8,9,10,9,8,9,9,8,8,9,9,8,8,7,6,6,7,6,5,6,6,5,5,6,6,4,5,6,5,5,4,5,5,4,5,5,5,5,6,6,5,6,6,7,7,7,8,8,11,12,14,15,15,17,18,17,18,18,18,19,20,20,19,19,22,23,21,21,25,24,25,24,24,25,21,23,21,22,22,23,22,21,23,24,22,25,25,24,25,25,26,26,27,27,27,27,26,26,26,27,26,26,26,25,25,26,25,25,26,23,27,25,25,26,25,26,27,23,25,26,25,25,25,24,25,24,21,20,18,17,16,14,11,7,6,5,5,4,4,3,3,2,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,2,3,4,4,4,4,4,4,3,3,3,3,2,2,2,2,1,1,0,1,1,1,1,1,1,2,2,2,2,3,3,3,3,4,5,5,4,4,5,4,4,5,6,5,6,7,7,7,8,9,10,10,8,9,9,7,8,8,8,8,8,8,8,7,9,8,7,9,9,8,8,9,10,7,7,9,8,7,8,9,8,7,10,10,8,9,11,9,8,9,9,10,11,13,13,11,12,11,11,13,11,13,13,13,13,14,16,16,16,15,16,17,18,17,16,16,14,14,15,14,14,13,13,12,11,11,11,10,9,10,10,8,8,9,8,7,7,8,7,7,7,7,6,6,7,7,5,6,7,6,5,6,7,6,6,7,7,6,6,7,6,6,7,8,7,7,6,7,8,7,7,8,8,8,8,9,9,8,9,10,9,9,10,10,11,11,12,13,13,15,14,13,14,13,14,16,16,15,15,15,16,15,16,16,16,16,15,15,13,13,14,12,12,12,11,11,10,10,9,9,8,9,8,8,8,7,7,6,6,6,6,6,5,5,6,5,4,4,5,5,6,5,5,6,6,6,6,7,7,7,6,6,7,7,6,7,7,7,7,8,7,8,7,6,6,6,6,5,6,5,5,4,5,6,4,4,5,5,5,5,6,6,6,7,6,5,6,7,6,7,7,6,5,7,6,5,5,6,5,4,4,3,4,3,3,4,4,5,5,5,6,6,6,7,7,7,7,7,9,7,6,7,7,5,6,6,6,5,6,7,6,6,7,7,7,8,8,8,8,8,9,10,11,11,12,12,13,12,12,14,14,15,16,16,19,19,20,20,20,20,20,20,22,22,22,23,22,24,24,25,23,24,23,25,24,24,24,23,25,23,22,22,23,23,23,22,21,20,21,20,19,20,21,18],[29,29,29,29,30,30,29,29,29,29,28,28,28,28,28,28,28,28,27,28,28,27,28,28,27,28,28,28,28,28,27,29,29,29,28,29,29,29,29,28,29,28,28,28,28,28,27,26,26,26,25,25,24,24,23,22,21,21,20,19,17,16,13,11,11,9,9,9,8,8,8,7,7,6,8,8,9,9,10,9,9,10,10,10,10,12,12,12,13,13,14,14,14,14,15,15,14,14,15,15,15,16,15,16,16,17,17,16,16,17,17,16,16,17,15,16,15,14,13,14,15,13,12,14,15,14,12,15,15,13,14,15,13,13,14,14,15,15,15,15,15,14,15,15,14,14,15,14,13,14,14,12,13,11,13,13,15,15,13,13,12,12,11,12,12,11,11,12,12,11,11,12,11,11,12,12,11,11,12,11,12,10,11,12,12,10,11,12,12,11,11,13,11,12,12,13,14,14,13,14,14,13,13,14,14,13,14,13,13,13,15,14,12,14,14,12,13,13,12,11,12,12,12,10,11,11,9,9,10,9,8,8,8,9,9,10,10,10,9,10,10,9,9,10,9,8,9,9,8,8,9,9,8,8,9,10,11,11,10,8,8,9,8,8,10,9,8,9,10,9,9,10,10,9,10,10,11,11,11,12,10,11,9,10,10,9,8,9,9,8,8,8,8,7,7,7,7,7,6,6,5,6,6,6,5,5,5,4,5,5,5,4,5,5,4,4,3,4,4,4,5,4,5,5,5,6,5,6,6,7,6,7,8,8,9,10,12,12,15,15,16,15,16,17,17,17,18,18,18,18,20,22,22,21,24,24,24,22,24,22,21,21,21,20,20,22,22,21,22,23,23,22,24,24,26,25,25,26,27,27,26,27,27,27,27,27,26,26,26,26,26,27,26,25,26,24,26,26,26,27,25,26,27,25,25,26,25,24,24,23,23,21,22,19,18,15,13,13,10,7,6,4,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,4,3,3,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,4,4,4,4,5,4,5,5,5,5,6,6,6,7,7,8,8,7,8,8,6,7,7,7,7,7,7,7,6,7,7,7,7,7,8,8,7,7,7,8,8,7,7,8,8,8,8,8,8,8,8,9,8,8,8,8,8,10,11,11,11,11,10,10,11,10,11,11,11,11,13,13,14,14,14,13,14,14,14,14,14,12,12,13,12,12,11,11,11,10,10,10,10,9,9,9,8,8,7,8,7,6,7,7,6,6,6,6,5,6,6,5,5,6,5,5,5,6,6,6,6,6,6,6,7,7,6,7,7,7,6,6,7,7,7,7,8,7,7,8,8,8,8,8,9,8,9,9,9,10,10,10,12,11,13,12,12,12,12,12,13,14,12,13,14,15,13,15,15,13,14,13,14,13,12,12,11,11,10,10,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,5,5,5,6,5,5,6,6,6,6,7,7,7,6,6,7,7,7,6,7,7,7,7,7,7,7,7,6,6,6,5,5,6,5,5,5,6,4,5,5,5,5,5,6,5,5,6,6,5,5,7,6,6,6,5,5,6,5,5,4,5,5,4,4,3,3,3,3,3,4,4,4,4,5,5,5,7,7,6,8,7,8,7,5,7,6,5,6,6,6,5,6,6,6,6,7,6,6,7,7,6,7,7,8,9,10,11,11,11,13,11,12,13,13,13,16,16,17,19,20,20,18,20,21,20,24,21,23,23,22,26,24,24,25,24,23,24,25,24,23,23,24,23,21,21,22,24,21,23,22,21,23,22,21,20,22,20],[28,28,28,28,28,28,28,28,28,26,27,26,27,26,26,27,26,27,26,26,27,26,26,27,26,26,27,26,26,26,26,27,28,28,27,28,27,26,28,27,28,27,27,27,27,27,26,25,25,23,24,23,23,23,22,22,20,20,20,17,15,14,11,10,9,8,8,8,7,8,7,7,6,6,7,8,8,8,9,9,10,10,10,10,10,11,11,12,12,12,12,13,12,12,13,12,13,13,13,13,14,14,14,14,14,15,15,15,15,16,16,15,14,15,13,14,13,13,13,12,14,11,12,13,14,13,12,14,13,12,13,14,12,12,13,14,13,13,13,14,13,12,14,13,13,12,13,12,12,13,12,11,11,11,12,12,13,14,12,13,12,11,9,12,11,10,10,12,11,10,11,12,10,10,11,11,10,11,11,10,11,10,10,11,11,10,11,11,10,10,11,12,10,11,11,12,13,12,11,13,13,12,12,13,13,12,13,11,12,12,13,12,11,13,12,10,12,12,11,10,11,11,10,10,10,10,8,9,9,8,8,8,8,8,8,9,9,9,8,9,9,9,8,9,8,8,8,9,8,7,9,8,8,7,8,9,10,10,9,8,8,8,8,8,9,9,8,8,10,8,8,10,9,8,9,9,10,10,10,11,10,10,9,10,10,9,8,9,9,8,8,8,8,7,7,7,7,7,6,6,6,5,5,6,4,5,5,4,4,5,4,4,4,4,4,4,3,3,3,4,3,4,4,4,5,5,4,5,6,5,6,6,8,8,9,10,12,10,14,13,16,14,14,16,15,15,16,17,17,17,18,20,21,20,22,22,22,21,23,21,18,20,19,19,19,19,20,19,21,21,21,22,25,23,24,24,25,26,26,26,26,26,26,26,26,25,26,25,24,25,24,25,25,24,25,23,26,24,24,26,22,25,26,24,25,25,24,24,23,23,23,20,21,18,17,14,12,13,8,6,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,3,3,4,4,4,4,4,4,4,4,5,4,4,5,6,5,6,7,7,8,7,7,8,6,7,6,6,6,6,6,7,6,7,7,7,7,7,8,7,7,8,7,7,7,7,7,8,8,8,7,8,8,8,8,9,8,8,8,8,8,10,11,11,10,10,10,9,10,9,11,10,11,11,11,12,13,13,12,13,13,13,12,13,13,12,11,12,11,10,11,12,10,10,10,10,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,4,5,5,4,5,5,6,5,6,6,6,6,7,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,7,8,8,8,8,9,10,9,9,11,11,12,11,11,11,11,11,12,13,12,13,13,13,13,14,14,13,12,12,13,12,12,12,11,10,10,8,8,8,8,8,8,8,8,7,7,7,7,6,6,6,6,5,6,5,5,5,5,4,4,4,4,5,5,5,6,6,6,6,6,6,6,6,6,6,7,6,6,7,7,7,7,7,7,6,6,5,6,6,5,5,6,5,4,5,5,4,4,5,5,4,5,5,5,5,6,6,5,5,6,6,6,6,6,6,5,5,5,4,4,4,4,3,3,3,2,3,3,3,4,4,4,5,4,5,6,6,5,6,6,7,6,5,6,5,5,5,6,5,5,6,6,5,6,6,6,6,6,7,6,6,7,7,8,9,9,9,10,11,10,10,11,12,12,15,14,17,18,19,19,17,17,19,17,22,19,21,21,20,23,22,23,22,22,22,21,24,22,23,20,24,22,19,20,23,22,21,23,21,20,20,23,20,19,21,19],[29,28,28,28,29,29,28,29,28,27,27,26,28,27,27,27,27,28,26,27,27,27,27,28,27,27,28,27,27,28,26,27,29,29,28,28,28,28,29,28,29,27,27,27,28,28,27,26,26,25,24,24,24,23,22,21,20,21,18,18,15,14,12,11,9,9,8,8,7,7,7,7,6,6,8,8,8,9,10,9,9,10,10,9,10,12,12,12,13,13,14,14,14,14,14,14,14,15,16,14,16,16,16,15,15,16,16,15,15,17,17,16,15,16,13,15,14,14,13,13,15,13,13,14,14,13,13,15,14,13,14,15,13,13,13,14,15,15,15,15,15,15,15,15,14,14,14,14,12,13,14,12,13,11,14,14,14,14,12,13,13,11,11,12,12,10,11,13,11,11,11,12,10,10,11,12,10,11,12,11,12,10,11,12,12,10,11,12,12,11,11,13,11,12,12,13,14,14,12,14,15,13,13,13,14,13,14,12,13,13,15,13,11,15,13,12,13,13,12,10,11,12,10,9,10,10,9,9,9,9,8,8,8,9,10,10,9,10,9,11,10,9,9,10,9,8,9,10,8,9,10,9,8,9,9,10,11,11,10,9,8,8,8,8,10,9,8,10,10,9,9,11,11,9,11,11,11,11,11,12,11,11,10,10,10,10,8,8,9,8,7,8,9,7,7,8,8,7,7,6,6,5,6,6,5,5,5,4,4,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,7,6,9,9,11,11,14,14,15,14,14,18,17,16,17,18,18,18,20,20,21,21,22,23,23,22,23,22,20,21,18,20,19,21,20,20,21,22,22,22,24,23,25,25,25,26,26,26,26,26,26,27,26,26,26,26,25,26,25,26,25,24,25,23,26,24,24,26,23,24,26,23,24,25,24,22,24,23,22,22,20,19,19,16,14,14,9,6,5,4,4,3,3,2,2,2,3,3,3,2,2,2,3,2,2,3,2,2,2,3,2,2,3,3,4,4,4,4,4,3,3,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,3,4,4,4,4,5,4,5,5,5,5,5,6,6,6,7,7,8,8,8,8,8,6,7,7,7,7,6,8,6,6,7,7,6,8,8,8,8,8,8,7,7,8,7,6,8,8,7,7,9,9,7,8,10,9,8,8,8,9,11,12,11,11,11,10,10,11,10,12,12,11,12,12,13,14,14,14,13,14,15,13,14,14,12,12,13,13,12,11,11,11,10,9,11,10,8,9,9,8,7,8,8,7,6,7,6,6,6,6,5,5,5,6,5,5,5,5,4,5,6,6,5,6,6,5,5,7,6,6,7,7,7,6,6,6,7,7,6,7,7,6,7,7,7,7,7,8,8,7,8,9,10,10,10,11,11,12,12,11,12,11,11,13,13,13,13,13,13,12,14,14,14,13,13,13,12,12,12,11,11,10,9,8,8,8,8,8,8,7,7,7,6,6,6,6,5,5,6,5,5,5,6,5,4,4,5,4,5,5,5,6,6,5,6,6,6,6,6,5,6,6,6,6,7,6,5,6,7,6,6,5,5,6,5,4,5,5,5,4,5,5,4,4,4,4,4,5,5,5,5,6,6,5,5,6,5,5,5,5,4,5,5,4,4,5,4,4,3,3,3,2,3,3,4,4,4,4,5,5,5,6,6,6,6,7,7,6,6,6,6,5,5,6,6,5,6,6,6,6,7,6,6,7,7,7,6,8,8,9,10,10,10,11,12,11,11,12,12,13,16,15,16,18,19,19,18,18,19,18,21,20,21,22,20,24,24,25,22,24,24,23,23,23,25,22,24,23,21,21,22,22,22,20,20,21,21,21,20,19,20,20],[29,29,29,29,29,29,29,29,28,27,27,27,28,27,27,27,28,28,27,28,27,26,27,28,27,27,28,27,28,29,27,28,29,29,27,29,28,28,29,29,29,28,28,28,28,28,27,25,27,25,24,24,24,24,23,22,21,20,18,18,15,14,11,10,9,8,7,7,7,7,6,6,6,6,7,7,7,8,9,8,7,9,9,7,9,10,10,11,11,11,13,13,13,13,13,14,12,13,15,14,15,15,14,14,16,16,16,15,15,16,15,15,14,15,13,14,13,12,12,13,14,11,11,12,14,12,11,14,15,12,13,14,12,12,13,14,15,15,14,14,13,13,15,14,13,13,14,13,12,13,13,10,11,10,12,13,12,13,12,12,10,10,10,11,10,9,9,11,10,9,10,10,9,9,11,11,9,10,11,10,11,9,10,12,10,9,11,11,10,10,10,11,9,11,12,13,14,14,11,13,13,13,12,13,13,12,13,12,12,12,14,12,10,13,12,10,11,12,11,9,10,11,9,8,9,9,8,7,8,8,7,7,7,8,9,8,9,9,8,9,9,8,8,9,8,8,8,8,8,8,8,8,7,7,8,9,10,10,8,7,7,8,7,7,8,8,7,8,9,7,8,9,9,8,9,10,10,10,10,10,9,10,8,8,9,8,7,7,8,7,7,7,7,6,6,7,6,6,6,5,5,5,5,5,4,5,5,4,4,4,4,3,4,4,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,8,10,11,12,13,15,15,15,16,17,16,17,18,19,18,17,21,21,21,21,23,23,24,23,24,21,20,22,20,19,20,22,21,19,21,23,22,23,25,24,26,26,26,27,27,27,26,26,26,27,26,27,26,26,26,27,25,26,26,25,26,23,26,25,25,27,24,26,27,22,24,26,25,23,24,22,23,21,20,18,17,14,14,12,9,6,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,6,7,7,7,6,7,7,5,6,6,6,6,6,6,6,5,7,6,6,7,7,6,6,7,7,6,6,7,7,6,6,7,7,6,7,7,7,7,8,7,7,7,7,8,9,10,11,10,9,9,9,10,9,10,10,9,10,11,13,13,14,13,13,14,13,13,13,12,11,11,12,11,10,9,9,10,9,9,8,8,7,8,7,7,7,7,6,6,6,6,6,5,5,5,5,4,5,5,4,4,5,4,4,4,5,5,5,5,6,5,5,6,6,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,7,8,8,9,8,9,10,10,12,11,9,11,10,10,12,13,12,12,13,13,11,13,12,12,12,11,12,11,10,10,10,9,9,8,8,8,8,8,7,7,7,6,6,6,5,5,6,5,5,5,5,4,4,5,4,3,4,4,4,5,5,4,5,5,5,5,6,6,7,6,5,6,6,5,6,6,6,5,6,6,6,6,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,5,4,5,5,5,6,5,4,5,6,5,5,5,5,5,4,5,4,5,4,4,4,3,3,3,2,3,3,3,4,4,4,5,5,5,6,6,6,7,6,7,6,5,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,8,9,9,10,10,11,11,10,11,13,13,14,15,17,19,20,19,18,20,20,19,23,20,22,22,20,25,23,22,23,24,23,24,24,23,23,22,23,22,19,21,22,22,20,22,22,20,21,22,19,20,22,18],[30,30,29,29,30,30,30,29,29,28,28,28,29,28,28,28,28,28,27,28,28,27,28,28,27,27,29,28,28,28,27,28,29,29,28,29,29,28,29,29,29,28,28,28,28,28,27,26,27,26,25,25,25,24,22,24,22,22,21,20,17,16,13,10,10,9,7,8,7,7,6,6,6,6,7,7,7,8,9,8,8,9,9,9,9,10,10,11,11,12,12,12,12,12,13,12,12,12,13,13,14,14,13,14,14,14,14,14,14,15,15,14,14,14,13,13,13,12,11,12,13,11,11,12,13,12,11,13,12,11,12,13,11,12,12,13,12,13,13,13,13,12,13,13,12,13,13,12,11,12,12,10,11,10,12,12,13,13,12,11,11,10,10,10,10,9,9,10,10,9,10,10,9,9,10,10,9,9,10,10,10,9,9,10,10,9,10,10,10,10,10,11,9,10,10,11,12,12,11,12,13,12,12,13,13,12,12,11,12,12,13,12,10,12,12,10,11,11,10,9,10,10,10,8,9,9,8,8,8,8,7,7,7,8,9,9,8,9,8,9,9,8,8,9,8,8,7,8,8,7,8,8,7,8,8,9,9,9,8,8,7,8,8,7,8,8,8,8,9,8,8,9,9,8,9,9,10,10,9,10,9,9,9,9,9,8,8,8,7,7,7,7,7,7,7,7,7,6,6,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,4,4,5,5,4,5,5,5,5,6,7,7,9,10,11,11,15,15,17,16,15,17,18,16,17,19,19,18,19,22,22,21,23,23,24,23,24,21,20,21,19,19,19,21,21,20,21,23,23,23,26,24,26,26,26,27,27,28,27,27,27,27,27,27,27,27,26,27,26,26,26,24,27,24,25,27,25,26,26,25,27,24,23,25,24,24,24,23,22,20,20,17,17,15,13,13,9,6,5,4,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,4,4,3,3,3,3,2,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,4,3,3,4,4,4,4,5,4,4,5,6,5,6,7,8,7,7,8,7,6,6,6,6,6,6,6,6,6,7,7,6,7,7,7,7,7,7,7,7,7,7,6,8,7,7,7,8,8,7,8,8,8,8,8,8,8,10,11,11,10,10,10,9,9,9,10,10,10,10,11,12,13,13,12,12,13,12,12,13,12,11,11,12,11,10,10,10,10,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,5,5,4,4,5,4,4,5,5,5,5,6,6,6,5,6,6,6,6,7,7,7,6,6,7,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,9,9,9,10,10,11,11,10,10,10,10,11,12,11,12,12,13,12,13,13,12,12,12,12,12,12,11,11,10,9,9,8,8,8,8,8,7,7,6,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,5,5,5,5,5,6,6,6,7,6,6,6,6,6,6,6,7,6,6,7,7,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,6,5,5,6,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,2,2,3,3,4,4,4,4,5,5,6,6,6,7,7,7,6,5,6,6,5,5,6,5,5,6,6,5,6,6,6,5,6,7,6,6,6,7,8,10,10,10,10,11,11,11,12,12,13,14,14,16,18,18,17,17,18,18,17,21,19,21,21,20,23,23,22,22,23,22,23,23,23,21,22,23,22,19,20,23,22,21,23,20,21,22,22,21,20,21,20],[28,28,28,28,28,28,27,28,28,26,26,26,27,26,26,26,26,27,26,26,27,26,26,27,26,26,27,27,27,27,26,27,27,28,27,28,27,27,28,28,28,27,26,27,28,27,26,25,26,24,24,24,23,23,22,21,20,22,20,18,16,14,12,10,9,8,7,7,6,7,6,6,5,6,7,7,7,8,8,8,8,9,9,8,9,10,10,11,11,11,11,11,11,12,12,11,11,12,12,12,13,13,13,12,13,13,13,13,13,14,14,13,13,14,12,13,11,12,12,12,12,11,11,12,12,12,11,12,11,10,11,12,11,11,11,13,12,12,12,12,12,12,13,12,12,12,12,12,11,11,11,10,11,10,12,12,12,12,11,11,10,10,10,10,10,9,10,10,10,9,9,9,10,9,10,10,10,10,10,10,10,10,9,10,10,9,10,10,9,10,10,11,9,10,10,12,12,12,11,12,12,12,11,12,12,12,12,11,11,12,12,11,10,12,11,10,11,11,10,9,10,10,9,9,9,9,9,8,8,8,7,7,7,8,8,9,8,9,9,9,9,8,8,8,8,8,8,8,8,8,8,8,7,8,8,8,9,9,8,7,7,8,8,7,8,8,8,8,8,8,8,9,9,9,9,9,9,10,10,10,9,9,9,9,9,9,8,8,8,8,8,7,8,7,6,7,7,6,5,5,5,5,5,5,4,4,5,3,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,7,7,8,10,11,10,14,16,16,14,14,17,16,14,17,18,17,17,20,20,20,19,21,21,22,21,22,21,19,20,19,19,19,20,21,19,20,22,21,22,26,23,24,23,25,26,26,26,25,26,25,26,26,25,26,25,25,26,24,25,24,24,25,22,25,24,24,26,23,24,26,23,24,24,24,23,23,22,22,21,20,18,16,15,13,13,9,6,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,4,4,3,3,3,2,2,2,2,2,3,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,6,6,7,7,7,7,7,6,6,6,6,6,6,6,6,6,7,7,6,7,7,7,7,7,7,7,7,7,7,6,7,8,7,7,8,8,7,8,8,8,8,8,8,8,9,11,10,10,10,9,9,9,10,10,9,10,10,11,12,12,12,12,13,13,12,12,12,11,11,11,12,11,10,10,10,10,9,9,9,9,8,8,9,8,7,7,8,6,6,7,6,5,5,6,5,4,5,5,4,4,5,4,4,5,5,5,5,6,6,5,5,6,6,5,6,7,6,7,6,6,7,7,6,7,7,7,7,7,7,7,7,7,8,7,8,8,8,8,9,10,10,11,10,10,10,10,10,11,12,11,11,11,12,12,12,12,12,11,12,12,11,11,11,10,10,9,8,8,7,8,7,7,7,6,6,7,7,6,6,6,5,5,6,5,4,4,5,5,4,4,4,4,5,5,5,5,6,5,5,6,6,6,6,6,6,6,5,6,6,7,5,6,6,6,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,5,5,5,5,5,6,5,6,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,2,3,3,3,4,4,4,5,5,5,6,6,5,6,6,7,6,5,6,5,5,5,6,5,5,6,6,5,6,6,6,6,6,6,6,6,7,7,7,9,9,9,10,11,10,10,11,12,13,15,14,15,18,18,17,16,19,18,17,21,19,21,21,20,24,23,22,23,24,23,22,24,24,24,21,22,23,21,20,22,22,21,22,20,20,21,22,20,19,20,19],[28,28,28,28,28,29,28,29,28,27,27,26,27,26,26,27,27,27,26,27,27,26,27,27,26,27,27,27,27,28,26,28,28,29,27,28,27,28,28,28,29,28,27,28,28,28,27,25,26,25,24,25,24,23,22,22,20,20,18,18,15,14,11,9,9,7,6,7,6,6,6,5,5,5,6,7,7,8,8,8,7,8,8,7,8,10,9,10,11,10,11,11,11,11,12,11,12,12,12,12,12,12,12,13,13,13,13,13,13,13,14,13,12,12,12,12,12,11,11,11,12,10,10,12,12,11,11,12,12,10,11,12,11,11,12,12,12,13,12,13,12,12,13,12,11,11,12,11,10,11,11,9,10,9,11,11,11,11,10,11,10,9,9,9,10,9,9,10,10,9,9,10,9,9,10,10,9,9,10,9,10,8,9,10,9,9,10,10,9,10,10,10,9,10,11,12,12,12,11,12,13,12,12,12,13,12,12,11,11,11,12,11,10,12,11,10,10,11,10,8,9,10,8,8,9,8,8,7,8,8,7,7,7,8,8,8,8,9,8,9,9,8,8,9,8,7,8,8,7,7,7,7,7,8,7,8,9,9,8,7,7,7,7,7,8,7,6,8,8,7,8,9,8,7,8,9,9,10,9,10,9,9,8,7,8,8,7,7,7,7,6,6,7,6,6,7,6,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,4,4,3,3,4,3,3,4,4,4,4,5,4,4,4,5,5,5,6,5,7,9,11,12,13,15,16,15,15,17,16,16,17,18,17,17,19,21,20,21,22,21,24,21,22,21,19,22,20,17,20,22,22,21,21,23,23,24,26,23,26,26,25,26,27,27,27,27,27,27,27,27,27,27,26,27,26,26,26,25,26,23,26,26,25,27,24,26,27,24,25,26,25,24,25,22,23,23,20,18,17,15,13,13,9,6,4,3,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,4,4,3,4,3,2,2,2,2,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,3,3,3,3,4,3,4,4,4,4,5,5,5,6,7,7,7,7,7,7,7,5,6,6,6,6,5,6,5,5,6,6,5,6,7,6,6,7,7,5,6,7,6,5,6,7,6,6,7,7,6,7,8,7,7,7,7,8,9,10,11,10,9,8,8,9,8,10,10,9,10,11,12,11,11,12,12,13,11,12,11,11,10,10,11,10,10,10,9,9,8,8,8,7,7,7,7,6,6,6,6,5,5,6,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,5,4,5,5,5,5,6,6,6,5,6,6,5,6,6,6,6,6,6,6,6,7,7,7,6,7,8,8,8,8,10,9,10,10,9,10,10,10,11,11,10,11,11,11,10,11,11,11,11,10,11,10,9,10,10,9,9,8,7,7,7,7,7,6,6,6,6,5,5,5,5,4,4,5,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,6,5,5,5,4,4,4,4,4,4,5,4,4,4,4,3,4,4,4,4,4,4,4,5,5,5,4,4,5,5,4,4,4,4,4,4,4,3,4,3,3,3,2,2,2,3,3,3,3,3,4,4,4,5,5,6,5,6,5,6,6,5,5,5,5,4,5,5,4,5,5,5,5,6,5,5,5,6,6,6,6,7,7,9,9,9,10,11,11,10,11,12,13,15,15,15,19,19,18,17,18,17,18,21,19,20,21,20,22,23,22,22,22,22,23,22,22,24,20,22,23,21,20,21,22,21,22,20,20,21,22,19,20,22,20],[29,30,29,29,29,29,29,29,28,28,28,28,28,27,28,27,28,28,27,28,28,27,27,28,27,28,28,28,28,28,27,28,29,29,28,29,29,28,29,29,29,28,28,28,28,28,27,26,27,26,25,25,25,24,22,22,21,21,20,18,16,14,11,9,8,7,7,7,6,6,6,5,5,5,6,6,7,7,7,7,7,8,8,7,8,8,8,9,10,10,10,11,11,11,11,11,11,11,12,12,11,13,12,12,13,14,14,13,14,13,14,13,12,12,11,12,11,10,10,10,11,10,9,11,12,10,10,12,11,10,10,11,9,10,11,12,11,11,12,11,11,10,11,12,10,11,11,10,10,10,10,9,9,8,10,10,11,11,10,10,9,9,9,9,9,8,8,9,9,8,8,9,8,8,9,9,8,8,9,8,9,8,8,9,9,8,8,9,8,8,9,9,8,9,9,10,11,11,9,11,11,10,10,11,11,11,11,10,10,10,11,10,8,10,10,9,9,9,9,7,8,9,8,7,8,7,7,7,7,7,6,7,7,7,8,7,7,8,7,8,8,8,7,7,7,6,7,7,6,6,7,7,6,6,7,7,8,8,7,6,6,7,6,6,7,7,6,6,7,7,7,7,8,7,7,8,8,8,8,9,8,8,7,7,7,7,6,7,6,6,6,6,6,5,5,6,5,5,5,4,4,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,7,6,7,10,11,11,14,16,15,14,15,17,16,15,17,18,17,18,19,21,22,21,23,23,24,22,24,21,21,22,20,19,20,22,20,20,21,24,23,24,26,25,26,26,26,27,27,26,26,27,26,27,26,27,27,27,26,27,27,27,26,25,27,25,26,27,25,26,25,26,27,25,24,26,24,24,23,23,22,21,21,18,17,15,13,12,9,6,4,3,3,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,6,6,6,6,6,5,5,5,5,5,4,5,5,5,5,5,5,5,6,5,5,6,6,5,6,6,6,5,6,6,6,6,6,6,6,6,7,7,6,7,7,7,8,9,9,9,9,8,8,8,8,8,9,8,9,10,10,11,11,10,11,12,12,11,11,11,10,10,10,9,8,8,8,8,7,7,7,7,6,7,7,6,6,6,6,5,5,5,5,4,5,4,4,4,4,4,3,3,4,3,4,4,4,3,4,5,5,4,4,5,5,5,5,6,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,6,6,7,7,8,7,8,9,9,10,9,8,9,9,9,10,10,10,10,11,11,10,11,11,11,11,10,10,10,9,9,9,8,8,7,7,7,7,7,6,6,6,6,5,6,5,5,5,4,4,4,5,4,4,4,4,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,4,5,5,4,5,5,6,5,5,5,5,6,5,4,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,4,4,4,4,3,4,4,3,3,3,3,3,2,2,2,2,3,3,3,4,4,4,4,4,5,5,5,6,5,6,5,4,5,5,4,4,5,4,4,5,5,4,4,5,5,4,5,5,5,5,5,6,7,8,9,9,10,11,9,10,11,13,13,14,15,16,19,18,18,17,18,18,17,21,19,20,21,20,23,22,22,22,23,21,23,23,21,21,22,22,21,19,22,23,22,20,22,22,21,22,23,19,20,21,18],[29,28,28,28,29,29,28,28,28,27,27,26,27,26,26,27,26,27,26,26,27,27,26,27,27,27,27,27,27,27,26,27,28,28,27,28,27,27,28,27,28,27,26,27,27,26,26,25,25,24,24,24,23,23,22,22,21,22,20,18,16,14,12,9,8,8,7,7,6,7,6,6,5,6,6,6,6,7,7,8,8,8,8,8,8,8,9,9,9,9,9,10,10,10,9,9,10,10,10,10,11,10,10,11,11,11,11,11,11,12,12,11,10,11,10,10,10,9,9,9,10,9,9,9,10,9,9,10,9,9,10,10,9,9,9,11,10,11,10,10,11,10,10,10,9,9,10,9,9,9,9,8,9,8,9,9,10,10,10,9,9,8,8,8,8,8,8,8,9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,10,10,10,9,10,10,10,10,10,10,10,10,9,9,10,10,9,8,9,9,8,9,9,8,8,8,8,8,8,7,7,8,8,7,7,7,7,7,7,8,7,7,7,8,7,7,7,7,7,7,6,6,7,7,6,7,7,6,6,7,7,8,8,7,7,7,7,7,7,7,7,7,7,7,8,7,7,7,7,8,7,8,8,8,8,7,8,8,8,8,7,7,7,7,7,7,6,6,6,6,6,5,6,5,5,4,4,5,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,5,6,7,7,8,10,10,11,14,15,15,14,15,16,16,14,16,17,17,16,19,20,19,19,21,21,23,20,22,20,18,19,19,18,18,20,20,19,20,22,22,23,26,23,24,24,25,25,26,25,24,25,25,25,25,26,26,26,24,25,24,25,25,23,25,23,23,24,23,25,24,24,26,23,23,24,23,22,21,23,21,20,20,17,17,14,13,12,8,6,4,4,4,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,4,4,3,3,2,2,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,3,3,2,3,3,3,3,3,4,4,4,4,5,5,6,6,7,7,7,7,6,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,6,7,7,7,6,7,7,7,8,10,9,9,9,8,7,8,8,9,8,8,9,9,10,10,10,11,11,11,11,10,10,10,9,9,10,9,8,8,8,8,8,8,7,8,7,7,7,7,7,6,6,5,6,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,9,9,8,8,8,8,9,9,9,9,10,11,10,10,11,10,10,10,10,10,10,9,9,8,7,7,7,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,5,4,3,3,3,4,4,5,4,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,5,6,6,6,5,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,4,5,4,4,4,4,3,3,3,4,3,3,2,2,2,2,3,3,3,3,3,4,4,4,5,5,5,5,6,6,5,4,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,6,6,5,6,6,7,8,9,9,10,10,10,10,10,12,13,14,14,15,18,18,17,16,17,17,16,19,18,20,19,20,22,23,21,21,23,22,22,23,23,23,20,22,22,18,19,22,22,19,22,20,20,21,22,20,20,20,18],[27,28,27,27,27,28,27,27,27,26,26,26,27,26,26,27,26,26,26,26,26,26,26,27,26,26,27,26,26,27,26,27,27,28,26,27,27,27,27,27,27,26,26,26,27,26,26,24,25,24,24,23,23,23,22,22,20,21,20,18,16,14,11,10,9,7,6,7,6,6,5,5,5,5,6,7,7,8,8,8,8,8,8,8,9,9,9,9,10,10,10,11,11,10,11,11,10,10,12,12,11,11,12,11,11,12,12,11,11,12,13,11,11,11,10,10,10,10,10,10,10,9,10,10,10,10,10,10,10,9,10,11,9,10,11,11,12,11,11,11,11,11,11,11,10,10,11,10,9,10,10,9,9,9,10,10,10,10,10,9,10,9,9,9,9,9,9,9,9,9,9,9,9,8,9,9,9,9,9,9,9,8,8,9,9,9,9,9,9,9,9,9,9,9,10,10,11,11,10,11,11,11,11,11,12,11,11,11,11,10,11,10,9,11,11,9,10,10,9,9,8,9,9,8,8,8,8,7,8,8,7,7,7,7,8,8,8,8,8,8,8,7,8,8,7,7,7,7,7,7,7,8,6,7,8,8,8,8,8,7,7,7,7,7,8,8,7,8,8,8,8,8,8,8,8,9,8,10,9,9,8,8,8,8,8,8,8,7,8,8,7,7,7,6,6,6,6,6,5,5,4,4,5,4,4,4,4,3,4,4,4,3,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,6,6,8,10,11,11,14,16,16,14,14,17,16,15,17,19,17,17,20,21,19,21,22,20,22,20,23,20,18,19,18,18,19,20,20,19,20,21,22,22,25,24,24,24,25,26,26,26,26,26,26,27,26,26,26,26,25,26,25,26,24,25,25,23,25,24,24,26,22,24,26,24,24,24,24,22,23,21,22,21,20,18,18,14,12,12,8,7,5,4,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,3,4,4,4,4,4,4,4,3,3,2,3,3,3,4,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,2,3,3,3,3,4,4,4,4,5,4,4,5,6,5,6,6,6,7,7,7,7,6,6,6,6,6,5,6,6,6,7,6,6,7,7,6,7,7,7,6,6,7,7,6,7,7,7,7,7,8,7,7,8,8,7,7,7,8,9,10,10,10,10,9,8,8,9,9,9,9,9,10,11,11,11,11,11,12,12,11,11,10,10,10,10,10,9,9,9,9,8,8,8,8,7,8,8,7,6,7,7,6,6,6,6,5,5,6,5,4,5,5,4,4,5,4,4,5,6,5,5,6,6,5,6,6,6,6,6,6,6,7,5,6,7,6,6,7,7,6,7,7,7,6,7,7,8,6,7,8,8,8,8,9,9,10,10,9,9,9,9,10,10,10,10,10,11,10,11,11,11,10,11,10,9,10,10,9,9,9,8,8,7,7,7,7,7,6,6,6,6,5,6,6,5,4,6,5,4,4,5,4,3,4,4,4,5,5,5,6,6,5,6,6,6,6,6,5,6,6,5,6,6,6,5,6,6,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,4,4,5,5,5,6,6,6,6,5,6,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,2,3,3,3,4,4,4,4,5,5,5,6,6,6,6,6,7,6,5,5,5,5,5,6,5,5,6,6,5,6,6,6,5,6,6,6,6,7,7,8,8,9,9,10,11,11,10,11,12,13,14,14,15,17,17,17,16,17,17,16,19,18,19,19,19,22,21,21,22,22,22,21,23,22,22,20,22,22,19,20,21,22,20,21,20,21,20,22,20,19,19,18],[28,29,29,28,29,29,28,29,28,27,28,27,28,27,27,28,27,28,27,27,27,26,27,27,26,27,28,28,28,28,26,28,29,29,27,29,28,28,29,28,29,28,28,28,28,28,27,26,27,26,25,26,25,24,23,23,22,21,20,20,16,15,11,9,8,6,6,6,6,6,5,4,5,4,6,6,7,6,7,7,6,7,7,7,7,8,7,8,8,8,9,9,9,9,9,9,9,9,11,9,10,10,10,10,11,11,11,11,11,11,12,11,10,10,9,9,9,9,8,9,10,9,8,9,10,9,8,10,9,8,9,10,8,9,10,11,10,10,10,11,9,9,10,9,8,8,9,8,8,9,8,8,8,8,8,8,9,9,8,8,8,8,8,8,8,8,7,8,8,8,7,8,8,7,8,8,8,7,8,7,8,7,7,8,7,7,8,8,7,7,8,8,7,8,9,9,10,9,9,10,10,9,10,10,11,10,9,9,9,9,9,9,7,9,8,7,7,8,7,7,7,7,7,7,7,7,6,7,7,6,6,7,7,7,7,7,7,7,7,8,7,7,7,7,7,6,6,6,6,6,6,6,6,6,7,7,8,8,7,6,6,6,5,6,7,6,5,6,7,6,6,7,7,6,7,7,8,8,7,8,7,7,6,6,6,6,6,6,6,6,5,5,6,5,5,5,6,5,5,5,4,5,4,4,4,4,4,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,5,5,5,5,6,7,10,10,11,14,15,16,16,15,17,16,18,18,19,19,19,20,23,22,23,24,23,25,22,25,22,21,22,20,20,21,22,24,22,22,25,24,26,28,25,27,27,27,28,28,28,28,28,28,28,28,28,28,28,27,28,27,28,27,27,27,24,27,26,26,27,25,26,27,24,24,25,24,24,24,22,22,21,20,17,16,12,12,11,8,6,4,3,3,3,2,2,1,1,1,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,4,5,4,4,4,4,4,3,3,3,3,3,4,4,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,6,6,7,7,7,7,6,5,6,5,5,5,5,5,4,4,5,5,4,5,6,5,5,6,6,5,5,5,5,5,5,6,5,5,6,6,6,6,7,6,6,6,6,7,8,9,9,9,8,7,7,8,7,7,8,8,8,9,9,10,10,10,9,11,10,10,9,9,9,8,9,8,8,7,7,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,4,3,3,4,3,3,3,4,4,3,4,4,4,4,5,5,4,5,5,5,5,4,5,5,5,5,6,5,5,6,6,6,5,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,10,9,10,9,10,9,9,9,9,9,8,9,8,8,8,7,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,3,3,4,3,3,3,3,4,4,4,4,5,5,4,5,5,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,4,4,4,4,3,4,4,4,3,4,3,3,3,4,4,4,4,4,5,5,5,5,4,5,5,5,4,4,4,4,4,4,3,3,4,4,3,2,2,2,2,3,3,3,3,3,4,5,4,5,5,6,5,6,5,6,5,4,5,4,4,4,5,4,3,4,4,4,4,5,5,4,5,5,5,5,5,6,7,8,9,9,10,11,10,10,11,13,13,15,15,16,19,18,18,17,18,17,18,20,19,20,20,21,22,22,23,22,21,22,23,22,22,24,21,22,23,19,21,23,22,21,23,22,21,22,22,19,19,21,19],[29,28,28,28,28,28,28,28,27,27,26,26,27,25,26,26,26,27,26,27,26,26,26,27,27,27,27,27,27,27,27,27,28,29,27,28,28,27,28,28,28,27,27,27,27,27,26,25,26,25,25,24,23,22,21,21,20,20,19,18,15,14,12,8,8,7,6,6,6,5,5,4,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,9,8,8,8,9,9,9,9,10,9,9,10,10,10,10,11,11,10,9,9,9,8,9,8,8,8,9,8,8,8,8,8,8,9,8,8,8,8,8,8,9,9,9,9,9,9,8,8,9,8,8,8,8,7,7,8,8,7,7,7,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,7,7,7,7,6,7,7,6,7,7,6,7,7,7,6,7,7,6,7,7,8,9,8,8,9,9,8,9,9,9,9,9,8,8,8,9,8,7,8,7,7,7,7,6,6,6,6,6,6,6,6,5,6,6,5,5,5,6,6,7,7,6,7,7,7,7,6,6,6,6,6,5,6,5,5,5,5,5,5,6,6,7,7,6,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,7,6,7,6,6,6,6,6,6,5,5,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,7,9,10,10,13,14,15,14,14,16,16,15,16,17,17,16,18,20,21,20,21,21,23,21,23,20,19,19,19,19,19,21,22,20,21,22,23,25,27,24,25,26,26,26,27,26,26,26,26,26,26,27,27,27,24,26,25,25,26,24,25,23,24,25,23,25,24,23,26,23,23,24,23,22,21,21,21,19,20,17,15,14,13,12,8,6,4,3,3,2,2,2,1,1,1,1,2,2,2,2,3,3,2,3,3,3,3,4,4,4,4,5,4,4,4,4,4,3,3,3,4,3,4,4,4,4,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,2,2,3,2,3,3,3,3,4,4,4,4,5,5,6,6,6,6,5,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,6,6,5,6,6,7,7,8,8,8,8,7,6,6,6,7,7,7,7,7,9,9,9,9,9,10,10,9,9,9,9,8,8,8,7,7,7,7,6,6,6,6,5,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,5,5,5,5,4,5,5,5,5,5,5,5,5,6,6,6,5,6,6,6,6,6,7,7,8,7,7,7,7,7,8,8,8,8,9,9,9,10,10,10,9,10,9,8,9,8,8,8,7,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,4,4,4,5,5,4,5,5,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,4,4,5,4,4,4,5,4,3,4,4,4,3,4,4,4,4,5,5,5,5,5,4,5,5,5,5,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,3,3,4,4,4,4,5,5,5,5,5,5,5,6,6,5,5,5,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,6,7,8,7,9,8,9,10,9,11,12,12,13,15,17,17,16,15,16,16,16,19,17,18,19,20,22,22,22,22,23,21,23,21,21,21,21,21,21,18,19,22,21,18,22,19,20,20,22,18,18,20,19],[29,29,29,28,29,29,28,29,28,27,28,27,28,27,27,27,27,28,27,27,28,26,26,28,27,27,28,28,28,28,27,27,29,29,28,29,28,28,29,28,29,28,28,28,28,28,27,26,27,26,25,25,26,23,22,24,22,21,20,19,16,15,11,10,8,7,6,6,6,5,5,4,5,4,5,5,6,6,6,6,6,6,6,6,6,7,7,7,8,8,8,9,8,8,9,8,8,8,9,9,9,9,10,9,9,10,10,9,9,11,11,9,8,9,9,9,9,9,8,8,9,8,8,8,8,8,8,9,8,8,8,8,8,8,9,10,9,9,9,9,8,8,9,8,8,7,8,7,7,8,8,8,7,7,8,8,8,9,8,9,8,8,7,8,7,7,7,8,8,7,7,7,7,7,7,7,7,7,7,6,7,7,6,7,7,6,7,7,7,6,7,7,7,7,7,8,9,8,8,9,9,9,9,9,9,9,8,8,8,8,8,7,7,8,7,6,7,7,6,6,6,7,6,5,6,6,6,6,6,6,5,6,6,7,7,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,6,7,7,6,6,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,7,6,6,7,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,4,3,2,3,3,2,2,3,3,2,2,2,2,2,2,3,3,4,3,4,4,4,4,5,4,5,6,6,7,8,10,12,11,13,14,15,15,17,17,17,17,18,19,18,20,20,22,23,22,24,24,25,24,25,21,21,23,22,20,21,23,23,22,23,24,24,25,26,26,26,27,27,27,28,28,28,28,28,28,28,28,28,28,27,28,27,28,28,26,27,26,27,27,26,27,26,26,28,25,23,25,25,24,24,23,23,22,19,18,16,15,13,11,9,7,5,4,4,3,3,2,1,1,2,2,2,2,2,2,3,2,3,4,4,4,4,5,4,4,5,5,6,5,5,4,5,3,3,4,4,4,5,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,0,1,1,2,2,1,2,2,2,2,2,3,3,3,3,4,4,5,5,6,7,7,6,5,5,5,4,4,4,4,4,4,3,4,4,4,4,4,5,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,8,9,9,9,8,7,6,7,7,7,7,7,8,8,9,9,9,9,9,10,10,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,5,4,5,4,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,7,6,7,7,8,8,7,8,7,8,8,8,8,8,8,9,9,9,10,9,9,9,10,9,9,9,9,9,8,8,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,4,4,3,2,3,2,2,3,3,4,4,4,4,5,5,5,6,6,6,5,6,6,5,5,5,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,4,4,4,5,6,7,8,8,9,10,10,10,10,13,13,15,17,17,20,20,19,18,18,19,18,21,19,21,22,21,24,24,24,23,23,23,25,25,23,24,23,24,23,20,22,24,24,21,24,22,22,24,23,19,20,23,20],[28,28,27,28,28,28,28,27,27,26,26,25,26,25,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,26,27,28,28,27,27,27,28,27,27,27,27,27,27,27,26,26,25,24,24,24,23,23,24,21,21,21,20,19,19,16,14,12,9,8,7,6,6,5,5,5,4,4,4,5,5,5,5,5,6,5,6,6,5,6,6,6,7,7,7,8,8,7,7,8,8,7,8,9,8,8,9,10,9,9,10,10,9,9,11,11,9,8,9,8,8,8,7,8,7,8,7,7,8,8,7,7,8,7,7,7,8,7,7,8,9,8,8,8,8,7,7,8,7,7,7,7,7,7,7,7,6,7,7,7,8,8,8,7,7,7,7,7,7,6,6,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,7,7,8,8,7,8,9,8,8,9,9,8,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,5,5,6,5,5,5,5,5,4,5,5,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,4,4,4,4,4,4,5,5,6,6,5,5,4,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,5,6,6,7,10,10,10,13,14,15,14,14,16,16,15,16,17,18,17,19,21,21,21,22,23,23,21,24,20,20,20,19,19,20,21,22,21,22,23,25,26,26,25,26,27,27,26,27,27,27,27,27,27,27,27,27,27,26,27,26,26,26,25,26,24,24,25,25,26,25,24,26,23,24,24,24,23,22,23,21,20,20,17,17,16,13,13,8,6,5,4,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,6,6,6,5,5,5,4,4,3,4,4,4,5,6,4,5,5,4,4,3,3,3,3,2,2,2,2,2,2,1,1,0,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,5,5,6,6,5,4,4,3,4,3,3,3,3,3,3,3,3,3,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,7,8,8,8,7,6,6,6,6,6,7,6,6,7,8,9,9,9,9,9,9,8,9,8,8,7,8,7,7,7,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,9,9,8,10,9,9,9,9,9,8,8,8,8,7,7,7,6,6,6,6,5,5,5,4,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,4,5,5,4,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,5,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,3,2,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,5,6,7,7,8,8,8,9,9,10,12,12,14,15,17,18,15,14,16,17,15,18,16,17,19,18,19,21,19,19,21,20,21,21,20,20,20,20,19,17,19,20,20,19,20,19,18,20,22,18,16,18,18],[28,29,29,29,29,29,29,29,29,28,28,27,28,27,27,27,28,29,27,28,28,27,28,29,28,28,29,28,28,28,27,28,29,29,28,29,28,28,29,28,29,28,28,28,28,28,27,25,26,25,24,25,25,23,22,23,22,22,19,19,16,14,11,9,8,6,6,5,5,4,4,4,4,3,4,4,5,5,5,5,5,5,6,5,5,6,6,6,6,7,6,7,7,7,7,7,7,7,8,7,7,8,8,7,8,9,9,8,8,9,10,8,7,7,7,8,7,7,7,7,7,6,6,7,7,6,6,7,7,6,7,7,6,7,7,8,8,7,7,7,7,6,7,7,6,6,7,6,6,6,6,5,6,6,7,7,7,7,7,7,7,6,6,6,6,5,6,6,6,5,6,6,5,5,6,6,5,5,6,5,5,5,5,5,5,4,5,6,5,5,5,6,5,5,6,7,7,7,7,7,8,8,7,8,8,8,7,7,7,7,7,6,6,6,6,5,6,6,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,5,5,6,5,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,6,5,4,4,4,4,4,3,4,4,4,4,5,4,4,5,5,5,5,5,5,6,5,6,5,6,5,5,5,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,6,6,7,9,11,10,12,13,15,15,15,16,17,17,17,18,18,19,20,22,22,23,23,23,24,24,25,23,21,24,22,22,22,22,23,21,21,25,24,26,26,25,26,27,27,27,28,28,28,28,27,28,28,28,28,28,27,28,27,28,28,27,28,25,27,27,27,27,27,26,27,23,24,25,25,24,24,23,22,23,20,18,17,16,15,12,9,7,5,4,4,3,3,3,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,4,4,4,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,2,3,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,4,4,5,6,5,6,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,4,6,6,6,7,8,8,8,8,6,6,6,6,6,6,7,7,7,8,8,8,8,8,9,8,8,8,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,6,7,6,6,6,7,7,7,7,8,7,8,9,7,8,8,9,8,7,8,7,8,7,6,6,6,5,5,4,5,5,4,4,4,4,4,4,4,4,3,3,4,3,2,3,3,2,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,4,4,4,4,4,4,5,5,5,4,4,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,5,6,7,7,8,9,9,9,9,11,11,13,15,17,20,19,17,16,17,18,17,22,18,21,21,21,25,24,23,22,23,22,24,24,23,22,22,23,22,19,21,22,22,20,23,20,21,21,23,18,17,21,19],[28,28,28,28,28,29,28,28,28,26,27,26,27,26,27,26,26,27,26,27,27,26,27,28,27,27,28,28,27,27,26,27,28,28,27,27,28,27,28,28,28,28,27,27,28,26,25,25,26,25,25,25,24,23,22,22,20,21,20,19,16,14,11,8,7,6,5,5,4,4,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,7,6,7,6,7,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,6,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,6,5,4,5,5,5,5,5,5,5,5,5,4,5,4,4,5,4,4,4,5,4,4,5,5,4,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,3,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,5,5,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,1,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,8,9,10,12,14,15,14,15,18,18,16,18,19,18,20,20,22,23,22,23,23,24,23,24,21,21,22,21,20,22,23,22,21,22,23,25,24,26,24,25,26,27,26,27,26,27,27,27,27,26,27,27,27,26,26,26,26,27,26,26,25,25,27,24,26,25,24,26,24,23,24,24,24,23,23,22,21,20,17,18,15,14,13,8,6,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,4,5,5,5,5,6,6,5,5,5,4,4,4,4,4,4,5,6,5,5,5,5,4,4,4,3,3,3,3,3,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,5,5,5,5,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,6,7,7,7,6,5,5,4,4,5,5,5,5,5,6,6,7,6,7,7,7,7,7,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,3,3,4,4,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,6,7,8,8,8,8,10,11,12,16,17,19,20,17,16,19,18,17,20,18,19,22,20,23,23,23,21,22,23,24,23,23,23,22,22,22,19,21,23,22,19,21,20,20,21,22,18,17,20,19],[28,28,28,28,29,29,28,28,27,27,27,27,27,26,27,26,26,28,27,27,28,27,27,28,27,28,28,28,28,28,27,28,28,29,28,28,28,28,28,28,28,28,28,27,27,27,26,25,26,25,24,24,25,23,22,23,21,20,19,19,16,13,11,9,7,6,5,5,5,4,4,4,3,3,4,4,4,4,5,5,4,4,5,4,4,5,5,6,6,6,6,7,6,6,7,7,6,7,8,7,7,8,8,7,8,9,9,8,8,9,10,8,7,7,7,8,7,7,6,7,7,6,6,7,7,6,6,7,6,6,7,6,6,6,6,7,7,7,7,7,7,6,7,7,6,6,6,6,5,6,6,5,5,5,6,7,7,7,7,7,6,5,6,6,6,5,5,6,5,5,5,6,5,5,5,5,4,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,5,5,6,6,7,7,7,7,7,7,7,7,7,7,7,6,6,6,7,6,6,6,6,5,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,4,4,5,5,6,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,8,10,10,12,14,15,14,15,17,18,17,18,19,18,20,20,23,23,22,24,23,24,24,24,22,22,23,21,19,21,23,23,21,21,24,24,25,26,25,26,27,27,27,28,27,28,27,27,27,27,27,27,27,27,27,26,26,28,26,27,26,26,27,26,27,26,26,26,24,24,25,25,25,23,24,22,21,20,18,17,15,14,12,8,6,5,4,3,3,3,3,2,2,3,2,3,3,3,3,3,4,4,4,4,5,5,5,5,6,5,6,6,5,5,5,5,4,4,4,5,5,6,6,5,6,5,6,5,4,4,4,4,3,3,3,3,3,3,2,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,3,3,5,6,5,5,5,4,4,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,5,5,6,6,8,7,7,7,6,5,5,6,5,6,5,6,6,7,7,8,7,8,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,4,4,5,5,4,5,5,5,5,5,6,6,6,6,5,6,6,6,7,7,7,7,8,7,8,8,7,8,8,9,8,7,7,7,7,7,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,5,5,5,4,4,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,5,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,5,6,6,7,7,9,9,9,9,12,11,14,17,18,20,19,18,16,19,20,17,21,18,21,21,20,24,23,24,22,23,22,25,24,22,22,23,22,21,19,21,23,21,19,22,20,19,21,22,17,17,21,18],[28,27,28,27,28,28,27,27,27,26,26,26,27,25,26,25,26,26,26,27,27,27,27,27,27,27,28,27,27,27,26,27,28,28,27,28,27,28,28,27,27,27,26,27,26,26,25,24,24,24,23,22,22,21,19,20,19,18,17,17,14,12,11,8,7,6,5,5,5,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,7,6,6,7,7,6,7,7,7,7,8,8,7,8,9,9,9,9,10,9,8,7,7,7,8,7,7,7,7,7,7,6,7,7,6,6,7,7,6,7,7,6,6,7,7,7,7,7,7,7,6,7,7,6,6,7,6,5,6,6,5,5,5,6,6,7,7,6,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,6,7,7,7,7,6,6,6,6,6,6,5,6,6,5,5,5,5,4,5,5,5,4,4,5,4,4,4,4,3,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,5,5,6,8,9,9,11,12,14,12,13,15,15,15,17,17,17,19,19,20,22,21,21,22,24,22,24,21,20,21,20,19,21,22,22,20,21,23,24,25,26,25,25,25,26,26,27,26,26,26,26,26,26,27,27,27,26,26,26,26,27,25,26,25,25,26,25,26,25,25,26,24,24,24,24,23,22,22,21,20,18,17,16,15,13,12,8,6,5,4,3,3,3,3,2,2,3,3,3,3,3,3,3,3,4,4,5,5,4,5,5,5,5,5,5,5,5,5,4,4,4,4,5,4,5,6,5,6,5,5,4,4,4,4,3,3,3,3,2,3,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,3,4,4,5,5,5,5,4,4,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,6,7,7,7,6,5,4,5,5,5,5,5,5,6,6,7,8,7,7,8,8,7,7,7,7,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,5,6,6,6,6,7,6,7,7,7,7,8,7,8,8,8,7,7,7,7,6,6,6,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,4,4,4,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,4,5,6,6,7,9,8,8,8,10,10,13,15,16,18,19,17,14,18,19,16,21,17,20,21,19,22,22,22,22,23,22,23,23,22,22,21,22,20,17,19,21,20,18,21,19,19,20,21,17,16,20,17],[27,27,27,27,27,27,27,27,27,26,25,25,26,25,25,25,25,26,26,25,26,26,26,27,26,26,26,26,26,25,25,26,26,27,25,26,26,26,26,26,27,25,25,25,26,25,24,23,23,23,23,22,22,21,20,21,19,20,18,18,15,14,11,8,7,6,5,5,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,7,6,6,7,7,7,6,7,8,7,7,8,8,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,7,6,6,6,6,6,6,6,6,5,5,6,6,5,6,6,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,5,4,4,4,5,4,4,5,5,4,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,4,4,5,5,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,1,2,1,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,7,9,9,10,12,14,15,12,14,16,16,15,17,17,17,17,18,20,21,20,21,21,22,22,22,20,19,20,20,19,19,20,22,19,21,21,24,24,26,23,23,25,25,25,26,26,26,26,26,26,25,26,26,26,25,26,25,25,26,24,25,24,24,25,24,25,24,24,25,23,23,23,23,22,21,22,20,20,18,16,16,13,13,11,8,6,5,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,6,5,5,4,4,4,4,4,4,4,5,6,5,5,5,5,4,4,4,3,3,3,3,3,2,3,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,3,3,4,4,4,4,4,3,3,2,3,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,6,7,7,7,6,5,5,5,4,5,5,5,5,6,6,7,7,7,7,7,8,7,7,6,6,6,6,6,5,5,5,5,5,4,5,4,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,5,5,5,5,6,6,6,6,7,7,7,8,7,7,7,7,7,7,7,7,6,6,6,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,3,3,4,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,5,4,4,4,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,6,7,8,9,8,8,9,10,12,13,14,17,18,16,13,17,18,15,20,15,18,19,18,21,21,19,20,21,20,21,21,21,17,19,20,20,15,17,21,21,16,21,18,19,19,21,16,15,18,18],[28,28,28,28,28,28,27,28,27,27,27,26,27,25,26,26,26,27,26,27,28,27,27,28,27,27,27,28,27,27,27,27,28,28,27,28,28,27,28,27,28,27,27,27,26,26,26,24,25,25,25,23,23,23,21,22,20,21,20,19,16,14,11,8,7,6,5,5,5,4,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,6,6,6,6,6,6,6,6,7,7,6,7,7,7,7,8,8,7,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,7,6,6,6,6,6,5,6,6,6,5,5,6,5,5,6,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,6,5,5,5,5,5,4,5,5,5,5,5,4,5,4,4,5,5,4,5,5,4,4,5,5,4,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,5,5,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,4,4,5,5,4,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,6,7,8,9,11,12,13,15,14,14,17,17,17,19,19,19,20,19,21,24,22,22,23,24,23,24,21,21,23,20,21,22,22,23,22,22,24,26,26,27,26,25,27,27,27,27,27,28,27,27,28,27,28,28,28,27,27,28,27,27,26,27,26,26,27,26,27,27,25,26,26,24,24,25,23,23,22,22,21,20,17,16,15,12,11,8,6,5,4,4,3,3,3,2,2,3,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,5,6,5,5,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,3,3,4,5,4,4,4,3,3,2,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,6,7,6,6,5,5,4,5,5,5,5,5,6,6,6,7,6,7,7,7,7,7,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,6,6,6,6,6,6,7,7,7,7,6,7,7,7,7,6,7,7,7,6,6,5,5,5,4,4,4,4,4,3,3,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,6,7,7,8,9,10,9,9,11,11,13,14,18,19,20,15,14,18,19,16,20,17,19,22,20,23,23,22,22,23,22,23,23,23,21,21,23,22,18,19,23,22,18,22,20,20,20,22,17,16,19,18],[28,28,27,28,28,27,28,28,27,27,26,26,26,25,26,26,26,27,27,27,27,27,27,28,27,27,28,27,28,28,27,28,28,28,27,28,27,28,28,28,28,27,27,27,27,26,25,23,24,23,22,22,22,21,20,20,19,18,17,17,15,13,11,8,7,7,6,5,5,4,4,3,3,3,3,4,4,4,5,4,4,4,5,4,4,5,5,6,6,6,6,7,6,6,7,7,6,7,7,6,7,7,8,7,7,8,9,8,8,9,9,8,7,7,7,8,7,7,6,7,7,6,6,7,7,6,6,7,6,6,6,6,5,6,6,7,7,6,6,7,6,6,7,6,5,6,6,6,5,6,6,5,5,5,6,6,7,7,6,7,6,6,6,6,6,5,5,6,5,5,5,5,4,5,5,5,4,5,5,5,5,4,4,5,4,4,5,5,4,4,5,5,4,5,5,6,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,5,6,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,5,5,5,5,5,5,5,5,4,4,5,4,3,4,4,3,3,4,3,3,4,4,4,5,5,4,4,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,6,7,8,9,10,12,13,15,14,14,16,16,15,17,18,17,17,18,21,21,20,22,21,22,22,23,21,20,21,19,19,20,21,22,20,21,23,24,25,27,24,25,26,26,26,27,26,26,26,26,26,27,27,27,27,26,27,26,26,27,26,26,25,26,26,25,27,26,25,27,25,25,25,24,24,23,22,22,20,19,16,15,13,12,11,8,6,5,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,5,5,5,4,5,5,5,5,5,6,5,6,5,5,5,5,4,4,4,4,3,3,3,3,3,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,3,3,4,5,5,5,4,3,3,3,3,3,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,6,7,7,7,6,6,5,5,5,5,5,5,5,6,7,7,7,7,7,8,8,8,8,7,6,7,6,6,6,6,5,5,5,4,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,5,5,4,4,5,5,5,5,5,6,6,6,6,5,6,6,6,7,6,6,7,7,8,8,8,7,8,8,8,7,7,7,7,7,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,4,3,4,4,5,5,5,4,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,5,6,7,7,7,10,9,9,10,12,12,14,15,17,19,20,18,15,19,20,17,22,17,21,21,20,24,23,20,23,23,22,24,24,22,21,23,23,21,18,19,23,22,18,21,20,20,21,22,18,17,21,17],[27,27,26,27,27,27,27,27,27,26,25,25,26,25,25,25,25,25,26,26,26,26,27,26,26,26,26,26,26,26,26,27,27,27,26,26,26,26,27,26,26,26,26,26,26,25,25,23,24,23,22,21,22,21,20,20,19,19,17,18,15,13,11,9,8,7,6,5,5,5,4,4,4,3,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,6,7,8,7,7,9,8,8,8,9,9,8,9,10,10,8,7,8,7,8,8,7,7,7,8,7,6,7,7,7,7,8,7,6,7,7,6,7,7,7,7,7,7,7,7,6,7,7,6,6,7,7,6,7,7,6,6,6,6,7,7,8,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,5,5,5,6,5,5,6,6,5,5,6,6,5,6,6,6,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,6,5,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,5,5,6,6,5,5,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,3,4,5,4,4,5,5,4,5,5,5,5,5,6,5,5,5,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,4,4,5,5,5,6,6,8,9,9,10,11,13,14,12,13,15,15,14,15,17,16,17,18,20,20,20,21,21,22,21,22,20,19,20,19,18,19,20,20,19,20,21,23,24,26,24,24,25,25,25,26,26,26,26,25,26,26,26,26,26,26,26,26,26,25,25,25,24,25,25,25,26,24,25,26,25,24,24,23,23,21,22,20,19,18,16,16,14,12,11,9,7,6,4,4,3,3,3,3,3,3,3,3,3,3,4,3,5,5,5,4,5,5,5,5,6,6,6,6,6,7,5,5,4,5,5,7,6,6,6,5,6,6,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,3,3,4,4,4,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,4,4,4,5,4,4,5,5,5,6,7,7,7,7,6,6,5,5,6,6,6,6,7,7,8,8,8,8,9,9,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,6,6,7,6,7,7,6,6,6,6,7,7,7,7,8,8,8,9,8,9,8,9,8,7,8,8,7,7,7,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,5,4,5,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,5,5,5,4,5,5,4,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,4,3,4,3,4,4,4,4,4,5,5,4,4,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,5,6,7,7,7,10,9,8,9,10,10,12,13,15,15,18,15,12,16,18,15,21,16,19,20,19,22,22,20,21,22,21,22,22,22,19,19,21,20,16,16,20,21,16,20,18,19,19,21,18,17,19,17],[28,28,27,27,28,28,27,27,28,26,26,25,26,26,25,26,26,27,26,27,27,26,27,27,26,27,27,27,27,27,26,27,28,28,27,27,27,27,28,27,28,27,26,27,26,26,25,23,24,24,23,23,24,22,21,21,20,21,19,19,16,14,12,10,9,7,6,6,6,5,5,5,4,4,5,5,5,6,6,5,5,6,6,5,6,6,6,7,7,6,7,8,7,7,8,7,7,7,8,8,8,8,8,8,8,9,9,8,8,9,9,8,8,8,7,8,8,7,8,7,8,7,8,7,7,7,7,7,7,7,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,6,7,7,6,6,7,7,7,8,7,8,7,7,7,7,7,7,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,6,5,6,6,7,7,7,7,7,7,7,7,8,8,7,7,7,7,7,7,6,6,7,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,4,5,5,4,4,5,4,4,4,4,5,6,5,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,4,4,3,4,4,4,5,5,5,5,5,6,6,7,8,10,10,11,13,14,15,14,14,16,17,16,17,18,18,19,19,20,21,21,22,21,23,22,23,21,20,21,20,19,20,21,22,20,22,22,24,25,27,23,24,25,25,25,26,25,25,25,25,25,25,26,26,25,25,25,25,25,25,24,25,24,24,25,24,26,25,24,25,24,23,24,23,22,22,22,20,19,18,17,15,14,12,11,9,7,6,5,5,4,4,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,6,6,6,7,7,7,6,6,5,5,4,4,4,5,5,6,7,6,6,6,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,3,3,4,5,5,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,6,7,8,8,8,7,6,6,6,6,6,6,6,6,7,7,8,8,8,8,9,10,9,9,8,7,8,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,8,7,7,7,7,7,7,7,7,8,8,9,9,9,8,9,8,9,8,8,9,8,8,7,7,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,4,5,5,5,5,4,4,4,4,4,3,4,4,3,4,4,3,3,4,4,4,4,4,5,5,5,6,5,5,6,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,4,4,4,4,4,5,5,5,5,6,5,5,5,4,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,6,7,7,7,10,10,8,8,12,13,13,14,16,18,19,16,13,17,19,15,20,16,20,22,20,23,23,22,21,23,23,23,24,23,21,21,23,22,19,18,21,22,19,21,20,21,21,22,18,16,20,18],[29,29,28,28,28,28,28,28,27,27,26,26,27,26,27,26,27,27,27,27,27,27,27,28,27,28,28,28,28,27,27,28,28,29,28,28,28,28,28,28,28,27,27,27,27,27,25,25,26,24,23,23,24,22,20,21,21,20,19,19,17,15,13,10,9,8,6,6,6,6,5,5,5,4,5,5,5,6,6,5,5,6,6,5,5,6,6,7,7,7,7,8,7,7,8,7,7,8,8,8,8,8,8,8,8,9,9,9,9,10,10,9,8,8,8,9,8,8,7,7,8,7,7,7,8,7,7,8,7,7,7,7,7,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,7,7,7,8,8,8,8,7,7,7,7,7,6,6,7,7,6,6,7,6,6,7,6,6,6,6,6,6,5,5,6,6,5,6,6,5,5,6,6,6,6,6,7,7,7,7,7,7,7,8,7,8,7,7,7,7,7,7,6,6,6,6,6,6,6,6,5,6,6,6,5,6,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,5,4,5,5,4,4,4,5,6,6,5,4,4,4,4,4,5,5,4,4,5,5,4,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,3,3,2,3,2,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,7,7,8,10,10,11,12,13,15,14,15,17,17,17,19,20,19,20,21,22,24,22,23,24,25,23,25,21,22,23,21,21,20,22,22,20,21,23,25,25,27,25,26,27,27,27,27,27,27,27,27,27,27,28,28,28,27,27,27,27,28,26,27,25,26,27,26,26,27,25,26,25,24,25,24,23,23,22,22,21,19,17,16,14,13,11,8,7,6,5,5,4,4,4,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,6,7,6,6,6,6,5,5,5,6,6,7,7,6,6,6,6,6,5,5,5,5,4,4,4,4,4,3,3,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,3,3,5,5,5,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,5,5,5,6,6,7,8,8,8,7,7,6,6,6,6,7,6,6,7,7,8,8,8,8,9,9,8,9,8,8,8,8,7,7,7,6,6,6,6,6,6,5,5,5,5,4,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,7,7,8,8,6,7,7,7,8,7,8,8,9,9,9,9,9,10,9,9,9,8,8,8,8,8,8,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,5,5,5,5,5,4,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,3,3,4,6,7,7,7,10,8,8,10,11,12,13,15,17,18,19,17,14,18,19,15,21,17,20,21,20,23,22,20,22,22,23,22,23,23,21,21,22,22,18,18,23,22,19,21,18,20,22,23,17,16,21,18],[29,28,27,28,27,27,28,27,27,27,25,25,26,25,26,26,26,25,26,27,26,26,27,27,27,28,27,27,28,27,26,28,28,28,28,28,26,28,28,28,28,27,25,26,26,27,25,24,25,24,23,22,23,22,20,21,20,19,18,19,16,14,12,11,10,9,7,7,7,6,6,5,5,5,5,5,6,6,7,6,6,6,7,6,7,7,7,8,8,8,8,9,8,9,9,9,8,9,10,9,10,11,11,10,11,12,12,11,12,12,12,11,10,11,10,11,10,10,9,9,10,9,9,9,10,8,8,9,9,8,8,8,7,8,8,8,9,9,9,9,9,8,9,9,7,8,9,8,7,8,8,7,8,7,8,9,9,9,9,9,8,8,8,8,8,7,7,8,7,7,7,7,7,7,8,7,6,7,7,7,7,6,6,7,6,6,6,7,6,6,7,6,6,6,7,8,8,7,7,8,8,8,8,9,8,8,8,8,7,8,8,7,7,8,7,7,7,7,7,6,6,7,6,6,6,6,5,5,6,6,5,5,6,6,7,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,4,5,5,5,6,6,5,4,4,5,4,4,5,5,4,5,5,5,5,6,5,5,5,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,4,4,5,4,4,5,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,5,4,4,5,5,6,5,6,6,6,7,7,7,9,11,11,11,12,14,15,14,15,16,16,16,18,19,18,18,19,21,22,21,22,23,23,21,23,21,20,21,20,20,20,21,21,20,21,23,23,25,26,25,25,26,26,26,27,26,26,26,26,27,26,27,27,27,26,27,26,27,27,26,26,24,26,25,25,27,26,26,26,24,25,25,24,24,22,22,22,20,19,17,16,14,13,11,9,8,7,6,5,5,5,4,4,4,3,3,3,4,4,4,4,5,5,5,6,6,6,6,6,7,7,7,7,8,7,5,5,5,5,6,6,6,8,8,6,7,7,6,6,6,6,5,5,5,5,5,4,4,4,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,2,2,3,4,5,5,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,4,5,5,5,5,6,6,5,6,6,6,8,8,9,9,8,7,6,6,6,7,7,7,7,8,8,9,9,9,9,10,10,10,10,9,8,9,9,8,8,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,7,6,6,7,7,7,7,7,8,7,9,9,7,8,8,8,9,9,9,10,10,11,10,11,10,11,10,11,10,9,9,9,9,8,9,7,7,7,6,6,6,6,5,5,5,5,5,4,5,5,4,4,4,4,3,3,3,3,3,3,3,4,3,4,5,4,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,4,4,5,5,6,7,6,6,6,7,6,6,6,6,6,5,5,6,6,5,5,5,4,4,4,4,4,4,5,5,5,6,6,6,5,7,6,5,5,5,5,5,4,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,5,6,7,7,7,10,9,8,9,11,12,13,14,15,17,19,16,14,17,19,16,21,18,20,22,20,23,21,21,21,23,21,22,23,21,22,20,22,20,18,18,21,20,19,21,20,20,22,22,19,18,21,17],[28,27,27,26,27,27,27,27,27,26,26,25,26,25,26,26,26,26,26,26,27,26,27,27,26,27,27,27,27,26,26,27,27,28,27,27,27,27,28,27,28,27,26,27,26,26,25,24,25,24,23,22,23,23,21,21,21,20,18,19,16,15,13,11,10,9,8,8,8,7,7,7,6,6,7,7,7,8,7,7,8,8,8,8,8,8,9,9,9,9,9,10,9,10,10,10,10,10,11,10,11,11,11,10,11,11,11,11,11,12,12,11,10,11,10,10,10,9,10,10,10,9,9,9,9,9,9,10,9,8,9,9,8,9,8,9,9,10,9,10,10,9,10,9,9,9,10,8,9,9,9,8,9,8,9,9,10,10,9,10,9,8,9,9,9,9,8,9,9,8,8,8,9,8,8,8,8,8,7,8,7,7,7,7,8,7,7,7,7,7,7,7,7,7,7,8,9,9,8,9,9,9,9,9,9,9,9,9,9,9,10,9,8,9,8,8,9,8,8,8,8,8,8,8,7,8,7,7,7,7,6,7,7,7,8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,6,6,6,5,5,6,6,7,7,6,6,5,6,5,5,6,6,5,6,7,6,6,6,7,6,6,6,6,7,7,8,8,7,7,7,7,7,6,7,7,6,6,5,6,5,6,5,5,4,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,8,8,8,10,10,11,11,13,13,15,14,15,16,16,16,18,19,18,18,19,20,21,21,22,23,23,22,23,21,21,22,20,19,20,21,21,19,21,22,23,23,26,24,24,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,25,26,26,26,25,23,25,25,24,26,25,25,25,23,24,24,24,22,22,22,20,20,19,17,16,14,13,12,10,9,7,6,6,5,5,5,4,4,4,3,4,4,5,4,5,5,5,5,5,6,6,7,7,8,7,8,7,7,7,6,5,5,5,6,6,7,8,8,7,7,8,7,6,6,6,6,5,5,5,4,4,4,4,4,3,3,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,2,3,3,5,5,4,4,3,4,3,4,4,4,5,4,4,4,4,3,4,4,4,4,4,5,4,4,5,5,4,5,6,5,5,6,6,6,6,7,7,6,7,7,7,8,9,9,9,8,7,7,7,8,8,8,8,8,9,10,10,10,10,11,11,11,11,11,11,9,10,10,9,9,8,8,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,4,5,5,4,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,7,7,6,7,8,8,7,8,8,8,8,9,9,9,10,10,9,9,9,9,10,10,10,10,10,11,10,11,11,11,11,11,11,10,11,11,10,9,9,8,8,7,7,7,7,6,6,6,6,6,6,5,5,5,4,4,4,4,3,3,4,3,3,3,3,4,4,4,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,6,7,7,7,6,6,6,6,6,6,5,5,5,5,5,5,5,4,5,5,5,5,6,6,6,7,7,6,6,7,7,7,7,6,6,6,6,6,5,6,5,5,5,4,4,4,4,4,5,5,5,6,6,6,5,6,6,5,6,5,6,5,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,4,4,5,7,8,7,7,10,9,7,9,11,12,12,15,14,17,19,14,13,17,18,14,21,17,20,21,20,23,22,20,21,23,21,21,22,21,21,20,22,20,19,18,21,21,20,21,18,20,20,22,18,17,20,18],[28,29,28,28,28,28,28,28,28,27,27,26,27,27,27,26,27,27,27,27,27,26,27,28,26,28,28,27,28,28,26,28,28,28,28,28,28,28,28,28,28,28,27,28,28,27,26,25,26,26,24,23,24,23,22,22,22,20,20,20,18,16,15,13,11,10,9,9,9,8,8,7,7,6,7,8,8,8,8,8,8,9,9,8,9,9,9,10,10,9,10,11,10,10,11,11,10,10,11,11,11,11,11,11,11,12,11,11,11,12,12,12,11,11,11,11,10,10,10,10,11,10,9,10,11,10,10,10,10,10,10,9,9,10,9,10,9,10,10,10,10,9,10,10,9,9,10,10,9,10,10,9,10,9,10,10,10,10,10,11,10,10,9,10,10,9,9,10,10,9,10,10,9,9,9,9,8,9,9,9,9,8,8,8,8,7,8,9,7,7,8,8,7,8,9,9,10,10,9,10,10,10,10,10,10,10,10,10,9,10,10,10,9,10,10,9,9,9,9,8,8,9,8,7,8,8,7,7,8,8,7,7,8,8,9,9,8,9,9,9,9,8,8,8,7,7,7,7,7,6,7,6,6,6,6,7,8,7,6,5,5,6,6,5,6,6,5,6,7,7,6,7,7,7,7,7,8,8,8,9,8,8,7,8,8,7,7,7,7,7,7,6,7,5,6,6,5,5,5,6,6,6,5,5,5,5,4,4,4,4,4,3,4,4,3,4,3,4,4,4,5,6,5,6,6,6,6,7,7,8,8,9,8,9,11,12,13,13,14,15,17,16,17,19,19,19,20,20,20,21,22,23,24,22,23,24,24,23,25,21,22,22,21,21,21,22,23,22,22,23,24,25,26,24,25,26,26,26,27,26,26,26,26,26,27,27,27,27,27,27,27,26,26,25,26,25,25,26,25,27,26,25,26,24,24,24,23,23,23,22,21,20,19,17,17,15,15,13,11,10,8,7,7,6,6,6,4,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,9,9,8,8,8,7,7,7,6,6,6,7,7,8,9,8,9,8,8,8,7,7,6,6,6,6,5,5,5,4,4,4,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,2,3,3,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,4,4,5,4,4,5,4,5,5,5,5,5,6,6,6,6,6,7,7,7,8,7,7,7,8,8,9,10,10,10,9,9,8,9,9,9,10,9,9,10,11,11,11,11,12,12,13,12,13,12,11,12,11,10,10,10,9,9,8,9,9,8,8,8,8,7,7,6,6,6,6,6,6,6,5,4,4,4,4,3,3,4,3,3,3,3,3,3,4,3,4,4,5,4,5,5,5,5,5,5,6,6,6,6,7,6,7,7,7,8,8,8,8,8,9,8,9,9,9,9,9,10,11,11,10,10,10,10,10,11,11,11,11,12,12,12,13,12,13,13,13,12,12,12,11,11,11,10,10,9,9,8,9,8,8,7,7,7,7,7,6,6,6,6,5,6,6,4,4,5,4,4,4,4,5,5,5,6,6,6,6,7,6,6,7,7,7,7,7,7,7,7,7,8,8,8,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,7,6,6,7,7,8,8,8,7,8,8,7,8,8,7,7,7,7,7,6,6,6,6,6,5,5,6,6,6,7,6,7,7,7,7,7,7,7,7,6,7,6,6,5,5,4,4,4,3,3,4,3,3,3,3,3,2,3,3,2,3,4,4,6,7,8,8,8,10,9,8,9,10,12,13,13,14,18,19,15,15,19,19,17,20,17,21,21,20,21,23,20,21,22,22,22,23,23,21,21,23,23,18,18,21,22,18,21,18,20,20,21,18,17,19,18],[29,28,27,28,28,27,28,27,27,27,26,25,27,25,27,26,27,26,27,28,27,27,28,28,27,28,29,28,29,29,28,29,29,29,28,29,29,29,29,29,29,29,28,28,28,28,27,26,27,26,25,24,25,23,23,23,23,21,21,22,19,17,15,14,13,12,10,11,11,10,9,8,8,8,9,9,9,10,10,10,9,10,11,10,11,12,12,13,12,12,13,14,13,13,13,13,12,14,14,14,13,14,14,13,14,16,15,14,15,16,16,15,14,15,13,14,14,14,12,12,14,12,12,12,13,11,11,12,12,10,12,11,10,11,11,12,11,12,12,12,12,11,13,12,11,13,13,11,11,13,13,10,12,12,12,12,14,13,13,13,13,12,12,13,13,10,11,12,11,10,11,12,11,10,11,11,9,10,10,10,10,9,9,10,9,8,10,10,9,8,10,10,9,10,10,11,11,11,10,11,11,11,12,12,12,12,12,12,11,11,12,12,10,12,11,10,11,11,11,9,10,11,9,9,9,10,8,9,9,9,7,8,8,9,9,9,9,10,9,10,10,9,9,9,9,8,8,8,8,7,7,7,6,6,6,8,8,8,7,6,6,8,7,6,8,7,7,8,9,9,7,9,9,8,9,9,9,10,10,10,9,10,9,9,9,9,8,9,8,8,8,8,8,6,7,7,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,5,4,5,5,5,6,6,6,7,7,8,8,8,9,9,9,10,11,10,12,13,14,14,15,16,17,16,16,19,19,19,21,22,21,20,21,23,23,23,25,25,25,23,24,23,22,24,21,20,21,22,21,20,21,24,24,25,26,25,26,26,27,27,27,27,27,27,27,27,27,28,28,27,27,27,27,27,27,27,27,26,27,27,26,27,26,26,27,24,25,26,25,24,23,24,22,21,21,19,18,16,15,13,12,11,10,9,8,8,7,7,6,6,5,5,5,6,6,7,6,6,7,7,7,8,8,8,8,9,9,8,8,9,8,9,8,7,7,7,8,8,9,10,9,9,9,8,9,8,8,7,7,8,7,7,7,7,6,6,5,4,4,4,3,3,2,3,3,2,2,1,1,1,1,0,1,2,3,3,5,5,5,5,4,4,4,5,5,5,5,6,5,6,6,5,5,6,6,6,6,5,6,6,6,6,7,7,7,8,8,8,9,8,9,10,9,8,9,10,9,11,11,12,11,10,10,10,11,11,10,11,11,11,12,13,12,14,13,13,15,15,15,14,14,12,13,13,13,12,12,11,11,10,11,11,10,10,10,10,9,9,8,9,8,7,7,7,8,7,6,6,5,5,5,4,4,4,4,3,3,4,4,4,4,5,5,5,6,6,6,6,7,7,8,8,8,8,9,8,8,9,8,9,10,10,9,10,10,10,10,11,11,12,11,11,14,12,14,13,11,12,12,13,14,14,14,14,15,15,14,15,14,16,14,15,14,13,14,14,12,12,12,11,11,10,10,10,9,9,9,9,8,8,9,8,7,7,8,7,7,7,6,6,6,5,5,5,6,6,6,7,7,7,8,8,8,8,8,9,9,8,9,9,9,10,9,8,10,10,9,9,8,8,8,8,8,8,8,8,8,8,8,8,7,7,8,7,7,8,8,9,9,9,9,8,9,9,9,9,9,9,8,8,9,8,8,7,8,8,7,7,7,7,7,7,8,7,8,8,7,8,8,8,7,7,7,7,8,6,6,5,5,5,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,4,7,8,9,9,9,11,10,8,10,11,13,14,15,15,18,19,15,15,20,19,16,22,18,22,22,20,24,22,21,23,22,22,22,24,22,20,21,24,21,18,19,23,22,19,23,19,21,21,23,19,18,20,18],[27,27,26,27,27,26,27,27,26,26,25,25,26,25,26,25,27,26,26,27,26,26,27,27,26,27,27,28,28,27,27,28,28,28,28,28,26,28,28,28,28,27,27,28,28,27,27,26,26,26,25,24,25,24,23,22,23,22,21,21,19,18,17,14,14,12,12,12,12,11,11,9,9,9,10,11,11,11,12,11,12,12,13,11,13,14,14,14,15,15,15,15,16,16,15,16,16,16,16,16,17,17,17,16,17,17,17,16,17,17,18,17,16,18,17,16,16,16,15,14,16,15,14,15,15,14,13,14,15,12,14,14,12,12,12,13,13,14,14,14,13,15,15,16,14,16,15,15,15,15,15,13,16,14,15,16,16,16,16,15,14,15,13,15,15,13,13,15,14,12,13,14,14,13,13,14,11,12,12,11,13,11,10,12,12,10,11,12,11,10,12,12,10,11,11,12,12,13,11,12,13,12,13,13,14,13,13,13,14,14,15,14,12,16,14,12,13,14,13,12,13,13,11,11,12,12,10,11,11,11,9,10,10,11,11,12,12,11,11,11,12,11,11,11,10,10,10,9,10,9,9,8,7,8,8,8,9,9,8,7,7,8,8,7,9,8,7,9,9,9,8,9,10,9,9,10,10,10,11,12,11,11,11,11,11,10,10,10,10,9,9,9,10,7,8,8,8,6,8,7,7,8,8,6,7,7,6,5,7,7,5,6,6,6,6,6,5,6,7,7,7,8,8,8,8,9,9,9,9,10,10,11,10,11,12,12,13,14,16,16,18,16,17,19,19,18,19,20,21,19,20,23,23,23,24,24,24,23,25,23,22,23,21,20,21,23,22,21,23,24,24,25,26,25,26,26,27,27,27,27,27,27,27,27,27,27,28,28,28,27,27,28,27,27,26,24,26,26,27,27,26,26,27,25,25,25,24,25,23,24,22,21,21,18,19,15,15,14,12,12,11,9,9,9,8,7,7,6,5,6,6,6,7,8,7,7,8,7,8,9,8,9,10,10,10,11,9,10,9,8,7,9,8,8,9,9,9,11,10,10,10,9,9,9,9,8,8,8,9,8,7,8,7,6,6,6,5,5,4,4,3,3,3,3,2,2,2,2,1,1,0,1,3,3,5,5,5,6,4,5,5,6,6,6,7,6,6,7,7,5,6,7,6,6,6,6,5,6,8,7,6,7,8,8,7,8,10,9,9,10,10,10,10,10,10,11,12,12,12,11,10,10,11,11,13,12,12,13,14,15,16,15,16,15,16,17,16,17,16,14,16,15,15,14,14,14,14,13,12,13,11,12,12,11,11,10,9,9,8,8,8,7,7,7,6,5,6,5,5,5,5,5,4,4,3,4,5,4,4,6,6,5,5,7,6,6,8,7,8,8,8,8,9,9,9,9,9,9,11,11,10,12,12,11,11,13,13,13,13,13,15,14,15,16,14,15,14,15,16,16,15,16,16,17,15,17,17,17,16,16,15,16,15,15,15,14,14,13,13,12,12,11,11,10,10,9,10,9,9,8,8,8,8,8,7,8,6,6,7,6,5,4,6,6,6,8,8,8,8,9,9,9,9,8,10,10,9,9,10,10,10,10,11,10,10,10,9,9,9,9,9,8,9,8,9,8,8,8,7,8,8,8,8,8,9,9,10,10,9,10,10,10,10,10,9,9,9,9,9,9,9,8,8,8,7,7,7,7,8,8,9,8,8,9,8,8,9,9,7,7,7,7,8,6,7,6,5,4,5,4,4,5,4,4,4,4,4,3,4,4,3,4,5,5,6,8,9,8,9,11,10,9,10,11,13,14,13,16,16,18,15,15,18,19,15,20,17,21,21,20,24,23,20,22,24,22,22,23,22,21,20,22,21,18,17,22,22,18,20,19,20,20,21,20,17,18,17],[26,26,26,26,27,27,27,27,27,26,26,26,27,26,26,26,27,27,27,27,27,28,27,28,28,28,28,28,28,28,28,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,28,28,28,27,28,27,26,26,26,25,25,26,24,23,22,23,20,19,19,16,19,17,17,18,18,16,17,14,17,17,18,19,18,18,16,18,18,17,19,19,20,19,19,20,20,20,21,22,20,20,20,20,20,19,22,20,19,20,21,20,19,20,21,20,20,21,20,22,20,19,20,20,18,19,19,21,18,18,19,19,17,19,19,16,17,18,17,16,17,17,17,18,18,18,18,20,19,19,19,21,20,19,20,20,19,20,20,19,20,21,20,19,19,18,19,20,19,19,20,19,19,20,21,19,18,18,19,18,17,18,16,16,15,15,18,16,15,15,18,14,14,16,16,14,15,17,15,15,15,16,17,18,15,17,18,18,17,17,18,17,19,18,19,19,19,18,17,19,18,17,19,19,17,18,18,18,17,18,17,16,15,17,17,16,15,17,16,15,17,17,17,16,16,16,18,17,16,17,16,16,15,15,15,13,13,13,12,12,11,12,13,12,11,12,12,14,14,11,14,14,12,15,15,15,14,15,17,14,16,15,15,15,17,17,17,17,17,18,16,16,16,16,16,14,17,15,16,14,15,14,14,13,15,14,14,14,15,14,15,14,12,13,12,11,8,10,10,9,8,8,9,10,12,11,13,13,13,13,13,14,14,15,15,17,15,16,16,17,16,19,18,18,21,21,22,21,20,22,22,22,22,24,23,23,25,26,25,25,26,25,27,24,26,25,24,24,24,22,24,24,24,22,23,24,26,26,26,26,26,27,27,27,28,28,27,27,27,27,28,28,28,28,27,28,27,28,27,27,27,26,27,27,27,27,27,27,27,26,26,26,26,26,25,25,24,23,23,21,21,18,19,17,17,15,17,13,14,14,13,11,11,9,9,8,7,9,9,8,9,10,10,9,11,11,10,11,11,13,11,12,9,10,8,10,9,9,9,9,10,10,11,13,12,12,14,13,12,12,12,10,11,12,11,10,11,11,11,10,10,8,9,8,8,7,8,6,5,5,6,5,5,4,3,3,1,0,1,3,5,5,5,7,7,7,7,9,10,10,13,11,10,11,13,11,11,12,12,11,11,13,11,12,13,13,12,13,14,13,13,14,15,14,14,16,16,16,15,15,15,15,17,15,15,17,15,15,16,17,18,17,17,18,19,20,20,19,20,20,19,19,19,20,20,19,20,20,20,19,20,20,19,19,19,19,18,17,18,18,18,16,17,16,15,15,15,13,13,13,13,12,14,11,11,10,9,9,9,8,7,8,10,8,9,13,12,10,11,12,12,11,13,12,13,12,13,14,14,14,14,17,16,14,16,16,17,17,18,18,18,17,19,18,19,20,19,20,19,20,21,20,21,20,19,20,20,19,20,21,18,19,21,20,20,20,19,21,19,19,19,20,18,18,17,19,18,18,19,17,18,17,17,17,15,14,15,14,13,13,13,14,12,11,13,12,9,9,10,10,11,13,13,13,12,13,12,14,13,13,14,14,15,14,15,16,17,16,15,17,16,16,16,15,17,15,15,13,15,13,13,13,13,13,12,13,13,12,13,13,12,15,14,17,15,14,15,15,16,14,17,14,14,15,13,13,14,14,14,13,12,11,11,10,11,11,14,12,13,11,12,10,12,12,11,11,11,12,10,10,10,8,7,9,8,5,6,7,6,5,6,6,6,6,6,6,5,6,8,7,8,9,10,9,9,10,10,9,10,11,13,14,15,15,17,21,17,15,18,21,18,22,18,22,21,22,24,24,22,23,24,24,22,23,24,21,20,24,23,19,18,22,24,21,22,17,20,19,22,21,16,18,18],[28,29,28,28,29,28,29,29,28,28,28,27,28,28,28,28,28,28,28,29,29,29,29,29,29,30,29,29,30,29,29,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,29,28,29,28,27,27,28,27,25,26,26,26,24,25,23,21,22,19,20,18,18,17,17,17,18,16,16,16,17,16,16,17,18,17,17,17,18,17,18,18,18,19,20,19,20,20,20,20,20,20,19,19,20,20,20,20,20,20,20,20,20,19,20,19,20,20,20,21,19,19,19,19,18,19,19,18,18,17,20,18,17,19,18,17,18,18,17,16,16,17,18,18,18,18,18,19,20,19,18,19,20,19,18,19,19,18,20,18,19,20,20,20,20,18,20,18,18,19,20,18,18,20,19,17,19,19,18,18,18,18,16,16,17,17,17,16,15,17,17,15,16,16,15,15,17,16,16,16,16,17,18,18,18,19,18,18,19,19,19,17,19,19,19,18,19,20,18,19,18,18,17,19,18,17,17,18,16,16,17,17,15,16,17,17,14,16,15,15,15,15,17,15,15,16,17,16,16,16,16,16,15,15,15,12,13,14,12,12,12,13,14,12,11,10,12,14,13,12,15,14,13,14,16,16,14,17,16,16,17,17,18,17,17,17,18,16,16,16,16,16,15,16,15,14,14,15,15,14,15,16,14,13,14,15,14,14,14,12,13,14,13,11,12,13,10,11,11,11,9,11,11,12,11,11,12,12,13,13,14,15,16,16,16,16,16,16,17,16,17,19,18,18,20,20,21,22,21,23,23,23,23,24,25,24,25,27,26,26,27,26,27,26,27,25,24,25,24,23,24,24,24,24,24,25,26,25,26,26,27,28,28,28,28,28,28,28,28,28,28,29,29,29,28,28,28,28,28,27,28,27,28,28,27,29,28,28,29,27,28,28,27,27,26,26,25,23,24,22,22,19,18,19,15,15,15,14,15,13,13,12,11,10,11,10,10,11,11,10,10,10,10,10,10,11,11,12,11,12,12,11,11,11,10,10,10,10,11,10,10,11,11,13,13,12,14,13,12,12,13,11,11,12,13,11,10,11,11,12,11,11,12,10,10,10,9,10,7,7,6,6,4,4,4,2,1,1,0,1,3,4,5,6,8,8,9,10,10,11,12,11,10,11,12,10,10,11,11,9,11,11,13,12,12,12,13,15,16,14,14,16,16,15,16,17,16,15,15,15,17,16,16,16,17,17,16,18,18,17,18,18,18,18,19,20,21,20,20,19,21,22,21,22,21,20,21,21,20,19,20,19,19,18,17,16,16,17,17,17,16,16,16,15,14,14,15,14,14,13,11,11,11,11,11,11,11,10,10,11,8,10,11,11,11,13,12,12,11,14,13,13,14,13,15,14,15,15,16,15,16,17,16,15,17,16,16,17,18,17,17,18,19,18,18,18,20,21,20,20,20,19,18,21,21,21,21,20,20,21,19,20,21,21,21,19,20,20,19,19,19,19,18,18,17,19,19,17,17,17,16,17,16,16,16,14,15,14,15,14,14,14,13,12,13,13,11,11,13,13,13,13,15,14,13,13,15,15,14,14,14,15,17,15,15,17,17,15,16,16,15,16,16,16,15,15,15,14,15,14,13,14,14,13,14,13,13,13,14,14,13,14,15,15,13,13,15,14,14,16,15,13,13,15,14,13,14,15,14,13,12,11,11,11,12,12,12,12,13,11,12,13,13,13,12,12,12,12,13,12,11,11,10,11,10,10,11,10,8,8,10,8,8,8,8,8,7,8,10,8,9,10,10,10,11,11,11,9,11,11,15,15,16,16,16,18,16,17,19,20,19,22,20,21,21,22,25,23,22,23,24,24,21,25,24,21,22,25,23,21,20,24,24,21,24,19,22,19,23,20,18,19,18],[28,28,28,28,29,29,29,29,29,27,28,27,28,28,28,28,28,29,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,30,29,30,29,29,29,29,30,30,30,29,30,29,29,28,29,29,28,28,28,28,27,27,26,27,26,26,25,25,23,22,22,20,21,21,20,22,22,19,21,18,20,21,20,21,21,22,21,21,22,23,21,23,24,23,23,23,23,23,24,24,23,24,24,23,23,24,24,24,23,23,23,23,23,22,23,22,23,23,24,24,24,24,22,23,22,22,22,22,21,21,22,22,21,22,22,20,21,22,21,20,20,20,21,21,23,21,22,23,22,22,22,24,23,22,23,24,22,22,24,22,23,24,23,23,23,22,23,23,22,22,23,22,21,23,23,22,21,22,22,21,21,22,20,21,21,21,21,19,19,21,20,18,20,21,20,18,21,20,19,19,20,19,21,21,19,22,22,21,21,22,22,22,22,23,23,23,22,22,21,23,22,20,22,23,21,21,21,22,20,20,21,20,18,20,21,20,18,20,19,20,19,21,20,19,19,20,21,19,19,20,19,19,18,18,18,17,18,18,17,14,14,17,17,15,13,14,15,18,18,15,18,18,16,17,19,19,16,19,19,18,19,19,20,19,21,22,19,21,19,21,20,19,19,21,19,17,18,19,19,17,18,18,17,16,19,17,17,17,19,16,15,17,15,16,15,17,15,15,16,15,14,15,15,16,16,14,14,15,16,16,17,17,18,18,19,19,18,19,20,20,21,23,22,21,24,23,25,25,24,24,25,25,26,26,25,26,26,27,27,28,28,27,28,27,28,26,26,27,27,24,26,26,26,26,26,26,27,27,27,27,28,28,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,27,28,28,29,29,29,29,28,27,28,28,28,27,27,27,26,25,26,23,24,21,21,20,18,17,20,18,19,18,17,16,14,14,14,14,14,13,15,14,13,13,14,13,14,15,15,14,16,16,16,16,14,13,13,14,14,13,14,14,14,14,16,18,16,17,19,19,16,17,17,14,16,16,16,14,15,16,15,16,14,17,14,16,12,14,12,11,9,9,8,7,7,7,6,4,5,3,1,0,2,4,4,6,9,10,11,14,14,15,16,15,15,14,15,15,13,15,15,13,14,15,15,15,16,15,15,16,18,17,17,18,19,18,18,20,20,20,20,21,20,20,21,19,20,20,18,20,21,21,22,21,21,23,23,23,24,23,23,24,24,24,23,23,24,22,22,23,25,22,22,23,23,23,22,22,22,21,23,20,20,20,19,19,18,18,18,16,16,16,15,14,15,15,15,15,17,15,12,14,10,13,14,14,13,17,16,14,14,15,16,14,15,15,16,17,17,17,18,18,19,20,20,19,21,20,21,20,21,22,23,22,22,21,23,23,22,23,23,24,24,23,24,24,24,25,23,24,23,25,23,23,24,23,23,23,22,24,23,22,23,22,21,20,20,22,22,22,22,22,21,20,19,21,20,17,18,19,18,16,16,16,15,15,15,15,13,14,15,14,16,16,15,16,17,16,16,17,18,16,19,20,21,18,19,20,21,20,20,21,19,20,20,20,20,20,19,18,20,18,17,17,18,16,16,16,17,17,18,18,18,18,18,20,18,17,18,19,18,19,20,17,18,20,18,18,17,19,18,17,16,15,14,16,14,16,18,17,18,16,17,16,17,17,14,15,14,16,15,14,12,13,12,12,12,10,12,12,9,8,9,11,8,9,10,9,7,9,11,10,11,12,11,10,10,11,9,9,11,13,12,14,14,16,19,20,17,20,20,21,19,24,21,22,24,24,25,25,22,24,25,24,22,26,25,23,22,26,24,21,20,23,25,22,24,19,22,19,23,21,20,20,20],[27,27,27,27,28,28,28,28,28,27,27,27,28,27,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,29,29,29,28,29,28,28,28,28,27,26,26,26,26,24,24,23,24,23,23,24,24,22,22,19,22,23,23,23,24,24,22,24,24,23,24,24,24,25,24,24,26,25,25,25,25,25,25,26,25,25,25,25,25,24,24,25,25,23,23,24,24,25,25,25,24,25,23,23,24,23,23,24,22,22,24,24,22,23,23,21,21,23,22,21,20,22,23,23,24,23,23,24,24,23,24,25,25,24,24,25,24,25,24,24,24,26,26,24,26,24,25,25,25,24,26,24,24,24,25,23,23,24,24,23,22,23,20,22,21,21,22,21,21,21,23,19,20,21,21,20,21,21,21,22,21,21,22,22,21,22,24,23,22,22,23,23,24,24,24,24,24,24,23,25,24,24,24,24,23,22,23,24,22,22,23,22,20,21,22,21,20,21,21,21,22,23,22,21,22,21,22,20,21,21,20,20,20,19,19,18,19,18,18,16,17,18,18,18,17,17,17,19,19,17,20,19,18,22,20,20,19,21,22,19,21,21,21,21,23,23,22,22,23,23,22,21,21,22,21,19,21,19,22,20,19,20,20,17,21,20,19,19,20,20,19,20,17,17,19,17,16,17,17,15,14,16,16,19,18,18,21,19,19,20,19,20,21,21,22,23,21,22,22,22,23,24,24,24,25,24,26,26,25,26,26,27,27,27,27,27,28,28,28,28,29,28,29,28,28,27,27,28,27,26,26,27,27,26,26,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,28,29,28,29,29,29,29,29,28,28,28,28,28,28,27,27,26,26,24,25,21,23,21,21,21,23,19,21,20,21,20,17,19,17,17,17,18,18,17,16,17,17,16,17,18,18,17,18,20,18,18,15,16,14,17,16,16,17,17,16,17,17,20,18,21,21,21,19,21,20,18,19,21,20,17,18,20,18,18,17,18,17,16,16,14,14,13,12,12,9,10,10,9,8,8,9,6,5,1,0,2,3,5,8,8,11,11,15,15,17,17,16,15,16,17,16,17,16,16,18,17,17,18,18,18,17,20,20,19,20,19,22,20,20,21,22,21,22,21,23,21,23,20,22,23,21,22,21,23,24,24,24,24,24,25,26,24,25,25,25,25,25,25,26,24,25,25,25,25,25,25,25,24,25,24,24,23,24,24,23,21,22,22,20,20,21,20,19,19,19,18,17,18,17,17,17,15,13,13,13,15,17,16,16,20,19,17,18,18,20,19,19,16,19,19,20,21,21,21,20,24,23,20,22,22,23,24,24,24,24,23,24,24,25,25,25,26,26,26,25,25,26,26,26,26,25,26,25,25,24,24,27,24,26,25,24,25,24,24,25,25,24,24,23,24,24,23,24,23,24,24,22,23,22,19,21,21,20,20,19,20,19,19,20,19,18,17,20,20,19,21,20,21,20,21,21,23,19,21,22,21,23,21,21,22,23,22,22,24,22,23,23,22,24,22,21,20,23,21,19,20,21,19,20,20,20,20,21,20,21,22,20,22,21,20,22,22,21,23,22,22,22,22,21,22,22,21,20,20,20,19,21,19,19,20,20,19,21,20,20,21,20,21,19,18,18,19,20,19,16,17,15,16,14,14,15,15,12,13,12,11,10,11,11,10,8,10,12,11,11,14,13,11,10,11,10,11,12,15,15,16,17,16,19,20,19,19,21,22,19,23,20,23,23,23,27,26,23,24,26,24,24,27,25,20,22,26,25,21,21,23,26,22,25,20,22,20,23,21,19,20,21],[29,29,28,29,29,29,29,29,29,29,28,29,29,28,29,28,29,29,29,29,29,29,30,30,29,30,30,29,30,30,29,30,30,30,30,30,29,30,30,30,30,30,29,30,30,30,29,29,29,29,28,28,28,28,27,28,28,27,27,26,27,25,26,24,24,24,26,23,25,24,25,22,23,22,22,24,25,24,25,25,23,24,25,24,23,25,25,25,26,26,25,26,26,26,26,26,25,26,26,26,26,26,26,25,26,26,25,25,24,25,26,26,26,26,26,26,24,25,24,24,25,24,24,24,25,23,23,25,24,21,23,25,21,21,22,22,24,25,25,25,24,25,26,26,24,26,26,24,24,26,25,23,25,26,25,25,26,26,25,25,27,26,26,26,26,24,25,26,24,24,25,25,22,23,24,23,20,23,22,22,23,20,20,23,22,19,22,22,20,20,22,22,20,22,22,23,22,23,21,24,24,23,24,24,25,24,25,25,25,24,26,26,24,26,25,22,25,25,22,20,23,24,21,20,23,21,19,22,23,21,20,22,24,23,23,24,23,22,22,22,22,24,23,22,21,21,20,20,21,19,20,19,17,17,18,19,19,18,16,18,18,20,19,19,21,20,21,21,20,20,20,22,22,21,23,23,23,22,24,24,21,23,21,24,23,20,20,22,20,19,20,21,21,20,21,22,20,20,23,22,22,22,23,21,22,22,20,19,20,18,16,19,18,17,14,17,17,20,20,21,22,23,23,22,22,24,24,23,23,25,23,24,23,23,24,23,24,24,24,24,26,26,25,27,26,27,26,27,28,27,28,29,29,28,29,29,29,28,29,28,27,28,27,25,27,27,27,26,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,30,30,30,30,29,30,29,30,29,29,29,29,29,29,29,30,30,29,30,28,29,28,28,28,28,28,27,26,26,24,26,22,23,22,23,23,24,23,23,24,24,24,21,22,20,19,19,21,21,21,20,22,21,21,20,22,21,22,21,22,20,21,19,20,17,19,18,19,21,20,19,22,19,21,22,23,23,23,22,23,24,23,22,23,24,22,21,23,23,21,20,19,19,16,15,17,13,13,14,12,11,11,11,10,7,9,9,6,5,4,2,0,2,3,6,7,9,12,12,14,16,15,15,14,17,14,14,19,18,15,18,20,21,21,21,19,22,21,21,20,22,23,22,21,23,24,22,22,23,23,23,23,23,22,23,24,22,23,24,23,24,24,24,24,25,26,26,25,26,26,26,26,26,26,27,26,26,26,26,26,26,25,26,25,25,25,25,25,24,23,24,23,21,21,21,22,21,21,22,21,20,20,20,19,17,17,17,15,15,15,15,14,18,17,18,21,20,21,22,20,22,21,21,21,21,22,24,21,22,24,24,24,23,24,25,25,23,26,26,25,24,26,26,26,25,25,26,26,26,26,26,25,25,26,26,26,26,26,26,25,25,26,26,26,26,26,25,26,25,26,25,25,26,25,25,25,26,25,24,24,25,23,22,24,23,21,22,23,22,21,21,23,22,21,22,22,22,21,23,21,22,23,24,23,22,24,23,24,23,21,25,25,25,23,25,24,23,24,25,24,25,24,25,23,24,25,24,21,24,25,23,21,24,23,23,22,24,23,23,22,23,24,23,24,23,23,23,23,24,24,24,23,24,24,22,25,24,24,23,24,24,24,23,22,22,24,22,22,24,23,22,24,22,22,22,22,20,22,22,21,20,19,20,20,19,15,17,19,16,16,14,17,13,12,16,12,8,9,14,13,12,14,14,12,12,14,12,12,13,13,15,16,17,19,20,22,19,19,22,22,21,24,22,23,24,24,25,26,24,25,26,25,23,26,26,24,23,26,25,22,22,24,26,24,24,21,24,23,24,22,20,21,21],[28,28,28,28,29,28,28,29,28,28,27,27,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,29,28,28,28,28,26,26,26,25,25,25,23,25,24,24,24,25,22,22,19,21,23,24,22,25,24,22,23,25,23,22,24,25,24,25,24,26,25,25,25,26,26,24,25,25,25,25,25,24,25,25,24,24,24,23,24,25,24,25,25,25,25,23,25,22,23,24,23,22,22,23,22,21,23,23,20,22,23,21,21,22,21,23,23,24,23,23,24,24,23,22,25,24,22,24,25,24,22,25,24,24,25,25,24,24,25,26,25,25,25,25,23,24,25,23,22,23,24,21,21,23,22,19,22,22,21,21,19,18,21,20,17,21,22,19,19,21,20,19,21,22,21,23,22,21,23,24,23,23,24,24,24,24,25,24,23,25,25,23,25,24,21,24,24,21,19,22,23,20,20,22,20,17,20,21,20,17,21,21,21,22,23,21,22,22,21,20,20,22,20,20,19,19,19,18,16,17,18,14,15,16,17,18,16,16,15,14,19,17,15,19,18,17,20,19,20,19,21,21,20,21,22,22,21,23,23,21,22,21,23,22,19,20,21,19,18,20,18,18,18,19,19,15,14,18,20,19,19,19,18,20,19,16,17,18,17,12,18,18,16,13,17,16,21,19,19,20,20,21,20,20,21,22,22,21,24,23,23,23,23,24,26,25,24,25,25,25,26,26,27,26,27,28,27,27,28,27,28,28,28,29,29,29,29,29,28,28,28,28,27,28,27,27,28,27,27,28,28,28,28,29,29,30,29,29,29,29,29,29,29,30,30,30,30,30,29,30,29,29,29,29,29,29,28,29,29,29,29,29,28,29,28,28,28,27,27,26,26,26,24,26,22,23,23,22,23,23,22,22,22,21,21,19,18,18,17,17,18,18,17,17,18,18,17,19,19,20,18,20,21,20,20,18,16,16,16,15,17,17,19,18,17,19,21,19,22,22,22,20,21,21,20,20,21,21,18,20,20,18,20,18,17,16,13,14,15,13,11,13,12,10,10,10,9,7,9,9,7,7,5,4,1,0,2,3,5,5,9,9,11,12,12,9,10,13,9,9,14,14,11,17,16,15,18,19,17,17,21,20,18,20,21,22,20,22,22,22,22,22,23,22,22,22,22,23,23,21,23,23,23,23,23,23,24,24,25,25,24,25,25,25,26,26,25,26,25,25,25,25,25,24,25,25,25,25,24,24,24,23,23,23,22,20,21,21,19,18,20,19,18,16,17,18,15,13,15,14,9,11,12,11,9,14,16,15,17,17,18,20,19,20,20,20,19,19,21,22,20,22,23,23,24,23,23,23,24,25,25,25,24,25,25,25,25,25,25,25,26,26,25,26,24,25,25,25,25,25,25,26,25,24,25,25,25,26,25,25,25,25,25,24,25,25,25,24,25,26,24,24,24,24,22,23,24,23,19,22,22,20,20,21,20,19,20,21,21,19,19,20,21,21,22,21,22,22,21,22,23,22,22,24,23,24,23,24,24,24,24,23,24,24,24,24,22,24,24,23,20,24,23,21,22,23,21,20,23,22,22,23,22,23,24,23,24,24,23,23,23,24,24,24,24,23,24,24,23,23,23,23,22,21,20,20,19,20,21,21,22,22,21,22,21,22,22,20,21,19,20,20,20,18,17,17,18,17,16,17,18,15,13,14,16,10,10,12,11,7,7,9,12,11,14,13,13,12,14,13,11,13,14,17,17,19,20,21,23,22,22,23,24,22,25,23,24,25,24,27,26,25,26,26,26,25,26,26,24,25,26,25,23,24,25,26,24,25,23,24,23,24,22,21,22,21],[29,29,29,29,29,29,29,29,29,28,28,28,29,28,28,28,29,29,28,29,29,29,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,28,27,28,28,27,27,26,26,25,24,23,22,21,21,21,20,21,21,18,19,16,18,20,21,19,21,21,18,20,22,20,19,21,21,22,23,22,23,24,23,23,23,24,21,24,24,23,23,23,23,22,22,23,22,21,22,22,23,23,22,23,22,22,21,21,20,22,22,22,21,20,21,20,20,21,22,19,20,21,20,19,20,19,21,22,22,23,21,22,24,22,20,24,23,20,21,23,22,19,22,22,22,22,24,22,22,22,23,22,22,23,23,20,21,23,20,19,20,22,18,19,21,20,18,20,20,18,20,18,16,20,19,17,19,21,18,17,20,19,20,19,20,20,21,21,20,21,22,21,21,22,22,21,21,21,22,21,23,23,21,22,22,20,21,23,20,18,20,21,18,17,20,18,16,17,18,17,15,17,18,18,19,19,18,19,19,19,18,18,17,17,16,14,14,16,14,14,13,15,13,13,13,14,15,13,14,12,13,15,14,14,14,17,15,17,18,18,16,19,18,18,19,20,21,20,20,21,19,21,17,20,19,18,17,18,17,16,17,16,15,16,17,16,13,14,14,16,16,16,16,13,16,14,14,13,14,13,9,14,13,10,9,13,14,16,14,15,16,16,16,16,17,18,19,18,19,20,19,19,20,19,21,22,22,21,23,23,24,24,25,26,26,26,27,27,27,27,27,28,29,28,29,29,29,29,29,28,27,28,27,26,27,27,27,27,27,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,30,30,30,30,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,28,29,29,28,27,27,27,26,26,25,23,24,22,21,21,20,20,20,18,18,19,18,17,16,16,15,16,15,16,17,17,16,16,17,17,18,18,19,18,19,19,19,20,18,17,16,15,15,15,16,16,17,17,18,19,19,20,20,20,19,18,19,18,18,18,18,16,16,17,16,16,16,16,14,9,11,13,9,8,10,11,7,8,10,7,6,8,9,7,7,5,6,3,2,0,1,3,4,6,7,9,10,9,8,10,12,10,10,13,13,11,14,14,15,15,16,15,15,18,18,17,17,19,19,17,19,20,19,18,20,19,20,20,20,20,20,20,19,20,20,19,20,21,20,21,21,22,24,24,22,23,23,23,24,24,24,23,23,23,24,22,23,22,23,21,21,21,21,20,20,19,19,19,17,18,16,16,16,17,17,16,15,15,14,14,11,12,10,9,9,10,10,9,13,13,11,14,15,15,15,17,17,16,17,17,17,17,19,18,18,20,21,20,19,19,21,21,20,22,23,21,22,22,23,22,22,22,23,22,23,24,22,22,22,22,23,24,24,23,24,23,23,23,23,23,24,24,22,23,23,22,22,22,21,21,21,22,22,21,19,20,20,19,18,19,19,16,17,19,17,17,17,17,16,16,17,17,16,16,17,17,17,18,19,18,18,20,21,20,19,18,20,20,21,19,20,21,20,20,21,21,20,20,19,18,19,20,19,17,19,20,18,17,20,18,17,18,19,19,20,19,19,20,20,22,20,20,20,20,21,21,21,20,20,20,19,19,19,19,19,18,17,17,16,17,16,18,18,18,19,18,19,20,19,20,18,20,17,20,17,17,16,15,16,16,15,15,15,16,11,12,12,12,9,9,9,10,6,6,10,9,9,11,13,10,11,13,13,11,13,13,17,17,17,18,22,23,19,21,24,22,21,24,22,24,26,24,27,27,25,26,27,27,26,27,28,26,25,27,27,23,24,26,27,25,26,24,25,24,26,23,20,22,22],[29,29,28,28,29,29,29,29,29,28,28,28,29,28,28,28,28,28,28,29,28,28,29,29,28,29,29,29,29,29,28,30,29,30,29,30,29,29,30,29,29,29,29,29,29,29,28,28,28,28,27,27,27,27,26,26,26,25,25,25,24,22,21,21,20,19,19,18,19,18,19,17,16,14,15,16,18,16,19,18,15,17,19,17,15,19,19,20,20,19,20,20,20,21,19,20,18,20,20,20,20,20,19,19,20,19,18,19,18,18,19,19,19,19,19,19,18,18,17,17,18,19,17,17,18,16,16,18,17,15,16,18,15,16,17,17,17,18,18,18,18,18,19,18,16,20,19,15,17,20,18,16,19,19,19,19,20,19,20,19,20,20,20,20,20,17,18,19,17,16,17,17,15,14,16,15,13,15,15,14,14,13,13,15,14,13,14,15,14,14,16,15,15,16,16,18,18,17,17,19,18,18,19,19,19,19,19,19,19,19,19,19,18,19,17,16,17,18,16,14,16,16,14,14,16,14,13,14,15,14,12,14,15,15,16,17,15,14,15,14,14,14,12,13,13,11,10,12,10,9,10,11,8,8,9,11,12,12,10,9,9,12,11,11,13,13,12,14,14,14,14,16,15,14,17,16,18,16,18,17,15,17,14,17,16,14,14,15,14,14,14,13,13,12,13,12,9,9,10,13,12,13,11,11,12,11,10,10,12,9,8,11,10,8,7,11,11,14,12,13,14,15,14,13,15,16,18,16,17,18,17,19,17,18,19,19,20,20,21,21,23,23,23,25,25,24,25,26,26,25,26,27,27,28,28,28,28,27,28,26,26,26,25,24,25,26,26,25,26,26,27,27,28,27,29,28,29,29,29,28,28,29,28,29,29,29,29,29,29,28,29,29,29,28,28,28,29,28,28,28,28,28,28,27,28,27,27,26,26,26,24,24,23,21,21,19,19,18,18,18,17,17,17,18,16,16,12,15,12,12,12,15,15,14,15,16,16,15,15,16,17,16,16,17,16,17,16,16,14,13,13,13,14,13,16,15,16,16,16,17,18,17,16,17,16,16,16,16,16,16,12,14,15,13,13,11,11,10,9,11,8,7,9,8,6,6,7,6,6,7,8,7,6,7,7,5,3,2,0,1,3,4,5,6,7,8,7,7,8,7,8,9,9,9,11,10,10,10,12,11,12,14,14,14,15,16,15,15,18,18,17,16,17,17,17,17,17,17,17,18,17,17,18,16,18,18,16,17,19,21,20,19,19,20,20,21,21,21,21,20,20,21,21,20,20,19,20,19,18,18,18,18,18,16,16,16,14,15,14,14,14,13,13,11,11,9,9,11,9,9,10,7,8,8,8,8,9,10,10,10,10,10,11,12,13,13,14,14,14,16,16,15,16,17,18,16,17,17,18,18,17,19,20,19,18,20,20,20,19,19,20,21,20,20,20,19,19,21,20,21,21,20,20,20,19,20,21,21,21,21,20,21,20,20,19,19,19,20,19,19,19,18,16,17,17,16,16,17,17,15,14,16,14,15,15,15,11,12,14,11,11,11,15,14,13,16,17,15,16,17,16,16,17,16,18,17,18,17,19,18,18,18,18,18,19,17,18,16,15,18,17,16,16,17,16,15,17,17,15,15,17,17,17,16,17,17,17,17,16,17,17,17,17,18,18,17,17,17,17,18,17,17,17,16,16,15,15,15,16,17,17,16,16,16,16,16,17,17,16,16,15,16,15,13,14,12,12,10,11,10,11,10,10,10,9,10,8,8,9,8,6,4,10,8,8,10,11,10,10,13,12,10,12,13,15,16,17,18,20,23,19,18,22,22,19,23,20,23,25,23,25,25,25,25,25,25,25,26,26,25,24,26,26,23,23,26,25,24,25,23,24,24,25,23,20,23,24],[28,28,27,27,27,27,28,27,27,27,27,27,27,26,27,27,27,27,27,27,28,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,28,28,28,28,28,27,27,28,27,27,27,27,26,25,26,25,25,24,24,23,21,20,18,18,17,17,16,16,15,15,14,12,10,12,13,14,12,14,14,12,13,16,13,11,15,15,16,16,15,16,16,16,16,16,16,14,16,18,16,16,17,18,16,17,17,17,16,16,17,18,17,16,16,15,18,15,18,15,16,16,14,15,14,15,13,14,14,14,13,16,14,12,14,14,15,16,14,15,16,15,14,16,15,13,16,15,13,13,16,14,12,14,14,15,16,16,16,16,17,18,15,16,17,15,13,14,16,13,12,13,14,12,12,13,13,10,12,13,11,12,11,11,12,12,10,12,13,12,11,13,12,13,14,13,15,16,14,14,16,16,15,16,16,16,15,15,15,16,14,16,16,14,16,14,13,13,14,13,12,13,13,12,12,12,12,9,11,11,9,8,11,10,12,13,13,13,12,12,13,12,10,9,10,9,9,9,9,8,9,9,8,6,8,8,10,10,10,9,7,7,9,10,10,10,11,9,11,12,12,11,14,13,12,13,13,14,13,14,14,12,13,12,13,12,12,12,12,11,10,12,10,9,10,10,8,7,6,8,10,9,10,9,8,10,8,8,8,9,8,7,9,8,7,8,8,9,12,11,11,12,13,11,11,11,14,14,14,14,16,15,16,16,17,18,19,19,18,20,20,21,21,21,23,22,23,24,24,24,25,24,25,27,27,27,27,27,27,27,26,25,27,24,24,26,25,25,25,25,26,27,26,27,26,28,28,28,27,28,28,28,28,28,28,28,28,29,28,28,27,28,28,27,28,27,26,27,27,28,28,27,27,27,26,27,26,26,25,24,24,22,23,21,20,21,18,19,17,17,16,15,13,14,14,14,12,11,12,12,11,11,12,12,12,13,13,13,14,15,15,15,15,16,17,16,17,14,13,13,12,13,12,12,14,13,13,15,16,15,17,17,16,15,15,15,14,13,16,13,12,12,13,12,11,11,11,10,7,8,9,8,7,7,7,6,6,6,6,5,6,6,6,5,6,6,5,4,3,1,0,1,2,3,3,6,4,4,5,6,5,6,7,7,7,9,9,8,9,11,10,10,11,11,11,12,12,13,12,12,14,14,13,13,14,13,14,15,15,15,14,13,13,14,13,14,14,13,14,15,16,17,17,16,18,18,19,17,18,18,17,17,17,17,16,17,16,16,15,15,14,14,14,14,14,13,12,12,12,11,11,11,12,12,9,9,10,10,7,6,7,7,5,5,7,6,5,7,8,8,9,9,9,10,12,12,11,13,11,12,12,12,12,12,13,13,14,14,13,14,14,14,15,16,16,15,16,17,16,16,15,17,16,17,17,15,15,15,17,18,17,17,17,17,17,17,17,17,18,18,18,17,17,18,17,17,17,16,16,16,16,16,14,13,14,14,13,13,14,13,11,12,13,12,12,13,13,10,11,14,11,10,11,12,11,12,14,13,13,14,13,13,14,13,13,14,13,14,13,15,16,15,15,15,16,16,15,14,13,14,15,14,13,14,13,13,13,14,14,13,14,14,14,15,14,14,16,15,16,16,16,15,15,15,16,16,15,16,15,15,16,15,14,14,14,13,12,13,14,13,14,14,14,16,14,15,14,15,17,14,14,12,14,13,12,12,12,11,11,10,9,10,9,9,7,8,9,6,6,5,6,4,5,7,6,8,9,12,10,10,11,12,12,11,12,16,16,18,18,22,22,18,19,23,22,18,24,20,22,24,24,26,25,25,24,26,25,25,26,26,24,24,26,26,22,22,25,25,24,25,22,24,24,24,22,20,23,24],[29,29,29,29,29,29,29,29,29,28,28,28,29,27,28,27,28,28,28,28,28,27,28,28,27,28,29,28,29,29,27,29,29,30,28,29,28,29,29,29,29,29,28,28,28,28,27,27,27,26,26,26,26,25,24,26,25,24,23,23,22,19,17,15,14,13,12,12,12,11,11,10,9,7,8,9,9,10,10,10,9,10,11,10,9,10,11,12,12,11,12,12,11,12,12,12,11,12,12,12,12,12,13,12,13,13,13,13,12,13,14,13,12,13,12,12,12,12,12,11,12,11,11,11,12,10,11,11,11,10,11,10,9,11,11,12,10,12,11,12,12,11,11,11,10,11,11,10,10,12,10,10,10,10,11,12,12,12,13,13,13,12,12,12,11,10,11,11,10,10,10,9,9,9,9,9,8,9,9,9,9,9,8,9,9,8,9,9,9,9,10,8,9,10,10,12,12,11,11,12,12,12,12,14,13,12,12,12,12,12,12,11,11,11,10,10,10,10,10,8,9,9,9,8,8,9,7,8,8,7,6,8,9,9,10,10,9,9,10,9,9,8,8,8,7,6,6,6,5,5,6,5,5,5,6,6,7,7,7,5,5,6,6,6,7,7,6,8,9,9,8,10,9,9,9,9,11,11,10,10,10,9,9,9,8,9,8,9,8,7,8,7,6,6,7,5,5,5,5,6,7,8,6,6,7,6,5,6,6,5,5,6,6,5,5,7,7,9,9,9,9,10,10,9,9,10,10,11,10,11,11,13,12,12,14,15,16,17,18,19,20,19,20,23,22,22,23,24,24,25,26,26,27,26,27,27,28,27,28,25,26,26,24,24,25,25,26,24,26,26,27,28,28,27,28,28,28,28,29,28,28,29,29,29,28,29,29,29,28,28,28,28,28,28,28,27,28,28,27,28,28,26,28,26,26,26,26,26,24,24,23,22,21,20,19,17,16,15,14,13,13,10,11,11,10,9,9,9,9,10,9,10,11,11,11,11,12,12,11,12,13,13,12,14,14,13,13,12,12,11,11,11,11,11,13,13,13,14,13,13,14,13,13,11,12,11,11,11,11,10,10,10,9,9,9,8,7,6,6,6,5,4,5,5,5,4,5,5,4,5,6,6,5,6,7,6,5,3,2,1,0,1,3,2,4,4,3,4,4,4,4,5,5,4,6,7,6,7,7,8,7,9,8,8,9,9,10,10,10,10,10,9,10,11,11,12,12,13,12,12,11,11,11,11,12,12,10,11,12,12,12,13,13,14,15,14,14,14,14,13,13,13,13,13,12,11,12,12,11,11,11,10,10,10,10,9,9,9,9,8,7,8,8,7,6,7,7,6,5,5,5,4,3,6,5,4,6,6,6,6,8,7,7,8,9,8,9,8,9,10,9,10,10,10,10,10,11,11,12,11,11,12,12,11,11,12,12,12,12,11,12,13,13,13,12,12,12,13,13,12,13,13,13,14,13,15,15,15,14,14,14,14,14,13,13,13,13,13,12,12,12,11,10,10,10,10,10,10,10,9,9,9,9,9,9,9,8,8,9,9,8,8,9,10,9,10,10,10,11,10,10,10,10,11,11,10,11,11,11,12,11,10,11,11,12,10,10,10,10,10,10,10,9,10,9,10,10,10,10,9,10,11,11,10,11,11,11,12,11,11,12,11,10,12,12,10,11,11,11,11,10,10,10,10,9,10,10,10,10,10,11,10,11,11,11,11,11,12,11,10,10,11,10,10,10,9,8,8,7,8,8,8,8,6,6,6,5,4,5,5,4,3,4,5,7,8,10,10,10,14,13,12,12,14,16,16,17,18,21,22,20,18,22,22,19,23,20,23,24,22,25,25,25,25,23,24,26,26,24,25,24,25,25,22,22,25,24,24,24,24,23,25,25,23,21,24,23],[27,27,26,27,27,27,27,27,27,26,26,26,26,26,26,26,26,26,26,27,27,26,27,27,27,27,27,27,28,27,26,28,28,28,27,28,27,28,28,28,28,28,27,27,27,27,26,26,27,25,26,25,26,25,24,25,24,24,23,22,20,19,17,14,14,12,11,11,11,10,10,10,8,7,8,9,9,8,9,9,8,9,9,9,8,9,10,11,11,9,11,11,10,10,12,11,9,11,12,11,10,12,12,10,10,12,12,11,11,12,12,12,11,10,10,11,10,11,11,10,9,9,9,9,9,9,9,9,9,8,9,9,8,8,9,10,10,9,10,10,10,9,10,9,8,9,9,9,9,10,9,9,9,9,10,10,11,10,10,12,11,10,10,10,10,9,10,10,9,8,9,9,7,7,8,8,7,7,7,7,8,7,7,7,7,6,7,7,7,7,8,7,8,8,8,10,10,10,10,11,11,11,11,12,12,11,12,11,11,9,11,10,9,9,9,8,9,8,8,8,8,8,7,7,7,7,6,6,7,6,5,6,7,8,8,8,8,8,8,7,6,6,6,6,6,5,6,6,4,4,5,4,4,4,5,5,6,7,6,4,4,4,4,4,6,6,6,6,7,7,8,8,8,9,9,8,9,9,9,9,8,8,8,8,7,7,8,8,6,6,6,5,5,5,6,6,4,4,5,6,6,6,5,5,6,6,4,6,6,5,5,5,6,4,4,5,6,7,6,7,8,8,8,8,9,8,10,11,10,10,11,12,12,12,14,14,15,16,19,18,20,18,19,21,20,21,22,22,21,23,23,23,25,25,25,25,26,25,26,24,24,25,24,23,25,24,25,24,25,25,26,26,27,26,27,27,28,27,28,27,27,28,28,28,28,28,28,28,27,27,27,28,27,27,27,26,26,27,27,28,27,27,27,25,25,26,26,24,23,23,21,22,20,18,18,16,15,15,14,12,12,10,10,10,9,9,8,8,8,7,8,8,9,9,9,9,11,11,11,11,12,12,12,14,14,13,12,11,10,10,10,9,10,11,11,10,12,14,12,14,14,13,12,11,12,11,10,11,10,10,9,9,8,8,7,7,7,5,5,6,5,5,5,5,4,5,5,4,4,5,5,5,5,6,6,5,5,5,3,2,1,0,1,2,2,3,2,2,3,3,3,4,5,4,5,5,5,6,6,6,7,8,8,8,8,8,9,9,9,10,9,9,9,10,9,10,11,11,12,11,10,10,10,9,10,10,8,10,11,12,12,12,12,13,14,14,13,13,13,12,13,13,12,12,12,10,11,11,10,10,10,10,9,9,9,9,8,8,9,7,6,7,7,6,5,6,6,5,5,5,5,4,4,5,5,4,5,6,5,6,6,7,7,8,9,8,8,8,8,10,9,10,10,10,9,10,10,10,11,11,10,12,11,11,10,13,12,11,11,10,12,11,13,12,10,10,10,12,12,11,12,13,12,13,13,13,13,14,13,14,13,13,13,13,13,12,12,11,12,11,11,11,9,10,9,10,9,9,10,8,9,9,8,9,9,8,7,9,9,8,7,8,8,9,9,10,9,10,11,10,10,11,10,10,11,10,11,9,11,11,11,10,12,11,12,11,10,10,9,10,10,10,10,9,10,10,10,10,10,11,10,10,11,10,11,12,11,12,11,11,11,11,11,11,11,11,11,11,12,12,11,10,11,11,9,10,9,10,10,10,11,10,11,11,11,11,12,12,10,11,9,12,9,9,9,8,8,9,7,6,7,7,6,6,6,6,5,5,4,4,4,3,4,4,6,7,9,9,10,12,12,12,11,12,15,16,17,19,19,21,18,18,22,21,19,23,20,21,24,23,24,24,25,25,25,25,25,25,26,26,25,25,26,23,23,24,25,24,24,22,23,23,23,21,20,22,23],[29,28,28,28,28,28,28,29,28,27,28,27,28,26,26,26,28,28,27,28,28,26,28,28,27,28,28,27,28,27,27,28,28,28,27,28,27,27,28,28,28,28,28,28,27,27,27,26,27,26,25,24,25,24,23,24,23,22,22,21,19,18,15,12,11,10,9,9,8,8,7,6,6,6,5,6,6,5,6,6,5,6,6,6,5,6,7,8,8,7,8,8,7,7,9,8,8,8,9,8,8,9,9,8,9,10,9,9,9,10,10,9,9,8,8,9,9,8,8,8,8,7,7,7,7,7,6,7,7,6,7,7,6,6,7,8,8,8,7,8,8,7,8,7,6,7,8,7,7,7,7,6,7,7,7,8,8,8,8,9,8,7,7,8,7,6,7,7,7,6,7,6,6,6,7,6,6,5,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,8,8,8,8,8,8,9,9,9,8,9,8,8,8,8,8,7,7,7,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,4,5,6,6,7,7,6,6,6,6,5,5,5,5,4,4,4,4,4,3,4,4,3,3,4,5,5,6,4,4,3,4,4,4,4,5,5,5,5,5,6,6,6,6,7,6,7,7,6,7,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,4,5,4,4,5,4,4,4,5,4,4,5,5,4,5,5,6,6,6,7,7,7,7,7,7,7,8,8,8,8,9,9,10,10,12,13,13,14,16,15,17,16,18,19,18,19,20,21,21,22,22,23,24,24,25,25,25,25,25,24,24,25,23,23,24,24,25,24,25,25,27,26,27,26,27,26,27,27,28,28,27,28,28,28,27,28,28,27,27,27,27,28,27,26,27,27,27,27,26,27,26,26,26,26,26,25,25,24,23,22,21,21,19,18,18,16,15,14,12,10,10,9,8,8,7,8,7,7,7,7,7,8,8,8,8,9,8,9,10,10,11,11,11,12,13,11,11,10,9,9,9,8,9,9,10,10,11,12,12,11,11,11,10,9,10,9,8,9,9,8,8,8,7,7,7,7,7,5,5,5,5,5,5,5,4,4,5,4,4,5,6,5,5,6,6,5,4,4,4,2,1,1,0,1,1,3,1,3,3,3,2,4,5,4,5,5,6,4,5,6,5,5,5,6,6,6,6,6,6,7,7,6,7,7,7,8,9,9,9,8,8,7,7,7,7,8,7,7,8,8,8,9,9,9,10,11,10,9,9,9,9,9,9,8,9,7,7,7,7,7,7,6,6,6,6,6,5,5,5,5,4,5,5,4,5,4,5,4,4,4,4,3,3,5,4,4,6,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,7,7,8,8,8,8,7,8,8,9,8,7,7,7,8,9,8,9,9,10,10,9,10,10,10,10,11,10,10,9,10,9,9,9,8,9,8,8,7,6,6,7,6,6,7,7,5,6,6,6,5,6,6,6,5,6,7,6,6,6,6,7,7,7,7,7,7,8,8,7,7,7,7,8,7,8,9,8,8,8,8,8,7,8,7,7,7,8,6,7,7,7,7,7,7,7,7,8,8,8,8,7,9,9,9,9,9,9,8,9,9,9,9,9,9,8,8,8,8,8,8,7,8,8,7,8,8,8,8,9,8,8,8,9,9,9,8,7,9,7,8,7,6,7,7,6,6,6,5,5,5,5,4,4,5,4,4,4,4,4,4,5,7,8,9,10,11,11,12,11,13,15,15,16,18,20,21,18,19,21,20,19,22,20,22,25,23,23,25,26,24,23,25,24,24,25,25,24,25,25,23,24,24,25,24,24,23,24,23,24,23,21,23,24],[27,27,27,27,28,28,28,28,28,26,26,26,26,25,26,26,25,27,25,27,27,26,27,27,26,27,27,27,27,26,26,27,28,28,26,27,26,27,27,27,27,27,25,26,26,26,25,23,24,23,23,23,24,22,20,22,21,20,19,20,17,15,13,11,9,8,7,7,6,6,5,5,4,4,4,4,5,4,5,5,4,4,5,4,4,5,5,5,6,5,6,6,6,5,6,6,6,6,6,6,6,7,7,6,7,7,7,7,7,8,8,7,6,6,6,7,6,6,6,6,6,5,5,6,6,5,6,6,6,5,6,6,5,6,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,5,5,4,5,5,4,4,5,5,5,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,6,6,6,6,6,6,6,7,8,7,7,7,6,6,6,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,5,4,3,2,3,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,3,3,3,3,3,3,3,2,3,3,3,3,3,4,3,3,4,4,5,4,5,6,6,4,5,5,6,6,6,6,6,7,7,8,8,10,11,12,12,15,15,16,16,17,19,18,17,19,20,20,20,21,23,23,23,24,24,25,24,25,24,22,23,22,22,22,22,24,23,23,24,25,26,27,25,27,27,27,26,27,27,26,26,26,26,26,27,27,26,26,26,26,26,26,26,26,25,27,26,25,26,26,25,26,23,24,25,24,23,22,21,20,19,18,16,15,14,12,12,11,9,9,7,7,6,6,6,5,6,5,6,6,6,7,7,7,8,9,8,8,9,9,9,10,11,11,10,10,9,9,8,7,8,8,8,9,9,10,11,10,11,11,10,9,8,9,9,7,8,7,7,6,6,6,5,5,5,4,3,4,4,3,3,4,4,3,4,4,4,4,4,5,5,6,7,7,5,5,4,3,3,2,2,1,0,1,2,1,1,1,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,7,8,8,8,7,6,5,5,5,6,6,5,5,6,7,7,8,7,8,8,9,8,8,8,7,7,7,6,6,6,5,6,5,5,5,5,5,4,4,5,4,4,3,4,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,3,3,4,3,3,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,7,8,8,9,8,9,8,9,8,8,8,8,7,7,7,7,6,6,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,5,4,4,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,7,7,7,7,6,7,8,7,7,7,7,7,7,6,7,7,6,6,6,6,6,7,6,7,7,6,7,6,7,7,7,7,8,7,7,7,7,7,6,6,6,5,6,6,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,5,6,7,8,9,11,10,11,11,14,14,16,17,19,20,21,19,17,20,21,18,22,19,22,22,21,24,24,24,24,23,24,25,24,22,25,24,22,24,22,23,23,23,23,24,22,21,23,24,20,20,22,22],[27,28,28,28,28,28,28,28,28,27,26,25,27,25,27,26,26,27,26,27,27,26,27,27,26,27,28,27,28,27,25,27,28,28,27,27,27,27,28,27,27,27,27,26,27,27,26,25,26,24,24,24,25,22,21,23,23,21,21,20,18,16,13,9,8,7,6,5,5,4,4,3,3,3,3,3,3,3,4,4,3,3,4,3,3,4,4,4,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,5,5,5,5,4,4,4,4,4,4,5,4,4,5,4,4,4,4,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,4,3,4,3,3,3,3,4,4,3,3,4,4,3,4,4,5,5,5,4,5,5,5,5,5,5,6,5,5,5,4,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,3,3,4,4,3,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,3,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,4,4,4,5,4,4,4,4,5,5,4,5,5,6,6,7,7,8,10,11,12,14,17,17,15,17,19,18,18,22,22,21,23,22,25,24,23,25,25,26,25,25,23,23,25,23,23,24,23,25,24,23,24,27,25,28,25,27,27,28,27,27,27,27,28,27,28,27,28,27,27,27,26,27,27,27,26,27,27,26,27,25,27,26,26,27,24,25,25,25,24,24,22,21,21,20,17,17,15,13,12,10,8,7,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,7,7,8,8,8,9,9,10,8,9,8,7,7,6,6,6,7,7,7,9,10,9,9,8,9,8,7,7,7,6,6,6,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,5,5,5,6,6,5,4,3,3,2,2,1,1,0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,5,4,5,6,7,6,5,5,4,4,3,4,4,4,4,4,5,5,6,5,6,7,7,7,6,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,5,4,5,4,4,5,5,5,5,4,4,5,5,5,5,5,5,5,6,6,6,6,7,6,7,6,6,6,7,6,6,6,5,5,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,5,5,5,5,5,6,6,6,5,6,6,5,6,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,6,6,5,6,6,5,5,4,6,5,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,4,6,7,7,9,10,9,11,10,12,13,14,16,17,19,18,16,17,20,18,18,21,19,21,22,21,23,23,23,22,23,23,24,23,23,24,23,22,25,22,24,24,23,24,23,23,24,23,24,22,20,24,24],[28,28,28,28,28,28,28,28,27,27,27,26,26,26,26,25,26,27,26,26,27,26,26,26,26,26,27,27,27,26,26,27,27,28,26,26,26,27,27,26,27,26,27,26,26,25,24,23,24,23,23,23,23,22,20,22,21,19,19,19,16,15,12,9,8,7,6,5,5,4,4,3,3,2,3,3,3,3,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,6,5,6,6,6,6,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,4,3,4,4,4,4,4,4,5,5,6,6,6,8,10,10,11,13,14,15,14,15,17,17,17,18,19,18,19,20,22,22,22,23,23,23,23,24,22,22,23,21,21,23,22,24,23,23,24,25,25,26,25,26,26,27,26,27,27,27,27,27,27,26,26,27,27,26,26,27,27,26,26,26,27,25,26,26,26,26,25,26,25,24,24,25,24,23,22,22,20,19,16,16,14,12,11,9,8,7,5,5,4,4,4,4,4,4,4,4,5,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,7,7,6,6,6,6,6,7,7,8,8,7,8,8,8,7,6,6,6,5,5,5,5,4,4,4,4,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,4,5,5,5,4,4,3,3,2,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,4,5,6,6,6,5,4,4,4,3,4,4,4,4,4,5,5,6,5,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,6,7,6,6,7,6,6,6,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,3,4,4,4,4,5,4,4,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,5,5,5,6,5,5,5,5,5,5,5,5,4,5,4,4,5,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,5,5,4,5,4,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,5,6,6,8,9,9,10,10,13,12,14,16,17,19,20,18,17,19,19,17,21,18,20,21,20,23,22,22,22,22,21,24,22,22,22,23,22,22,20,22,23,21,21,22,21,21,22,23,20,20,23,22],[28,28,28,28,28,28,28,28,27,27,27,26,27,26,27,26,26,27,26,26,27,27,26,27,27,27,27,27,27,26,27,27,27,28,27,27,27,27,27,27,27,27,26,26,26,26,25,24,25,24,24,23,22,22,20,21,20,21,19,18,16,14,11,8,7,6,5,4,4,4,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,6,6,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,4,4,5,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,6,6,7,9,10,10,13,13,15,13,15,17,16,16,18,18,18,19,20,21,23,22,23,23,25,24,25,22,22,24,22,22,22,23,23,22,23,23,26,25,26,24,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,26,27,26,27,26,26,25,25,26,25,25,26,25,26,24,24,24,24,23,22,21,20,19,18,16,15,14,12,10,8,7,6,5,4,4,4,4,3,4,3,3,4,4,4,5,5,5,5,5,6,6,6,7,6,7,7,7,7,6,6,5,6,5,5,5,6,6,7,7,7,6,6,7,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,3,2,2,3,3,2,3,3,4,4,5,5,5,4,4,3,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,6,6,6,4,4,3,3,3,4,4,3,4,4,4,5,5,5,5,6,6,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,5,6,6,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,5,4,5,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,3,4,5,6,7,8,9,9,9,12,11,14,16,18,18,20,18,17,19,21,16,22,18,20,21,21,22,22,24,22,21,21,23,23,21,24,23,22,23,22,22,22,22,22,21,22,21,22,23,21,21,23,22],[27,27,27,27,28,27,27,27,27,26,26,25,26,25,25,25,25,27,26,26,27,26,26,27,26,26,26,26,26,25,26,26,26,27,26,26,26,26,26,26,26,26,25,26,26,26,24,23,23,23,22,22,22,21,20,21,20,19,19,17,15,14,11,8,7,6,5,4,4,4,4,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,4,4,4,5,5,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,3,3,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,2,2,3,3,2,3,3,3,4,3,3,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,6,7,10,10,10,12,14,15,13,14,16,15,16,17,17,17,18,18,20,21,20,22,21,23,23,23,22,22,22,22,21,22,21,23,22,22,23,26,24,26,25,25,25,26,25,26,25,25,25,25,26,26,26,26,26,26,26,26,26,26,25,26,25,24,26,25,25,25,24,26,25,25,24,24,22,22,21,19,18,17,15,15,13,12,10,8,7,6,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,7,7,7,7,7,7,7,6,6,5,5,5,5,6,6,7,7,7,7,7,7,6,5,6,6,5,5,5,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,5,5,4,3,3,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,5,6,6,4,4,3,3,3,3,3,3,3,4,4,4,5,5,5,6,6,6,6,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,5,6,6,6,6,5,6,6,5,5,5,4,4,4,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,4,4,3,3,4,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,3,4,4,4,4,4,4,5,5,5,5,4,5,5,4,4,4,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,5,6,7,8,9,9,10,9,12,12,15,17,18,19,19,16,17,19,19,17,21,18,19,21,20,21,23,22,21,22,23,24,22,23,22,22,22,24,20,22,22,22,22,22,21,21,22,23,22,20,21,22],[28,28,28,28,28,28,27,28,27,27,27,25,26,25,26,25,25,27,25,26,26,25,25,26,25,26,26,26,26,25,25,25,26,27,25,26,25,25,25,25,26,25,25,25,24,24,23,22,23,22,21,21,22,19,18,19,19,17,17,17,14,13,10,8,7,5,4,4,4,3,3,3,2,2,2,2,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,4,3,3,4,3,3,4,4,3,3,4,4,4,4,4,5,4,4,5,6,5,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,4,3,3,3,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,4,4,4,5,5,5,7,8,9,9,11,13,13,12,14,16,15,15,17,17,17,18,18,20,21,20,21,22,23,22,23,22,21,23,20,21,21,21,23,22,23,22,25,24,27,24,25,26,26,25,25,25,26,25,26,25,25,26,26,26,25,25,27,26,26,25,26,24,25,26,25,25,25,24,25,23,22,23,23,22,21,19,19,18,17,15,14,13,11,9,8,6,5,5,4,3,4,4,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,7,6,7,7,7,6,5,5,5,5,5,5,6,6,7,7,6,6,6,6,5,5,6,5,4,5,5,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,5,4,4,3,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,3,3,2,3,3,3,3,3,4,4,4,4,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,5,5,5,5,4,4,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,4,4,5,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,4,4,6,6,8,8,9,10,9,12,12,15,16,17,19,19,17,16,19,19,17,20,18,20,21,20,23,22,23,22,22,23,24,22,22,24,23,22,23,22,23,23,22,23,22,22,22,22,24,21,20,23,23],[29,28,28,28,28,28,28,27,27,26,27,26,26,25,26,25,25,27,25,25,26,26,25,26,26,25,26,26,26,25,25,26,26,27,25,26,26,26,26,25,26,25,25,25,24,24,23,22,23,23,22,21,22,21,18,19,18,18,17,17,13,12,10,7,6,5,4,4,4,3,3,2,2,2,2,2,3,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,3,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,8,9,9,11,12,13,12,12,14,15,14,16,17,16,16,17,19,20,19,21,21,22,22,23,21,20,22,20,20,21,21,22,21,21,21,23,24,27,23,24,25,25,25,25,25,25,25,25,25,25,26,25,26,26,25,26,26,26,25,25,24,24,25,25,25,25,24,25,23,22,23,24,22,21,19,19,19,17,15,14,13,11,10,7,6,5,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,4,5,5,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,5,4,4,3,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,3,2,2,2,3,3,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,4,5,5,5,5,4,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,3,4,5,6,7,8,9,9,9,13,12,15,16,17,19,19,19,18,19,20,17,21,17,21,21,20,24,23,23,22,23,21,25,23,22,24,23,22,21,20,23,22,21,21,20,22,20,23,22,21,21,23,22],[28,28,28,28,28,27,28,28,26,27,26,25,26,25,25,25,26,27,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,26,25,26,25,25,26,26,25,25,25,25,24,23,23,23,22,21,21,21,19,19,18,20,17,17,14,13,10,8,7,6,5,4,4,4,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,6,6,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,3,3,4,4,4,4,5,4,5,4,4,4,4,4,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,4,4,3,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,4,4,3,4,4,4,5,6,6,7,9,9,10,11,12,13,12,13,14,15,14,16,17,17,17,18,19,21,20,21,21,22,21,22,20,20,22,20,20,21,20,22,20,22,22,24,23,25,24,24,25,25,25,25,25,26,26,26,26,25,26,26,26,25,25,26,26,26,25,25,24,24,25,25,25,25,24,25,24,23,23,23,22,21,21,19,19,17,15,15,13,12,10,8,6,6,5,4,4,4,4,3,4,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,6,6,6,5,5,5,5,5,6,6,6,7,7,6,6,6,6,5,6,5,5,5,5,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,5,5,5,4,4,3,3,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,3,2,3,3,3,3,4,4,4,5,5,5,5,4,4,3,3,3,3,3,3,3,4,4,5,5,5,5,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,5,6,6,6,6,5,6,6,6,5,5,5,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,4,3,4,4,4,3,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,5,5,5,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,6,6,7,9,9,9,8,13,14,14,16,17,18,19,16,17,18,18,16,21,18,20,21,21,24,23,22,20,23,22,23,23,23,22,21,22,24,20,20,21,22,22,21,21,21,22,23,21,19,21,22],[28,28,27,27,27,27,27,27,27,26,26,24,26,25,25,25,25,26,25,26,27,26,26,26,26,26,27,26,27,25,25,26,26,27,26,26,25,26,26,26,26,25,25,25,26,25,24,23,23,23,21,22,22,20,18,20,19,18,18,18,15,13,11,8,7,6,5,5,5,4,4,3,3,3,3,3,4,4,4,4,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,3,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,3,4,5,5,5,5,5,5,5,5,5,5,4,5,4,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,3,3,4,4,3,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,2,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,7,9,10,10,12,13,14,12,13,15,16,15,17,17,17,18,19,20,21,21,22,21,24,22,23,22,21,23,22,21,22,22,23,23,22,22,25,24,26,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,26,26,26,25,25,25,25,26,25,26,25,25,23,24,23,23,22,21,20,19,19,17,15,15,13,12,10,9,7,6,5,5,5,5,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,8,8,7,8,7,7,6,5,6,6,6,7,7,7,8,7,8,7,7,7,6,6,6,5,5,6,5,5,5,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,5,5,6,6,5,4,3,3,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,6,6,4,4,3,3,3,3,3,3,4,4,5,5,5,5,5,6,6,6,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,5,6,6,6,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,4,3,3,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,5,5,6,5,5,6,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,4,5,7,7,8,9,10,10,9,13,14,15,17,17,20,19,17,18,20,19,17,21,17,19,20,20,23,23,21,22,22,22,23,23,22,24,23,22,23,21,22,23,23,22,23,22,22,23,24,21,21,23,23],[28,28,28,28,28,28,28,28,27,27,27,27,27,25,26,26,25,27,25,26,26,26,26,26,26,26,27,26,27,25,25,26,27,27,26,27,26,26,26,26,26,26,25,25,25,25,24,22,24,23,21,20,21,20,18,20,19,17,17,18,16,13,11,8,7,6,5,5,5,4,4,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,5,5,4,5,5,5,5,4,4,4,4,3,4,4,4,3,4,4,3,4,4,3,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,3,2,3,3,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,7,9,10,10,12,13,14,12,14,16,15,16,17,17,18,18,19,20,21,21,22,22,24,23,23,22,22,23,21,20,22,21,22,22,23,23,24,24,26,24,25,26,26,26,25,26,26,26,26,26,26,26,26,26,26,26,27,26,27,26,26,24,25,26,25,26,26,25,26,23,23,24,24,22,22,20,21,19,18,17,16,15,13,10,9,8,6,6,5,4,5,5,4,4,4,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,8,7,7,6,6,6,6,6,6,7,7,8,8,7,7,7,8,7,6,6,6,5,5,6,5,5,5,4,4,4,3,3,2,2,3,2,2,2,3,3,2,3,3,3,3,3,4,5,6,6,6,5,4,3,3,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,4,3,4,5,6,6,4,3,3,3,3,3,3,3,3,4,4,4,5,5,5,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,3,3,3,3,3,3,4,3,3,4,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,5,4,4,5,4,5,5,5,5,4,5,5,4,4,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,4,6,7,7,9,10,11,11,11,14,14,16,16,17,19,19,20,18,19,20,19,21,19,21,21,22,24,24,23,23,22,23,25,22,22,25,24,22,23,23,24,23,22,24,22,23,22,24,24,23,22,24,24],[28,28,28,28,28,28,28,28,27,27,26,25,26,25,26,25,26,26,25,26,26,26,26,26,26,27,26,26,27,26,26,27,27,27,26,27,26,26,27,26,27,26,25,25,25,25,24,23,23,23,22,21,22,21,18,20,18,18,16,17,15,13,11,8,8,7,6,5,5,4,4,4,3,3,3,3,4,3,4,3,3,3,4,3,3,3,4,4,4,4,4,5,4,4,5,4,4,5,5,5,4,5,5,5,5,6,6,6,6,6,7,6,5,5,5,6,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,3,3,4,4,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,5,5,4,4,5,5,6,6,6,8,10,11,10,12,13,14,12,13,16,15,14,16,17,16,17,18,20,20,20,22,22,23,22,23,21,20,22,20,21,21,22,22,20,22,22,24,24,27,24,26,25,26,26,26,26,26,26,26,26,26,26,26,27,27,26,27,27,26,26,26,25,26,26,25,25,26,24,26,24,24,25,23,23,21,21,20,19,17,16,15,14,12,11,9,8,7,6,5,5,5,5,4,5,4,5,5,5,5,6,6,6,6,6,6,8,8,8,7,8,8,8,8,7,7,7,7,7,7,7,7,8,8,8,8,7,8,8,7,6,6,6,6,6,6,6,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,7,6,5,4,3,3,2,3,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,5,5,6,6,5,4,3,3,3,3,4,3,4,4,5,5,5,5,6,6,6,6,6,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,4,5,7,7,8,10,11,10,11,14,13,15,17,18,19,20,18,18,20,21,18,22,18,22,21,21,24,24,20,22,23,23,24,22,22,24,22,23,22,21,22,22,21,22,22,22,22,23,23,21,20,22,22],[27,27,26,26,27,25,26,27,24,25,25,23,26,23,24,24,25,25,24,25,25,24,25,25,25,26,26,25,26,26,25,26,26,27,25,26,25,25,26,25,26,25,25,24,24,23,23,22,22,22,20,20,21,20,18,18,18,17,17,16,14,13,11,9,8,7,7,7,6,5,5,5,4,4,4,4,5,4,4,5,4,4,5,4,4,4,4,5,5,5,5,5,5,5,6,5,5,5,5,5,5,6,5,5,6,6,6,6,6,7,7,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,4,5,5,5,5,5,4,4,5,5,5,4,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,5,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,3,4,4,4,3,4,4,5,5,6,5,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,4,4,3,3,2,2,2,2,2,3,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,4,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,5,5,5,5,4,5,6,5,5,6,6,7,7,8,9,10,10,10,11,12,13,12,12,14,14,14,15,16,17,16,16,18,19,18,20,20,20,21,22,20,19,20,20,19,19,20,22,19,19,21,22,23,24,23,23,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,26,25,24,25,25,24,24,25,25,25,24,23,25,23,24,23,23,23,21,21,19,19,18,16,16,14,12,11,9,8,7,7,6,6,6,6,5,5,5,5,5,5,5,5,6,6,6,6,7,8,7,7,8,8,8,8,7,7,7,6,6,6,6,6,7,7,8,8,8,8,8,8,7,7,7,7,6,6,7,6,5,6,6,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,4,6,7,6,5,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,2,3,3,3,3,4,4,4,4,4,5,6,6,6,5,4,3,4,4,4,4,4,5,4,5,5,6,5,6,7,7,7,7,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,4,3,4,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,4,3,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,6,5,6,6,5,5,5,6,6,6,6,6,7,6,7,7,7,7,7,7,7,6,7,7,6,7,7,6,6,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,5,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,4,6,7,7,8,10,10,10,10,14,15,15,16,17,18,19,16,18,19,18,15,20,16,20,21,18,20,22,20,20,21,21,21,22,21,21,21,22,23,19,21,22,22,22,22,22,22,22,22,21,19,21,22],[27,28,27,26,28,27,27,28,26,26,26,24,27,24,26,24,26,27,24,26,26,24,25,26,25,26,26,26,26,26,25,26,27,27,26,27,27,26,27,26,27,26,26,25,25,25,23,21,23,22,20,20,21,19,18,18,18,16,17,17,15,13,11,9,8,7,6,6,6,5,5,5,4,4,5,4,5,5,5,4,4,5,5,3,4,4,4,5,5,4,5,5,5,6,6,5,5,6,6,6,7,7,6,6,7,7,7,7,7,7,8,7,7,6,7,7,7,7,7,7,7,6,6,6,6,6,5,6,5,5,5,5,4,5,5,5,5,4,5,5,5,4,6,5,4,5,6,5,5,6,6,5,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,4,3,4,4,3,4,4,5,5,4,5,4,5,5,4,5,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,4,4,5,6,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,5,4,4,5,5,5,6,6,6,6,5,5,5,6,6,5,6,6,6,7,7,8,9,9,10,10,11,12,13,12,12,14,14,14,14,16,17,16,17,19,21,21,21,22,22,21,22,22,20,23,21,20,21,20,23,20,22,22,24,24,26,24,24,25,25,25,25,25,26,25,25,26,25,26,26,26,26,25,26,26,26,26,26,26,25,26,26,26,26,25,25,24,25,25,24,23,23,20,21,20,18,18,16,14,13,11,10,9,8,7,7,6,6,6,6,6,5,5,6,5,6,6,6,7,7,7,7,8,8,8,8,9,9,8,9,7,7,7,6,7,7,8,8,8,9,9,8,9,9,9,8,8,8,7,7,7,7,6,6,6,6,5,6,5,4,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,5,6,7,7,6,5,4,4,3,4,3,3,3,3,2,2,2,2,2,1,1,1,1,0,1,1,2,2,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,6,6,7,5,4,3,3,3,4,4,4,4,4,5,5,6,5,6,6,7,6,6,6,5,5,5,5,4,5,5,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,4,5,5,6,6,5,5,6,6,6,6,6,6,6,7,6,7,7,6,7,6,7,7,5,6,7,6,6,6,6,5,5,4,5,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,3,3,4,4,3,4,3,4,4,3,4,5,4,4,4,5,4,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,5,5,5,6,6,5,5,6,6,5,6,5,5,5,6,5,5,6,5,5,5,5,5,5,6,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,4,6,7,8,9,10,11,12,10,14,15,16,17,16,19,17,18,17,20,19,18,21,18,20,20,19,22,23,21,23,23,22,23,23,22,23,22,22,22,20,21,23,22,22,23,23,23,23,25,22,20,23,25],[28,28,28,28,28,28,28,27,28,27,27,27,27,26,27,26,27,27,27,27,27,27,27,27,26,27,27,27,27,27,26,27,27,28,27,27,27,27,27,27,27,27,26,26,26,25,24,24,24,23,22,21,22,20,19,20,19,18,17,18,15,12,10,8,7,6,5,5,5,4,4,3,3,3,3,3,4,4,4,3,3,4,3,3,3,4,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,4,4,4,5,5,4,5,5,5,6,6,6,7,8,9,10,10,13,14,12,13,15,15,14,16,18,18,18,20,21,22,22,23,23,24,24,23,23,22,23,21,22,22,22,23,23,24,24,25,25,27,26,26,26,27,27,27,27,26,27,27,27,27,27,27,27,27,26,27,27,27,27,27,26,26,27,26,26,26,25,26,24,24,24,24,24,23,21,21,20,18,17,16,15,13,11,9,8,7,6,5,5,5,4,5,4,4,4,4,5,5,5,5,6,6,6,6,7,7,8,7,8,8,8,8,7,7,6,6,6,7,6,7,7,8,9,8,8,8,8,7,7,6,6,6,6,6,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,5,6,6,6,5,5,4,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,4,6,6,6,4,4,3,3,2,3,3,3,3,4,4,4,5,4,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,3,4,4,4,5,4,4,4,4,5,5,5,5,5,6,5,6,6,6,5,5,6,6,5,5,6,6,5,5,5,4,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,6,8,8,9,11,10,11,11,13,15,16,18,19,21,21,21,20,21,22,20,22,20,23,22,22,25,25,24,24,24,24,25,24,24,26,25,23,25,24,25,24,24,24,23,24,22,25,24,23,24,25,25],[28,28,27,27,28,26,28,27,25,26,26,24,26,23,26,23,26,25,24,26,25,24,27,26,25,26,26,26,27,26,25,27,27,28,27,27,27,27,27,27,27,27,26,26,26,25,24,22,23,22,20,20,21,20,18,18,18,16,16,16,14,12,10,8,7,6,5,5,5,5,4,4,3,3,3,4,4,4,4,4,4,4,4,3,3,4,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,6,6,6,7,7,6,6,5,6,6,6,6,6,6,6,5,5,5,6,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,5,5,6,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,4,4,4,5,5,4,5,5,5,6,6,6,7,8,8,9,10,12,12,11,12,13,14,14,15,16,17,17,17,20,20,19,21,22,22,22,22,22,20,22,20,20,21,21,22,21,21,23,24,25,26,25,25,27,26,26,25,26,26,26,26,26,26,26,27,27,26,26,27,26,26,26,26,25,26,26,26,26,26,25,26,24,25,24,24,23,22,21,21,19,19,17,16,15,12,11,9,8,6,6,5,5,5,5,4,5,4,4,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,8,7,7,6,6,6,6,6,7,7,8,8,7,7,7,8,7,6,6,6,6,6,6,5,5,5,5,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,6,6,5,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,6,6,6,4,4,2,3,2,3,3,3,3,3,4,4,5,4,5,5,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,3,4,3,4,4,4,5,4,4,5,4,5,5,5,5,5,6,5,6,6,5,6,6,6,6,5,5,6,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,3,3,4,4,3,3,4,4,4,4,4,5,5,5,4,5,5,4,4,4,4,4,5,4,4,5,4,4,4,4,4,5,5,5,5,4,5,5,5,5,4,4,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,2,2,3,5,6,7,8,8,11,10,10,10,13,15,15,15,17,19,18,18,18,20,20,17,23,17,23,21,20,25,23,21,24,24,23,24,25,23,22,24,24,24,21,23,23,24,23,24,24,23,23,24,21,21,24,24],[28,28,27,27,28,26,28,28,26,25,26,23,26,23,25,22,25,26,24,26,26,26,26,27,25,26,26,25,26,26,26,27,27,27,26,27,27,26,27,26,27,26,26,25,25,25,23,21,22,22,20,20,21,18,17,18,17,16,16,15,13,11,10,7,6,6,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,4,4,3,3,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,4,4,4,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,4,4,4,5,5,4,4,5,5,6,6,6,7,7,8,9,10,12,12,11,13,14,13,14,14,15,16,15,16,18,19,19,19,20,21,21,22,20,20,21,21,20,21,21,22,20,21,22,24,24,26,25,25,26,25,26,26,25,25,26,25,26,26,26,26,26,25,26,26,26,25,25,26,25,25,25,25,26,25,25,25,25,24,24,23,23,22,19,20,20,18,17,16,14,12,10,9,7,6,6,5,5,5,5,4,4,4,4,4,5,5,5,5,5,6,5,6,7,6,6,7,6,7,7,6,6,6,5,5,6,6,6,7,7,7,7,7,7,7,7,7,6,6,6,5,6,6,5,5,5,5,4,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,4,3,4,3,3,3,2,3,2,2,2,2,2,2,2,1,1,1,2,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,6,6,6,4,3,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,4,4,4,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,5,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,5,4,4,4,4,5,5,5,4,4,5,4,4,4,3,3,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,6,7,9,9,10,10,10,13,13,15,16,18,18,17,17,17,19,18,17,21,17,21,20,20,23,24,20,21,23,22,22,23,23,23,22,23,23,21,21,23,22,23,23,23,23,22,25,22,21,25,26],[28,28,28,28,28,28,28,27,27,26,26,26,26,25,26,25,25,27,26,25,26,26,25,26,26,26,26,26,27,26,25,26,26,27,26,26,26,26,27,26,27,26,26,26,25,25,24,23,23,22,22,22,21,20,19,19,18,17,17,16,14,11,9,6,5,5,4,3,4,3,3,3,2,2,2,2,3,3,3,3,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,4,4,3,4,4,4,4,4,5,6,7,8,9,10,13,12,11,13,14,15,14,16,17,17,18,19,20,21,22,21,23,24,23,24,23,21,23,22,21,22,22,23,22,23,23,26,24,27,25,26,25,26,26,26,26,26,26,26,26,26,26,26,26,27,26,27,26,27,26,26,26,26,26,26,25,26,26,25,24,23,23,24,23,22,20,19,19,18,16,15,14,12,10,8,6,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,7,6,6,6,6,6,6,5,5,5,5,6,6,6,7,7,6,6,6,6,6,5,6,5,5,5,5,4,4,4,4,4,3,3,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,4,5,6,6,5,3,2,2,2,2,2,3,3,3,3,3,4,3,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,1,2,1,2,2,1,1,2,2,2,2,2,2,3,2,3,3,2,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,4,5,4,4,4,5,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,5,7,7,9,9,10,10,11,13,13,15,15,16,19,18,19,18,19,20,19,21,19,23,22,22,24,24,23,23,23,23,25,22,23,25,23,22,24,22,23,23,24,24,22,24,23,24,24,24,22,24,25],[28,28,28,28,28,28,28,27,28,27,26,26,26,25,26,25,26,27,26,27,26,27,27,26,26,27,26,26,27,26,25,27,27,27,27,27,27,26,27,26,27,26,26,26,25,25,24,23,24,23,23,21,22,20,19,20,19,18,17,16,14,12,9,7,5,5,4,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,3,2,2,3,2,2,2,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,4,3,4,4,4,5,4,5,6,6,7,9,9,11,12,11,13,14,15,14,15,16,17,18,18,21,22,21,22,23,23,24,24,23,22,24,22,22,22,22,24,23,23,24,25,25,28,25,26,26,26,26,27,27,27,27,27,27,27,27,27,27,26,26,27,27,27,27,26,26,26,26,25,26,26,25,26,24,24,24,25,23,23,21,21,20,19,17,15,15,12,10,8,7,6,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,6,5,5,6,7,6,7,7,7,7,8,6,7,6,5,6,5,6,7,7,8,7,7,7,7,7,6,6,6,6,5,5,5,5,4,5,4,4,4,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,3,3,4,6,6,6,4,3,2,2,2,2,2,3,2,3,3,4,4,3,4,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,2,3,3,3,3,3,4,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,4,5,5,4,4,5,5,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,4,3,3,4,4,3,4,4,3,3,4,3,3,4,4,3,3,3,4,4,4,4,4,4,3,4,4,4,4,4,4,4,3,3,3,4,4,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,3,4,5,6,7,9,9,10,10,10,13,14,16,16,17,20,20,20,18,21,20,20,23,20,24,23,23,25,24,23,25,24,24,25,24,25,26,25,23,26,23,24,24,23,24,24,24,24,25,26,24,23,25,24],[28,28,27,27,28,27,28,28,26,26,26,23,26,23,26,24,26,25,24,26,25,24,27,27,23,26,27,25,26,27,24,27,28,28,27,27,27,28,28,27,28,27,27,27,26,25,24,23,23,23,20,20,20,20,18,19,19,17,16,16,14,12,10,7,6,5,4,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,3,3,3,3,3,4,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,3,3,4,4,3,4,4,4,5,5,5,6,6,7,9,10,11,13,11,12,14,13,14,14,16,17,17,17,19,21,20,21,22,23,23,24,21,21,23,20,20,21,22,23,21,21,23,25,24,27,25,25,25,26,26,26,26,26,26,26,26,26,27,26,27,26,26,27,26,26,26,26,24,25,26,25,26,26,25,26,24,24,24,24,23,21,21,21,19,18,17,16,15,11,11,8,7,5,5,4,4,4,4,3,4,3,4,4,4,4,4,5,4,5,5,5,6,6,7,6,6,6,6,6,6,6,5,5,5,5,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,4,4,4,5,5,4,4,3,3,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,3,2,4,6,5,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,2,2,1,2,2,2,2,2,2,2,3,2,3,2,2,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,4,4,5,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,3,3,4,4,3,3,4,4,3,3,4,3,3,4,4,3,4,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,7,7,9,9,9,10,10,12,13,15,15,15,18,19,19,16,18,18,20,22,19,23,21,21,25,24,22,23,25,22,24,24,24,23,23,23,24,20,22,23,24,24,23,24,24,23,25,24,22,23,25],[28,28,28,28,28,27,28,28,27,26,27,25,27,25,26,24,26,27,25,27,26,25,27,27,25,27,27,26,27,27,25,26,27,28,26,27,27,27,27,27,27,26,26,26,26,25,25,23,23,22,21,21,21,20,19,19,18,18,17,16,14,11,9,6,5,5,4,3,4,3,3,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,3,3,3,4,3,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,4,3,4,4,4,5,4,5,6,8,8,9,10,12,12,12,12,13,14,14,15,16,17,17,17,19,21,20,20,21,23,22,23,23,21,23,21,21,22,22,24,21,23,22,26,24,27,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,26,26,26,26,25,25,25,26,26,26,26,25,25,24,24,24,23,22,21,20,19,18,17,16,14,12,10,8,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,6,6,6,7,6,6,7,6,6,5,5,6,5,5,5,5,4,4,4,4,3,4,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,4,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,3,2,4,5,5,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,4,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,7,6,8,9,9,10,10,14,13,16,17,18,18,18,18,17,19,18,19,23,19,22,21,22,24,24,24,23,24,23,25,23,24,24,23,23,25,22,22,24,24,24,23,23,24,23,26,24,22,24,25],[28,28,28,28,28,28,27,27,27,26,27,26,26,25,25,25,25,26,25,26,26,26,26,26,26,26,26,25,27,26,24,26,26,26,26,26,26,26,26,26,26,26,26,26,25,24,24,22,23,22,21,21,21,20,18,19,18,16,17,16,13,10,8,6,5,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,4,3,3,3,4,3,4,4,4,5,6,7,8,9,12,12,11,12,14,13,13,15,16,17,16,19,19,20,21,21,22,23,23,24,23,22,23,21,22,22,23,24,22,24,23,26,24,27,26,26,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,26,26,26,26,25,25,26,25,26,25,25,25,24,23,23,24,21,20,19,19,19,17,15,14,13,11,9,8,6,5,4,4,3,4,4,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,7,6,6,5,5,5,5,6,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,3,3,3,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,4,4,4,5,5,4,4,3,3,2,3,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,4,5,5,5,4,3,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,4,3,4,4,3,4,3,4,4,3,3,4,4,4,3,3,3,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,5,6,6,8,9,10,10,10,14,15,16,18,18,20,20,19,18,20,20,20,23,21,23,23,22,25,25,24,24,25,25,25,25,24,25,24,24,25,24,25,25,24,25,24,24,24,24,26,25,24,25,25],[28,28,28,28,28,28,28,27,27,27,26,25,26,25,27,25,27,27,25,27,26,25,27,26,25,27,27,25,27,27,25,27,27,27,26,27,27,27,27,27,27,27,26,26,26,26,25,23,24,22,22,21,21,20,18,19,19,17,16,16,13,10,8,6,5,4,4,3,3,3,3,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,4,3,4,4,3,3,3,4,3,3,3,4,3,4,4,4,5,6,7,8,10,11,12,11,12,14,13,13,15,16,16,17,18,19,21,22,22,22,24,23,24,24,23,25,22,21,22,23,24,23,24,24,26,25,27,26,26,27,26,27,26,27,27,27,27,27,26,27,27,27,26,26,27,27,27,27,26,25,25,26,26,26,25,25,26,23,23,23,24,22,22,20,20,19,18,16,15,15,11,10,8,7,5,4,4,3,4,4,3,4,4,4,4,4,4,5,4,5,5,5,6,6,6,7,7,6,7,7,7,7,6,6,5,6,6,6,7,6,7,7,7,6,7,6,6,6,6,6,5,5,5,4,4,4,4,4,3,3,2,2,2,3,3,2,2,3,3,2,3,3,3,3,4,4,4,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,3,2,4,5,5,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,4,4,4,4,3,4,4,3,3,3,3,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,6,8,9,10,10,10,13,14,16,17,18,20,20,19,18,19,20,20,23,21,23,22,22,26,25,24,25,25,24,25,25,25,25,23,25,25,22,23,24,24,25,24,24,25,24,26,24,23,24,25],[28,27,27,26,28,27,28,28,26,26,25,22,26,23,25,23,25,25,23,26,24,23,25,25,23,25,26,23,25,25,23,26,27,27,25,27,26,26,26,26,26,26,25,26,25,25,23,21,22,21,20,19,19,19,16,18,18,15,15,15,12,10,8,6,5,5,4,3,4,3,3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,3,3,4,4,3,3,4,4,5,4,5,6,6,7,8,9,10,10,10,11,12,12,12,13,14,15,15,15,17,20,18,19,21,21,20,23,19,20,22,21,20,20,21,22,20,19,22,23,23,26,23,24,24,24,25,25,25,25,24,25,25,25,26,26,26,26,26,26,26,25,25,25,24,25,25,24,25,24,23,24,23,23,23,22,21,20,18,20,18,17,15,14,14,11,9,7,6,5,4,4,4,4,4,3,4,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,3,4,5,5,5,3,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,1,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,4,3,4,4,3,4,3,4,4,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,4,3,3,4,4,3,4,3,3,3,4,3,3,4,3,3,3,3,3,3,4,4,3,4,3,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,4,5,6,6,7,8,8,9,9,12,12,14,15,16,17,18,17,15,17,17,18,20,17,21,19,21,24,22,22,23,24,21,23,23,22,23,21,23,22,21,20,22,23,22,22,22,23,22,24,23,19,22,25],[28,28,28,27,28,28,28,27,27,26,26,25,26,24,25,24,25,25,24,25,25,24,25,25,24,26,26,24,26,26,24,26,26,27,26,27,26,26,26,26,27,26,26,26,25,25,23,22,24,22,20,21,21,19,18,20,19,17,16,16,13,10,8,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,4,3,4,4,4,5,6,7,8,9,11,11,10,12,13,12,14,15,15,16,16,18,18,20,20,20,22,23,23,24,22,22,23,21,22,22,22,23,22,22,22,26,24,27,25,25,25,25,25,25,25,25,25,25,25,26,26,26,25,26,26,27,25,27,25,26,25,25,26,25,25,25,25,26,24,24,23,23,22,22,19,19,19,17,16,15,14,11,10,8,6,5,4,4,3,4,4,3,4,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,6,6,6,7,7,6,6,7,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,3,4,5,5,4,3,2,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,4,5,6,6,7,9,8,9,10,12,13,15,16,16,19,19,18,17,18,18,19,21,19,23,21,22,24,24,23,23,24,23,23,24,23,24,22,23,24,22,22,23,24,24,24,24,24,23,25,24,21,24,25],[28,28,28,28,28,28,28,27,27,27,26,26,26,24,26,24,26,26,25,26,26,25,26,26,25,27,26,24,27,26,24,26,26,26,26,26,26,26,26,26,26,26,26,26,25,25,24,23,23,23,22,21,21,20,18,20,18,17,17,16,13,11,8,6,5,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,4,4,4,4,5,6,7,7,9,12,12,11,11,14,13,13,15,16,15,16,18,19,20,20,22,22,24,23,24,24,23,24,22,22,23,23,24,23,24,24,26,25,27,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,26,27,27,26,27,27,26,25,26,26,25,26,25,25,25,24,23,23,23,22,21,20,20,19,18,16,14,14,11,10,8,7,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,6,7,7,7,7,7,8,7,7,6,6,6,6,7,7,7,8,7,6,7,7,7,6,6,6,6,5,6,5,4,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,5,5,6,6,6,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,3,5,5,6,4,3,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,4,4,4,4,3,4,3,4,4,3,3,4,4,4,4,3,3,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,4,4,4,4,4,3,4,4,4,4,4,4,4,3,4,3,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,2,3,4,5,6,6,8,9,10,10,11,14,15,17,19,19,21,21,20,19,20,21,21,24,22,24,23,23,26,25,24,25,26,25,25,25,25,25,24,25,25,23,24,25,24,25,25,24,25,24,26,24,23,25,24],[28,28,28,27,28,28,28,27,26,26,26,25,27,24,25,24,26,26,25,26,25,25,26,25,24,26,26,24,26,25,23,26,27,27,25,27,25,26,26,25,27,26,25,25,25,25,23,21,22,22,20,19,20,19,16,18,18,16,15,16,14,11,9,7,6,5,4,4,4,3,3,3,2,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,4,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,4,5,5,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,3,3,4,4,3,4,4,4,5,4,5,6,6,7,8,9,11,11,12,12,13,13,14,15,16,15,16,17,18,20,19,21,22,24,22,23,23,23,25,21,21,22,23,23,22,22,24,25,25,26,25,25,26,25,26,26,25,26,25,26,25,26,26,26,26,26,26,26,26,27,25,26,24,25,26,25,26,25,24,25,23,22,23,21,21,22,19,20,18,17,16,14,13,11,10,8,7,6,5,5,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,7,7,7,7,7,7,8,7,8,7,7,6,6,6,6,7,7,7,8,7,7,7,7,7,6,6,6,6,6,6,6,5,5,5,4,4,4,4,3,3,3,3,4,3,3,4,4,3,4,4,4,4,5,5,5,6,6,6,6,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,3,5,4,6,5,3,2,2,1,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,2,3,2,3,2,2,3,2,2,3,3,2,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,6,7,6,8,10,10,9,11,12,13,15,17,18,20,20,19,16,18,19,20,22,19,23,21,21,25,24,23,24,25,23,24,25,24,23,24,25,24,21,21,24,23,24,24,23,25,23,26,24,21,23,25],[28,28,28,28,28,28,28,28,27,27,26,25,27,24,26,24,26,26,25,26,25,24,26,26,24,26,27,24,26,26,24,26,27,27,26,27,26,27,27,26,27,26,26,25,25,25,23,22,23,22,21,21,20,20,18,19,18,17,17,16,14,11,9,7,6,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,4,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,5,5,5,6,8,8,9,11,13,12,12,12,13,13,14,14,14,15,16,16,17,20,19,20,22,23,22,23,21,21,22,21,21,21,22,22,21,21,23,25,24,26,24,25,25,25,26,26,26,25,25,26,25,25,26,26,25,26,26,27,25,26,25,25,24,24,25,25,25,25,25,25,24,23,23,22,21,21,19,20,19,18,16,15,15,12,11,8,7,6,5,5,5,5,5,4,5,4,5,4,5,5,6,5,6,6,6,6,7,7,7,7,7,8,7,7,7,7,6,6,6,7,7,7,7,8,8,7,8,7,7,6,7,6,6,6,6,6,5,5,5,5,5,4,4,4,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,4,4,4,4,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,3,5,5,5,7,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,4,4,3,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,5,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,7,7,8,10,10,10,11,12,13,15,16,18,19,19,19,17,18,19,20,22,19,22,21,21,24,24,23,24,24,22,24,24,23,24,23,24,24,22,23,25,24,24,24,23,23,24,25,25,22,23,25],[28,28,28,28,28,28,28,28,28,27,27,26,27,24,26,25,26,26,25,26,25,25,26,26,24,26,27,25,27,26,24,27,27,28,26,27,27,27,27,27,27,27,26,26,26,25,23,23,24,23,23,22,22,21,20,20,19,18,18,17,15,12,10,7,6,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,4,3,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,7,7,6,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,5,4,4,4,5,4,4,4,5,4,4,5,5,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,4,5,5,5,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,4,5,5,4,5,5,5,5,5,6,7,9,9,10,11,14,14,13,14,15,15,14,17,16,16,18,19,19,20,21,22,23,25,24,25,25,22,24,22,22,24,24,24,23,24,24,26,25,27,26,26,26,27,27,27,27,27,27,27,27,26,27,27,27,27,27,28,27,27,27,27,26,26,26,26,26,26,26,26,24,23,24,24,23,22,20,19,20,18,17,17,15,13,12,10,8,7,6,6,6,6,5,5,5,5,6,6,6,6,7,7,7,7,7,8,8,9,8,9,9,10,9,9,9,9,8,8,8,8,8,9,9,10,10,9,9,9,9,8,8,8,7,7,8,7,6,6,6,6,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,6,7,7,7,7,7,7,6,5,5,5,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,2,2,3,5,5,6,5,3,2,2,2,2,2,3,2,3,3,3,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4,4,4,4,5,4,4,4,5,5,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,5,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,5,4,4,4,4,4,4,6,6,8,8,9,11,12,12,12,14,16,17,18,18,21,20,21,20,20,21,21,23,21,23,23,24,25,25,25,24,25,24,25,25,25,26,24,24,26,25,24,26,26,25,26,24,24,24,26,25,23,25,26],[28,27,28,28,28,28,28,28,28,27,27,26,27,26,26,25,26,26,25,27,26,25,27,26,25,26,26,25,26,26,24,27,27,27,26,27,26,26,26,26,27,26,25,26,26,25,24,23,23,23,23,20,21,21,19,20,19,18,17,18,15,13,11,9,7,7,6,6,6,6,6,5,6,5,5,6,5,6,5,5,5,5,5,4,4,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,8,8,8,8,9,9,8,10,9,9,10,10,8,8,8,9,9,9,9,9,9,8,8,9,8,8,8,8,8,7,8,7,6,7,7,8,7,6,6,7,7,6,6,7,6,6,7,7,6,7,7,7,6,7,7,8,7,7,8,7,7,7,8,8,7,7,8,8,7,8,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,5,6,5,5,5,5,5,4,5,5,5,6,6,5,6,5,5,5,6,6,6,5,4,5,4,5,5,4,4,5,4,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,7,8,8,9,8,8,8,9,8,7,8,8,8,8,7,7,8,7,7,6,6,6,6,6,7,7,7,6,6,6,5,5,4,4,5,4,4,4,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,4,4,4,4,5,6,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,9,9,8,8,8,7,7,7,7,7,7,7,8,7,8,8,8,9,9,10,12,14,14,13,13,16,16,15,16,17,17,18,19,20,21,21,23,24,25,24,26,25,23,25,23,22,24,25,26,24,25,25,27,27,28,27,27,27,28,27,28,28,28,28,28,28,28,28,28,28,28,27,28,27,28,28,27,27,27,27,27,27,26,26,26,25,24,25,23,22,22,22,22,21,20,19,18,17,14,14,12,10,9,8,8,8,8,8,9,8,9,9,9,9,9,9,10,10,10,10,10,10,12,11,11,11,11,12,12,11,11,11,10,10,11,11,11,11,12,12,10,12,11,12,10,10,10,9,10,10,10,9,9,9,9,8,9,8,8,8,8,8,8,8,8,8,8,8,8,9,8,8,9,9,9,11,10,10,10,10,8,9,8,8,7,7,7,6,6,6,5,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,2,2,2,2,1,1,1,0,1,2,2,3,6,6,7,6,4,3,3,2,3,3,3,3,4,5,5,5,6,6,6,5,5,5,5,4,4,4,4,3,3,3,3,2,3,2,2,3,3,2,2,3,4,3,3,4,4,4,4,6,5,5,6,6,6,6,7,6,7,7,7,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,3,4,5,5,5,5,5,5,6,6,6,6,7,6,6,7,7,6,6,6,6,6,6,5,6,6,5,6,6,5,5,4,3,4,4,3,3,4,3,3,4,4,3,4,5,4,4,5,5,4,5,6,6,6,6,5,5,5,5,5,4,5,5,4,4,4,5,4,3,4,4,3,4,4,4,4,5,5,5,5,4,4,5,4,4,5,5,5,4,6,5,5,6,6,6,5,6,7,6,6,6,6,6,5,6,6,6,7,6,6,7,7,6,6,7,8,8,9,8,7,8,7,8,7,7,7,7,7,7,7,7,7,6,7,7,6,6,6,7,6,6,7,7,6,7,7,7,6,7,8,7,7,7,7,7,7,8,9,11,10,12,14,13,14,14,16,17,19,20,19,23,22,23,20,21,22,22,24,22,24,23,23,26,26,25,25,26,25,26,26,26,26,25,26,26,24,24,26,26,25,27,25,25,25,26,25,23,26,26],[28,28,28,28,28,29,28,27,28,27,27,26,27,25,26,25,26,27,24,26,26,24,26,26,24,26,27,24,26,26,24,27,27,27,25,28,26,27,27,27,28,27,26,26,26,26,24,24,26,23,22,22,24,21,19,22,21,18,19,19,17,15,13,11,10,9,9,8,8,7,8,8,8,8,7,7,7,8,7,8,7,7,8,6,7,7,6,6,6,7,8,8,7,8,9,9,9,10,10,10,10,10,11,11,11,11,12,12,12,12,11,11,10,10,11,11,11,11,11,11,11,10,11,11,11,10,10,11,10,10,11,10,9,10,10,11,10,9,9,10,9,9,9,9,9,9,10,9,8,10,9,9,9,8,9,10,9,10,9,10,9,9,10,10,9,9,10,10,9,9,10,10,9,9,10,9,9,10,10,9,9,8,9,9,8,8,9,8,7,8,8,8,7,8,8,8,9,8,8,9,8,8,8,9,8,8,7,7,7,6,8,8,6,7,8,7,7,8,8,7,7,8,7,7,7,8,8,8,8,8,8,8,9,9,10,10,9,10,11,11,9,10,10,10,9,9,9,9,8,9,9,8,7,8,9,9,9,9,9,7,7,7,7,7,7,6,5,6,6,4,6,6,5,4,5,6,6,6,6,6,5,5,4,5,5,5,4,5,6,6,7,7,7,7,8,8,7,7,7,8,8,8,8,8,9,9,9,9,10,10,9,10,11,10,10,11,11,12,11,10,10,10,10,9,9,9,10,9,9,9,10,10,10,10,11,10,11,12,14,15,16,15,15,17,17,17,17,17,18,19,20,22,22,21,24,25,26,25,26,25,24,26,25,23,24,25,25,24,24,26,27,26,28,27,27,28,27,27,28,28,28,28,28,28,28,28,29,28,28,28,29,28,28,28,28,27,27,28,27,28,27,27,28,25,25,26,26,24,24,22,23,22,21,19,20,18,16,15,13,12,11,10,11,11,10,11,9,11,10,11,11,11,12,12,12,13,13,13,13,13,14,14,14,15,15,15,15,14,14,12,13,13,14,13,14,14,17,16,15,15,15,16,14,14,13,13,13,13,14,12,12,12,12,11,10,11,10,10,9,10,11,9,10,10,10,10,10,11,11,11,11,11,12,13,13,12,12,12,11,10,10,10,9,9,8,8,8,8,7,7,8,7,6,7,7,6,6,6,5,6,5,5,4,4,3,3,3,2,2,2,1,1,0,1,2,3,5,6,7,7,5,4,4,4,4,6,5,5,6,7,8,9,7,7,9,8,7,9,8,6,6,6,5,5,5,5,5,4,5,5,3,4,5,3,3,5,5,3,4,5,5,5,5,6,6,6,7,7,7,7,8,8,9,9,8,7,8,7,7,7,7,6,6,5,6,6,5,5,4,6,5,4,4,5,5,3,4,5,4,4,5,5,4,3,5,5,4,5,6,5,6,7,8,7,7,7,9,8,8,9,9,10,9,9,10,9,9,10,8,9,9,8,8,8,8,8,8,8,7,6,5,7,5,4,5,6,4,4,6,5,4,5,6,6,5,8,7,7,8,7,8,8,9,8,7,8,9,7,7,9,8,7,6,6,8,7,7,5,6,6,6,7,5,6,7,7,7,8,6,7,7,7,6,7,7,7,7,8,8,9,9,8,9,8,10,10,10,9,8,9,8,8,10,8,9,9,10,8,9,10,9,9,9,10,10,10,10,10,10,9,10,10,10,10,10,9,11,11,9,9,9,9,9,8,8,9,9,8,9,9,9,7,9,9,9,8,9,9,9,9,10,9,9,9,11,12,12,12,14,15,15,16,16,17,19,19,19,20,24,22,23,22,23,22,23,25,24,24,26,24,26,26,26,26,27,26,27,27,27,27,25,27,27,25,26,27,27,26,26,26,26,27,27,25,25,26,27],[29,29,28,29,29,29,29,28,28,28,27,27,28,27,27,27,27,27,25,26,26,26,26,26,25,26,26,25,26,26,25,27,27,27,26,28,27,27,27,27,28,27,26,26,27,26,24,23,25,24,21,21,24,22,20,22,21,19,20,20,19,15,14,12,10,11,12,9,10,9,9,10,10,10,11,9,9,10,9,8,9,10,9,7,9,10,7,10,10,10,10,12,11,12,13,12,13,14,13,13,15,14,14,15,16,15,16,17,16,16,16,15,14,15,15,15,16,16,16,15,15,15,15,16,16,15,15,16,14,14,15,15,12,15,14,16,15,14,13,14,14,13,13,14,14,13,14,13,12,14,13,13,12,13,13,13,13,14,12,14,13,11,12,12,13,12,12,13,13,12,14,14,13,14,15,13,13,15,15,15,13,13,14,14,14,14,12,12,13,13,12,11,12,12,12,13,12,12,12,12,11,12,11,11,11,10,9,10,10,10,11,11,10,11,11,12,11,12,12,12,11,12,13,11,12,12,12,9,12,12,12,12,11,12,13,13,13,14,14,14,14,13,14,15,14,12,13,14,12,12,12,13,13,12,13,13,14,13,12,12,12,12,12,13,11,11,10,11,11,8,10,9,8,8,8,8,10,10,8,9,9,8,7,7,8,10,7,8,10,9,9,10,12,11,11,11,12,13,11,11,11,11,12,14,14,12,13,15,13,13,14,16,14,15,16,17,15,16,15,15,14,13,13,13,12,11,13,11,11,12,13,12,12,12,13,11,13,13,15,16,16,16,17,17,18,19,19,19,20,22,21,24,24,23,25,26,27,26,27,26,25,27,26,24,26,26,27,26,26,27,28,28,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,29,29,29,28,28,28,28,28,29,28,28,28,27,28,26,26,27,26,25,25,23,23,23,22,21,21,19,19,17,15,15,15,13,15,15,14,15,15,15,15,15,15,16,16,17,16,16,17,17,16,16,18,16,17,17,16,17,17,17,17,16,16,16,17,16,17,18,19,18,17,17,17,18,16,16,15,16,17,16,16,16,16,15,16,15,16,15,14,14,14,15,15,14,15,16,16,14,16,15,16,16,16,16,17,17,17,16,16,17,16,15,16,14,14,14,14,13,14,13,12,13,12,12,12,13,12,11,11,11,9,11,11,9,8,8,7,6,6,6,6,4,3,2,1,0,1,3,5,6,8,8,7,6,7,6,7,7,8,8,8,10,11,10,9,10,11,11,10,12,11,8,8,9,9,8,9,9,7,6,6,7,4,5,5,5,4,6,7,6,6,7,9,8,8,10,10,11,11,12,13,14,14,13,15,15,14,13,14,13,12,12,12,11,10,10,12,11,9,10,8,9,10,10,7,10,6,5,6,5,5,7,5,7,7,5,5,6,7,9,8,7,9,8,10,11,9,11,11,11,11,13,12,12,11,12,12,12,13,13,12,12,12,11,9,11,9,10,10,9,8,7,6,7,6,5,7,7,6,5,7,7,7,7,9,8,8,10,10,10,10,11,14,12,13,11,11,10,10,10,10,11,10,9,9,9,11,9,8,8,10,7,7,9,8,7,9,8,9,8,8,9,10,9,8,10,10,9,10,12,10,10,11,12,12,11,12,14,11,10,13,14,10,10,13,11,11,13,13,10,12,15,12,11,13,14,14,15,15,15,15,13,15,13,15,13,14,13,12,15,12,12,11,13,13,14,13,14,14,11,14,14,16,15,15,14,15,15,14,14,15,15,16,15,16,15,15,16,17,17,18,19,19,21,20,20,22,22,23,22,25,24,25,24,24,24,25,27,25,26,27,25,27,26,28,27,27,26,28,28,27,28,27,28,27,26,27,28,28,26,28,26,27,27,28,27,26,28,28],[29,29,28,29,28,29,29,28,28,28,27,27,28,26,27,26,27,27,26,27,26,24,26,26,24,26,26,24,25,26,24,27,27,27,26,27,26,26,26,26,27,26,26,26,26,26,24,23,25,23,24,22,22,23,21,22,21,20,21,21,19,16,15,14,12,12,12,12,11,13,12,12,13,12,11,12,13,12,13,11,12,14,13,11,11,12,10,11,11,12,14,14,13,16,15,15,16,16,16,15,16,17,16,16,17,16,17,17,17,16,17,17,17,16,17,18,17,17,17,17,17,16,17,17,16,15,16,17,15,16,17,15,16,17,16,17,15,16,15,15,15,16,16,16,16,16,16,15,16,15,15,15,16,15,15,16,16,15,15,16,15,16,15,16,16,16,15,16,17,15,15,16,16,15,16,15,14,16,16,16,15,16,16,16,17,16,14,15,16,16,13,13,14,15,15,13,13,13,11,14,13,9,10,13,10,9,10,11,10,10,13,10,10,13,14,12,13,14,15,12,13,16,15,13,15,15,16,14,15,15,16,15,15,14,16,15,15,17,16,17,15,15,16,16,16,15,16,16,15,16,16,15,16,15,15,14,16,15,15,16,14,14,13,15,14,11,10,11,10,10,12,9,9,10,8,9,9,9,11,9,9,9,10,10,11,11,11,11,11,11,11,12,15,14,13,14,14,14,13,13,14,14,13,14,14,14,14,16,14,15,15,15,15,16,15,16,15,17,16,15,15,15,14,15,14,13,14,13,15,14,14,12,12,12,13,14,14,14,14,17,16,17,18,19,18,18,18,20,21,20,22,23,23,24,26,25,27,24,26,26,24,27,25,24,25,26,26,26,26,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,27,28,28,28,28,28,27,28,26,26,27,26,26,27,24,25,25,23,23,21,21,20,18,17,17,16,13,14,15,16,15,14,16,17,16,17,16,17,17,16,16,17,17,15,17,18,17,16,17,17,17,18,16,17,17,17,16,16,17,17,18,20,19,18,18,18,17,16,16,15,16,17,16,16,16,16,17,15,16,15,16,14,15,14,14,17,15,17,16,16,16,16,16,16,16,17,16,16,17,16,15,17,18,16,17,16,17,17,15,15,14,15,15,14,15,15,16,14,15,16,11,13,10,10,13,15,10,10,11,8,8,9,7,6,7,6,4,3,1,0,1,4,6,9,7,8,10,8,7,9,10,9,9,10,11,11,12,10,10,11,11,11,12,10,9,10,9,9,8,8,8,9,7,9,9,8,7,9,8,6,9,9,8,9,10,12,10,11,11,12,11,13,14,14,15,14,14,15,15,15,14,14,14,14,12,12,13,10,12,14,10,9,9,9,10,9,9,8,9,6,6,6,7,6,6,6,7,6,6,7,7,6,9,8,10,11,12,13,13,12,14,15,14,15,16,16,14,15,16,15,15,15,14,13,14,14,11,11,13,11,12,12,11,10,8,7,10,8,7,9,9,7,7,9,10,9,9,10,10,10,11,13,11,11,13,13,14,14,13,14,13,13,11,9,13,12,10,11,10,11,9,7,9,10,7,7,11,7,7,11,10,11,11,7,10,12,10,8,11,12,9,12,13,13,13,12,13,13,11,12,13,11,12,12,13,12,10,12,11,11,13,12,11,13,13,12,13,14,15,13,15,14,15,14,14,15,13,14,13,14,14,14,15,14,15,14,15,14,13,13,15,15,15,13,14,15,14,16,15,16,16,16,16,17,17,15,15,16,15,16,16,17,17,18,19,19,20,20,22,23,22,23,23,26,26,26,25,25,26,25,27,25,26,27,25,27,26,27,28,28,27,28,28,28,28,28,28,28,26,27,28,28,28,28,28,27,28,29,28,27,28,28],[30,29,29,29,29,29,29,28,28,28,28,26,28,26,27,27,27,27,25,27,25,24,26,25,23,25,26,24,25,25,24,26,27,27,25,27,26,27,27,26,27,26,26,26,26,26,24,23,25,24,21,22,24,22,19,22,22,20,21,23,21,18,18,18,15,17,17,16,17,16,17,16,17,19,18,17,19,19,18,16,17,19,17,15,16,18,13,17,14,17,18,18,18,20,18,18,19,21,20,19,21,20,20,21,22,21,22,23,22,21,22,22,22,21,22,22,21,22,21,22,22,22,23,23,22,22,23,22,21,21,22,21,20,21,21,21,20,19,19,20,21,19,19,20,20,20,20,20,19,20,20,21,20,20,20,21,20,20,20,22,22,19,20,22,20,19,21,21,20,20,21,21,20,21,21,20,20,20,21,22,21,20,19,20,20,20,19,19,19,19,18,16,18,18,18,17,16,18,15,16,15,14,13,15,14,14,14,12,13,15,16,15,15,17,18,16,17,19,19,17,17,19,20,17,19,20,19,17,19,19,18,19,18,19,20,22,21,20,20,21,22,21,21,22,21,21,20,21,20,20,20,20,19,19,18,19,19,19,18,18,18,20,18,18,18,16,15,15,15,12,14,14,12,11,11,12,13,13,12,12,12,14,13,13,15,15,12,15,16,15,14,17,20,19,18,19,18,19,18,19,17,18,19,18,18,19,19,18,20,19,19,21,20,20,21,20,21,21,20,19,20,19,18,17,18,18,17,16,17,17,17,18,17,17,17,17,18,18,17,19,19,20,20,20,20,21,21,21,23,23,23,25,26,25,27,28,28,27,28,27,26,27,28,26,27,27,28,27,27,27,27,29,29,28,28,28,28,28,28,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,28,29,29,29,29,28,28,29,28,28,28,27,26,26,24,26,25,24,24,23,23,21,20,20,19,19,18,19,19,20,19,19,20,19,21,19,20,22,22,19,22,23,22,20,21,23,22,21,23,23,21,23,22,23,21,22,22,24,23,24,23,25,24,23,24,23,23,23,22,20,20,23,21,21,21,21,20,21,21,21,22,17,20,17,19,22,19,20,20,21,19,20,21,22,20,21,21,22,22,21,21,21,22,22,20,20,19,20,19,20,18,19,19,18,17,17,17,16,17,17,16,17,16,15,14,15,12,12,11,9,8,9,8,7,7,7,5,5,2,1,0,1,6,7,7,7,8,9,9,11,12,12,12,12,16,16,16,15,14,16,17,14,18,16,13,14,16,13,12,15,15,12,11,14,11,9,9,13,9,9,11,13,10,11,13,15,12,14,16,16,15,16,17,18,17,18,18,18,18,19,18,18,17,18,18,16,17,17,14,16,17,12,13,11,11,11,10,9,9,8,7,7,8,8,9,8,11,11,9,10,12,12,15,14,16,15,15,18,18,17,20,19,19,19,19,19,19,18,18,19,18,19,19,17,18,19,17,15,17,16,16,16,15,14,14,12,14,11,9,13,13,9,8,12,13,8,11,14,12,11,15,15,15,15,16,16,17,17,17,17,17,18,16,14,16,16,12,12,11,15,12,10,11,15,10,9,15,13,12,15,14,16,16,13,14,16,14,13,15,16,14,14,17,16,17,17,16,17,15,16,20,17,16,18,18,15,14,19,17,15,18,18,17,18,18,16,17,17,17,17,18,20,19,18,19,18,18,18,16,18,17,18,20,18,19,16,19,18,18,17,19,18,18,19,19,18,19,18,17,18,19,18,18,19,18,20,20,21,18,20,20,19,21,22,22,23,24,24,24,25,25,26,25,28,27,28,27,27,27,27,28,27,28,29,28,29,28,29,29,29,28,29,29,29,30,29,29,29,29,29,29,29,29,29,29,28,29,29,29,28,29,29],[29,29,29,29,29,29,29,28,28,27,27,26,27,25,26,26,26,26,25,26,25,24,26,25,25,26,26,25,26,26,26,27,27,28,27,28,27,27,27,27,28,27,26,27,28,27,26,25,26,25,24,24,25,24,22,24,25,23,24,24,23,21,21,19,19,19,19,18,19,19,20,20,20,21,19,20,21,19,20,19,21,20,20,17,18,19,15,18,16,18,20,19,20,21,24,21,22,24,24,23,25,24,24,25,25,24,25,24,24,23,24,24,25,23,23,24,24,25,25,25,25,23,25,25,24,24,25,25,23,22,24,24,21,23,23,22,24,22,21,24,23,22,24,24,23,22,24,24,22,23,24,23,22,23,23,23,24,23,23,23,24,21,23,24,22,21,24,23,21,23,24,24,22,23,24,22,22,24,24,25,22,22,23,24,22,22,22,22,20,21,23,20,19,20,20,19,20,20,17,18,18,16,16,17,17,15,16,15,16,17,18,17,16,18,20,18,18,21,21,19,20,23,22,20,21,23,22,21,22,23,21,22,22,23,23,24,24,25,24,25,22,24,25,25,23,24,24,23,22,24,24,22,23,23,21,22,23,22,21,20,21,21,21,21,21,18,18,18,17,12,14,15,15,13,13,13,15,16,13,15,15,14,15,14,16,16,13,16,18,17,17,21,21,22,20,22,22,21,22,22,20,22,23,21,22,23,24,24,25,24,25,25,24,25,24,24,24,24,24,23,24,23,24,21,19,22,23,19,21,22,21,21,18,20,19,19,20,19,18,19,20,21,21,21,22,22,22,21,23,24,25,25,26,26,27,28,28,26,28,28,26,27,27,27,27,27,27,27,27,28,29,28,28,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,29,29,30,30,29,29,29,29,29,29,29,29,28,29,29,28,29,28,28,28,27,27,27,26,26,25,25,24,22,23,22,23,22,22,23,24,23,23,23,25,24,24,24,24,24,23,24,24,24,22,24,24,23,23,25,24,23,24,23,24,24,24,24,24,25,25,24,26,25,24,25,25,24,25,24,24,24,25,25,24,24,24,23,24,24,24,24,23,23,21,23,24,23,24,24,25,24,24,23,24,24,23,23,22,23,22,23,23,25,24,24,24,23,24,23,23,21,23,23,20,19,22,21,19,19,19,19,19,17,16,16,18,15,14,14,13,10,11,10,9,8,10,8,6,7,4,1,0,2,4,5,7,11,12,11,12,13,17,14,15,18,19,19,16,16,19,18,17,19,18,15,16,18,15,12,15,16,13,11,15,13,10,13,14,13,11,14,14,13,13,16,17,17,17,19,19,19,19,21,20,21,22,22,23,23,21,22,20,20,22,21,20,19,19,18,17,18,14,14,16,17,14,11,14,13,10,9,12,10,9,11,11,13,11,11,13,14,13,17,14,17,17,18,20,19,20,21,22,21,22,22,23,22,23,21,21,22,20,19,19,20,20,17,17,20,19,18,18,18,15,16,14,17,14,11,15,16,11,13,16,16,12,15,19,19,18,18,21,19,18,19,19,21,20,21,20,19,21,19,19,19,17,17,15,17,18,14,13,16,17,13,15,16,15,15,16,17,18,18,17,16,18,18,17,17,19,18,17,20,20,19,19,19,19,17,19,20,17,18,19,19,16,17,21,18,18,21,20,19,21,22,20,21,21,22,21,23,23,22,23,22,21,21,22,20,20,21,20,21,20,21,18,20,21,21,20,22,22,21,21,22,21,21,21,23,22,23,23,24,23,22,24,24,24,23,23,22,22,23,24,23,23,25,25,25,26,26,27,25,28,27,28,28,28,28,27,29,28,28,29,28,29,29,30,29,30,29,30,30,29,30,29,30,30,29,29,30,30,29,29,29,29,29,30,30,29,29,29],[29,29,29,29,29,28,29,28,27,27,27,26,27,24,26,26,26,26,24,26,25,24,25,25,24,25,26,25,26,26,26,27,28,27,27,28,27,28,28,28,28,27,27,27,28,28,26,25,27,26,24,25,26,25,23,26,26,24,25,26,25,22,23,22,21,22,22,20,21,21,21,21,21,24,22,22,21,22,22,20,22,22,20,19,20,22,16,20,17,21,21,21,23,23,23,22,22,25,25,24,25,25,25,26,26,25,26,26,26,26,26,27,27,26,27,27,25,26,26,27,27,26,27,27,26,26,27,26,25,25,26,26,24,25,25,25,26,23,24,25,26,22,24,25,24,23,25,24,22,24,24,24,24,24,25,24,25,25,24,26,26,23,24,25,24,24,25,26,24,25,25,25,25,25,25,24,24,26,26,27,25,24,25,25,24,24,24,23,23,23,24,21,22,22,22,22,22,21,19,19,20,15,16,17,18,15,16,17,17,18,20,18,17,23,22,21,21,22,22,21,21,23,23,21,23,24,24,21,23,24,23,24,23,25,24,26,25,25,25,26,27,26,26,26,26,25,26,25,25,25,25,24,24,24,23,24,24,24,23,24,23,24,23,23,23,20,20,21,21,15,17,16,15,13,12,13,14,16,15,16,15,15,16,15,18,19,17,19,20,20,20,22,23,23,22,23,23,24,24,24,23,23,24,23,23,24,24,24,25,25,25,27,26,26,26,26,27,26,25,25,25,25,24,22,23,23,24,21,23,24,22,24,21,22,22,19,22,23,19,22,22,23,23,24,24,24,24,24,26,26,26,27,28,28,28,29,29,28,29,28,28,28,29,28,28,29,29,28,28,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,29,30,29,29,29,29,28,28,27,28,28,27,27,27,26,26,25,25,24,25,25,25,26,26,25,25,26,24,26,26,25,27,27,25,27,27,27,26,26,27,26,25,26,27,26,27,27,27,25,27,27,27,27,27,27,28,28,28,28,28,27,27,27,26,25,27,26,27,26,26,26,25,25,25,27,22,25,23,24,26,25,24,26,26,24,25,26,26,25,26,26,25,26,26,26,26,26,26,26,26,25,26,24,25,23,24,24,22,22,23,22,21,22,22,21,22,19,18,19,19,15,13,16,15,11,11,12,10,8,10,9,8,8,6,3,1,0,2,3,6,8,11,10,12,15,16,16,16,19,20,20,17,18,20,20,19,20,20,17,18,19,15,13,16,18,13,11,14,16,11,13,16,13,13,17,19,15,18,20,20,20,21,21,22,22,22,23,23,23,23,24,24,24,24,24,23,22,24,23,23,22,22,20,21,20,15,16,18,18,16,14,16,16,14,12,16,14,14,15,16,17,14,12,17,17,14,18,14,19,20,18,21,22,21,23,22,22,22,23,23,23,23,22,22,22,22,23,21,21,21,20,18,20,19,19,20,19,19,19,19,21,18,14,19,19,16,18,20,19,17,20,22,21,20,21,22,21,22,22,24,23,24,23,23,23,24,21,22,23,22,18,21,19,21,20,16,20,21,19,18,20,18,19,20,22,20,21,19,21,21,22,21,22,22,21,21,23,23,23,22,22,22,20,22,25,22,22,23,24,21,20,26,23,21,24,24,22,22,25,23,22,22,25,24,25,25,25,24,25,25,25,25,22,24,23,23,24,23,24,22,26,24,24,24,24,23,23,24,24,24,24,23,23,24,24,23,24,24,23,25,24,25,24,25,23,23,25,25,26,25,27,27,27,28,27,28,28,29,29,29,28,29,28,29,29,29,29,30,28,29,29,30,29,30,29,30,30,30,30,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30],[29,29,29,29,29,28,28,28,27,27,27,26,27,26,26,26,27,28,25,27,27,25,27,27,25,26,27,26,26,27,27,28,28,29,28,29,28,28,28,28,29,28,28,28,28,28,27,25,27,26,24,26,26,26,24,26,26,24,25,27,26,24,24,23,23,23,23,23,22,24,22,25,22,24,22,23,22,22,22,22,22,23,21,20,20,21,17,19,17,20,22,22,22,23,23,23,24,24,24,23,26,25,25,26,27,25,25,26,26,24,25,26,26,26,26,26,26,27,27,26,27,26,26,26,26,25,27,26,25,24,25,25,23,23,24,23,23,21,22,23,24,22,23,24,22,23,24,23,21,25,24,23,23,25,24,24,25,24,25,25,26,23,25,26,25,24,25,25,23,25,26,26,23,26,26,24,24,26,25,25,23,22,22,23,22,22,21,21,21,20,22,20,19,20,21,20,20,18,16,19,18,15,14,17,16,15,15,15,16,17,18,16,15,19,20,19,21,21,21,19,20,22,23,20,23,23,22,21,23,24,23,24,24,24,25,26,26,26,26,26,26,26,26,26,25,25,25,25,23,24,23,23,22,23,21,23,24,22,21,20,20,21,20,20,20,20,19,18,18,16,15,15,13,11,13,11,14,15,12,16,15,13,16,17,17,15,16,20,20,19,20,21,21,22,22,22,22,22,23,23,23,23,24,22,24,24,25,25,26,25,25,27,26,26,26,27,26,27,26,25,26,25,24,23,23,25,26,22,23,24,25,25,22,23,23,23,24,24,22,23,23,25,26,25,26,27,26,26,27,27,26,27,29,28,28,29,29,28,29,29,29,29,28,28,29,29,29,29,28,29,30,29,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,28,29,28,29,28,28,28,27,27,26,25,26,24,24,25,25,26,26,26,24,26,24,26,25,26,26,27,25,27,26,26,25,25,26,25,25,26,25,24,25,25,26,25,24,25,26,26,26,26,27,26,25,27,26,25,26,25,24,26,27,26,26,26,26,25,26,26,26,27,23,25,22,26,26,24,25,26,26,24,26,26,26,25,25,25,24,25,24,24,24,24,25,24,25,25,24,24,24,21,23,22,21,22,22,20,20,21,19,17,20,17,14,16,18,15,16,17,14,11,12,14,12,9,12,11,11,12,8,7,4,2,0,2,3,6,9,11,12,13,16,16,15,18,18,18,18,17,18,20,19,20,19,16,18,19,15,15,16,17,15,15,18,16,14,16,17,17,18,19,16,18,20,19,19,19,20,21,21,20,21,22,22,23,23,22,23,23,24,23,23,22,22,22,21,19,18,18,20,20,16,16,19,19,18,16,18,20,13,16,21,17,16,18,18,19,17,19,18,18,19,18,17,18,21,20,20,22,22,24,23,23,23,24,23,24,23,23,23,21,22,22,20,21,20,20,20,20,21,21,21,21,20,21,18,22,18,18,20,21,18,18,21,19,18,20,20,20,20,20,22,20,21,21,23,23,24,20,21,23,24,20,21,23,22,21,21,19,21,20,21,20,22,18,19,22,21,20,22,22,22,22,22,24,22,22,21,23,22,21,23,23,23,23,24,24,24,22,24,25,23,24,24,24,22,23,26,24,24,25,25,24,24,27,25,23,23,26,24,26,26,25,25,26,26,25,26,24,24,25,25,25,23,24,20,22,24,24,23,24,25,23,22,24,23,22,24,23,22,22,23,24,22,23,24,24,24,22,23,23,23,23,24,24,25,26,26,25,25,26,27,26,28,27,28,27,28,27,27,29,28,27,29,27,28,28,30,29,29,28,30,29,29,30,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,30,29],[29,29,29,29,29,29,29,29,28,27,28,27,28,26,27,26,27,27,26,28,27,26,27,27,26,26,27,27,27,28,26,28,28,29,28,29,28,29,29,28,29,29,28,28,29,29,27,26,28,27,25,26,27,26,24,27,26,25,26,27,26,23,24,22,24,23,24,24,24,25,23,24,24,23,21,24,24,22,23,23,21,22,22,20,17,20,19,20,19,18,21,20,20,22,23,22,22,24,24,22,24,24,24,22,24,24,23,24,24,22,23,24,24,24,25,25,24,25,25,25,25,24,25,25,24,22,25,25,23,22,24,23,21,21,22,21,21,18,21,23,22,20,22,22,20,23,24,23,22,23,24,22,24,23,23,24,25,24,23,25,25,23,25,26,23,23,26,25,22,24,25,24,22,24,25,22,24,25,24,24,22,22,22,22,21,20,20,21,19,19,20,18,14,17,18,17,18,13,13,14,14,12,11,15,14,13,15,13,14,16,16,14,15,18,18,15,16,19,18,16,20,21,20,20,22,23,22,23,24,23,23,24,23,23,24,25,23,25,24,25,23,24,25,23,24,25,25,23,23,24,23,22,22,23,20,21,21,19,21,19,20,19,18,18,18,16,17,15,16,13,14,14,12,10,11,8,12,11,9,12,12,14,14,16,17,17,16,20,16,17,17,21,20,20,23,23,22,23,23,23,25,24,24,24,25,25,24,26,25,25,24,26,26,25,26,25,26,25,25,25,25,25,24,22,22,24,25,24,23,24,24,25,24,23,23,24,23,24,23,23,24,24,24,25,25,25,26,25,26,27,27,27,28,28,28,29,30,29,30,29,28,29,28,27,28,29,28,29,28,28,30,29,30,30,30,29,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,29,30,29,28,29,28,28,28,27,27,27,25,25,24,24,25,25,24,23,25,26,24,25,25,26,25,25,25,25,25,23,26,25,24,24,24,26,25,24,25,24,24,24,24,24,23,24,24,25,24,25,25,26,26,26,25,26,23,25,24,24,24,25,25,25,24,25,25,26,25,25,26,24,24,23,25,26,25,25,25,25,23,24,24,24,23,24,24,22,23,23,22,23,24,24,23,23,23,23,23,22,22,23,23,20,21,23,20,19,22,18,16,18,15,15,14,17,14,13,13,14,11,13,14,12,9,14,13,12,12,10,8,7,5,2,0,1,4,7,9,13,12,12,14,14,18,17,18,18,17,19,20,20,21,18,15,18,19,19,17,20,20,16,16,22,14,14,19,19,15,15,21,20,16,20,17,19,21,20,20,20,21,23,23,21,24,23,22,24,24,23,23,23,23,21,20,21,21,17,18,18,17,16,15,17,20,15,15,19,21,15,16,21,16,17,18,19,19,19,21,18,20,21,21,21,19,21,22,23,21,22,23,22,24,24,23,24,24,24,24,22,23,22,22,21,22,22,20,21,22,21,21,22,22,22,22,20,22,23,21,20,20,20,22,20,18,22,20,21,21,22,21,20,21,21,23,24,23,24,20,21,23,23,19,21,22,21,19,20,19,21,18,18,20,22,20,18,22,22,22,23,23,24,22,21,24,24,22,22,25,24,21,23,25,23,24,24,24,24,22,23,25,22,24,24,23,22,22,26,24,24,24,25,24,24,25,25,25,25,25,24,25,24,24,25,25,26,24,24,23,23,23,23,23,23,23,19,22,23,23,23,23,23,22,22,23,23,21,22,23,22,21,22,24,22,21,24,22,23,22,22,21,21,22,23,22,22,24,26,24,26,26,27,26,28,27,28,27,28,27,27,29,27,28,29,27,28,28,30,29,29,28,30,29,29,30,30,29,29,28,29,30,30,28,29,29,29,30,29,29,28,29,29],[29,29,29,29,29,28,29,29,27,27,27,25,27,26,27,26,27,28,26,28,27,26,27,27,27,26,27,26,27,28,26,28,28,29,28,28,28,28,28,28,29,28,28,28,28,27,26,24,27,25,24,24,25,24,23,25,24,22,23,23,22,19,19,18,18,19,18,17,16,18,16,17,17,17,16,17,16,17,16,15,14,16,14,14,13,12,12,14,14,13,14,14,12,16,14,13,14,17,16,14,17,16,16,15,18,17,18,19,18,17,18,19,18,19,18,18,18,20,20,20,20,17,19,20,17,16,18,18,15,16,16,15,13,16,15,17,15,13,14,15,13,13,14,15,13,13,16,16,14,15,17,15,15,17,16,17,16,17,18,19,18,17,18,19,17,17,18,19,17,18,18,18,16,18,17,16,16,18,17,17,16,15,15,14,14,14,14,13,12,12,13,13,10,12,13,13,14,11,10,12,11,8,11,12,11,10,10,8,10,10,11,9,8,12,12,10,10,12,12,11,12,16,14,13,15,17,15,15,16,17,15,17,17,17,18,19,18,19,20,19,19,19,20,18,18,18,18,18,17,18,16,16,16,16,15,16,15,14,15,13,14,13,12,12,12,10,11,11,9,9,10,9,6,7,8,7,9,8,7,8,8,8,7,9,11,9,10,12,13,11,13,15,13,15,15,16,15,17,17,18,18,18,18,18,19,18,19,19,20,20,20,22,19,20,21,21,21,22,20,21,20,20,19,18,18,17,21,18,17,18,19,21,16,18,19,19,21,20,18,20,20,21,21,23,22,23,24,24,24,24,25,25,27,26,27,27,27,27,28,26,27,27,25,26,27,27,28,27,26,28,29,29,30,28,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,28,29,29,29,29,29,28,29,29,28,29,29,28,29,29,29,29,28,27,28,26,27,26,25,24,23,23,22,21,21,19,18,20,20,21,20,21,19,22,22,22,23,22,21,23,21,21,21,22,20,19,21,20,19,20,19,20,21,22,20,21,21,19,21,20,20,20,22,22,20,23,21,21,21,20,17,20,22,20,20,21,20,19,20,20,20,22,18,20,18,21,22,19,20,21,21,20,21,20,20,21,20,19,20,19,18,18,19,20,20,20,20,19,18,18,16,16,17,16,15,16,17,13,12,15,13,13,14,13,12,10,11,11,9,9,11,8,7,10,9,6,8,10,11,9,8,7,7,5,3,1,0,1,4,6,7,6,7,10,9,13,12,14,13,13,13,14,14,14,13,14,14,13,12,12,13,12,12,12,11,10,9,11,11,10,12,11,11,10,13,12,12,13,14,15,13,15,16,15,16,17,17,16,19,19,19,16,16,16,14,15,13,13,13,12,14,14,12,12,12,15,13,11,12,13,10,11,12,11,12,13,15,13,13,12,14,13,14,14,15,13,15,15,15,16,15,17,16,16,16,16,16,17,17,17,18,16,17,16,14,17,15,15,16,15,16,16,15,16,15,16,15,18,14,14,16,16,14,16,16,14,12,15,15,13,14,15,15,14,15,15,18,16,19,14,16,17,15,13,14,15,14,13,13,14,15,13,13,15,15,14,14,15,14,14,15,15,16,16,16,16,17,15,16,17,16,16,17,18,17,17,18,19,19,16,20,21,19,19,21,18,16,16,21,18,17,19,20,18,19,22,19,18,19,22,19,21,20,21,20,22,22,19,21,20,18,19,19,21,17,19,16,17,18,17,17,19,19,16,17,19,18,16,19,19,17,15,20,19,16,18,20,18,17,17,18,17,18,19,20,22,22,22,21,22,23,22,25,25,26,26,25,26,26,26,26,29,26,26,28,26,29,28,28,27,29,28,29,29,29,29,28,28,29,27,27,28,28,28,29,28,28,29,29,28,28,29,30],[28,29,28,28,29,28,29,28,27,27,27,26,27,25,26,25,27,27,25,27,26,24,26,26,25,26,27,25,27,26,24,27,27,28,27,27,27,27,28,27,28,27,27,26,27,27,25,24,25,24,22,23,24,22,21,23,22,20,20,20,19,17,16,14,13,12,12,11,10,11,9,10,10,9,8,10,8,8,7,8,9,7,7,6,5,5,5,6,5,5,7,6,7,7,7,7,8,8,8,8,8,8,9,9,9,10,10,10,10,11,11,11,9,9,10,10,10,11,11,11,11,9,10,10,9,10,10,9,9,10,9,8,7,8,8,9,8,7,8,8,8,7,7,8,8,7,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,10,10,8,9,10,8,9,9,9,8,9,10,9,8,9,10,9,9,8,8,9,8,8,8,8,8,7,6,7,6,6,6,6,6,6,6,5,6,6,6,5,6,5,5,5,4,4,4,5,4,5,5,6,5,5,7,7,6,7,8,8,7,9,9,9,8,8,9,8,9,9,10,11,11,10,10,11,10,10,10,11,11,9,10,10,10,9,10,9,8,9,9,10,9,8,8,8,7,7,8,7,7,8,6,6,7,7,5,6,7,3,4,4,3,6,4,3,4,3,3,4,4,4,5,5,6,6,6,6,7,7,7,9,9,8,8,9,9,10,10,10,10,10,11,11,11,11,12,12,12,12,13,13,12,13,11,11,12,12,12,11,13,11,11,12,12,11,12,12,12,13,12,13,13,15,15,16,17,18,18,18,20,19,19,20,21,22,22,22,23,25,25,25,25,27,25,27,24,25,25,23,24,25,24,24,25,25,25,27,26,28,26,28,27,27,28,28,27,28,28,27,27,28,27,28,27,28,28,28,28,28,27,28,26,27,28,27,28,28,26,28,26,26,27,26,26,25,24,25,23,24,22,22,20,18,17,15,14,12,13,13,12,12,12,11,12,13,14,14,14,12,14,14,13,13,13,13,13,14,14,14,15,15,15,16,14,14,14,15,13,14,12,15,14,17,16,15,15,16,14,14,12,13,14,13,14,13,13,12,12,13,12,12,13,12,12,12,12,13,11,12,13,14,12,13,13,12,12,13,12,13,13,13,13,13,13,12,12,11,12,10,10,9,8,10,10,8,9,10,7,7,8,6,6,7,5,5,6,6,4,4,5,6,5,3,5,4,3,4,5,5,6,6,6,7,6,5,3,1,0,1,2,3,3,3,4,4,5,5,6,5,6,7,7,7,7,6,6,6,6,6,5,6,5,4,5,5,3,4,5,4,5,5,5,6,6,5,6,6,7,7,7,8,8,8,8,9,9,9,9,10,10,10,8,8,9,8,7,7,7,6,6,6,6,5,4,5,7,5,6,5,7,5,6,7,6,7,8,7,8,8,7,8,8,8,7,8,7,7,8,7,7,7,8,8,8,8,7,8,9,8,8,9,8,8,8,8,9,9,8,9,9,10,10,9,10,8,9,8,9,7,7,8,8,8,7,9,7,7,8,8,8,8,8,9,8,8,9,9,10,9,9,8,10,9,8,9,8,8,8,8,8,8,8,8,10,9,9,9,9,9,9,9,10,9,9,10,9,10,10,10,11,9,10,11,9,10,9,10,10,10,10,10,11,10,12,10,11,11,10,11,11,11,11,12,11,12,12,11,10,12,12,11,12,11,12,12,11,12,11,11,12,10,11,12,11,10,10,9,10,9,9,9,9,10,9,9,9,11,9,10,9,10,10,10,11,9,10,11,10,10,10,11,12,14,13,16,16,15,17,17,18,19,20,20,21,24,24,23,23,24,24,23,27,24,25,26,24,27,25,27,27,27,25,27,27,27,28,26,27,27,25,25,27,26,26,27,26,26,28,27,26,25,27,27],[29,29,28,28,28,28,29,28,27,27,27,26,27,25,26,25,27,28,26,27,26,26,27,27,25,27,28,26,28,26,26,28,28,29,28,28,28,28,28,28,29,27,27,27,28,27,25,24,25,24,22,22,22,21,19,22,21,19,20,18,17,15,13,10,10,9,8,8,7,7,6,6,6,6,5,6,5,5,5,5,5,4,4,3,3,4,3,4,3,4,5,5,4,5,5,6,6,6,6,6,7,6,7,7,8,7,9,9,8,9,9,8,7,7,8,8,8,9,8,9,9,7,8,8,8,7,8,8,7,7,8,7,6,7,7,7,7,6,6,6,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,5,6,7,6,6,7,6,6,6,7,6,6,6,7,6,7,7,7,8,6,6,7,6,6,6,6,6,5,6,6,5,5,5,5,6,5,5,5,5,5,5,4,4,4,4,3,3,4,3,4,3,4,4,4,5,4,4,5,4,4,5,6,5,6,6,6,5,5,6,6,6,7,8,8,9,8,8,8,8,7,7,8,7,7,7,7,7,7,7,7,6,7,7,7,7,7,7,7,6,6,6,6,6,5,5,6,5,4,3,4,3,3,3,3,2,3,3,2,3,3,3,3,2,3,3,3,4,5,5,5,5,6,7,5,6,7,7,6,6,6,6,7,7,7,7,8,7,8,8,8,9,8,9,9,9,9,8,8,9,8,8,8,8,8,8,8,8,8,9,9,9,9,9,10,12,12,12,15,16,16,15,15,18,16,17,17,19,18,19,20,21,22,22,23,23,26,25,25,23,23,25,24,22,24,24,25,24,23,24,26,26,27,25,27,26,26,27,27,27,27,26,27,26,27,27,27,27,27,27,27,27,28,27,27,27,27,27,27,27,27,26,27,24,25,25,25,24,24,22,22,21,21,19,19,17,16,14,12,11,10,9,9,10,8,9,8,9,10,9,10,10,10,10,11,11,11,11,11,11,12,12,11,13,14,13,13,12,12,11,11,11,11,12,13,13,14,14,13,13,12,12,12,11,11,11,11,11,10,10,9,9,9,9,10,9,8,9,9,8,8,8,10,8,9,8,9,8,9,9,8,9,9,11,10,10,10,9,9,8,9,8,8,7,7,7,6,7,7,7,7,6,7,6,5,6,5,5,4,5,5,4,3,3,4,3,3,3,4,2,3,4,4,5,5,5,7,6,6,4,2,1,0,1,1,4,2,3,3,4,4,4,4,5,6,6,5,5,5,5,6,5,4,4,4,3,3,3,3,2,3,3,3,3,3,4,3,4,5,5,5,5,5,5,7,6,6,7,7,6,7,7,7,8,7,7,8,6,7,7,6,6,5,6,5,5,4,5,6,5,6,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,8,7,7,7,6,6,5,4,4,5,5,5,5,5,5,6,5,6,6,7,6,7,6,6,7,6,8,7,7,6,6,7,7,6,6,6,6,6,5,6,6,6,6,7,6,6,6,6,6,6,7,6,6,7,6,7,6,7,6,7,6,7,8,7,8,8,8,7,8,8,9,8,8,8,7,7,8,8,8,7,8,8,8,8,9,8,8,8,8,8,8,9,8,9,9,8,9,8,9,9,8,8,9,9,8,7,6,8,8,7,7,7,7,7,7,7,7,6,7,8,8,7,7,8,7,7,7,7,9,8,9,10,11,12,13,13,13,14,14,15,16,18,20,19,21,21,22,21,21,22,22,24,22,23,25,23,25,25,26,25,25,24,27,26,25,27,25,26,26,25,25,26,26,26,25,25,25,26,26,26,23,25,26],[28,28,29,28,28,29,29,28,29,28,27,26,28,26,26,25,27,27,26,27,26,26,27,26,26,27,27,26,28,27,26,28,28,28,27,28,28,28,28,28,28,27,26,27,27,27,25,24,26,24,22,23,24,22,20,23,21,19,20,19,17,14,13,9,9,7,6,6,5,6,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,3,3,3,3,4,3,4,4,4,5,4,4,5,5,4,5,5,5,6,6,6,6,7,7,6,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,6,5,5,5,5,5,5,5,6,5,5,4,4,5,5,4,5,5,4,4,5,5,4,4,5,5,4,4,4,5,5,5,5,5,4,5,4,5,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,4,4,4,4,4,4,3,4,4,5,5,4,4,4,4,4,4,4,4,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,4,4,3,4,5,5,4,4,5,5,5,5,5,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,4,3,3,3,3,3,2,3,2,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,7,7,7,7,7,8,7,8,11,11,12,14,16,17,16,16,19,19,18,19,20,20,20,21,22,24,23,23,25,26,26,26,24,25,25,24,25,26,25,25,26,25,25,27,26,27,26,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,27,27,26,27,27,27,27,27,26,27,27,26,26,25,24,25,22,22,22,20,19,19,16,15,14,11,10,9,8,8,8,7,8,7,8,8,8,8,8,9,9,9,9,10,10,9,10,10,10,10,11,11,11,11,11,10,11,10,10,10,10,11,11,12,13,10,11,10,10,10,9,9,9,9,9,8,8,8,8,7,8,8,7,7,7,7,7,7,7,7,7,8,7,7,7,7,7,7,8,8,9,9,9,8,8,7,7,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,5,5,5,3,3,3,4,3,5,3,2,2,3,2,2,2,3,3,4,4,5,7,6,6,5,3,1,1,0,1,2,2,2,2,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,3,2,1,2,3,2,2,3,3,3,3,4,3,5,4,5,5,6,4,5,5,5,5,5,5,6,6,5,5,5,5,4,5,4,4,5,4,4,4,4,3,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,4,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,6,5,6,5,4,5,4,4,4,3,4,4,5,4,4,4,4,4,4,5,5,5,5,5,4,5,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,6,6,6,6,7,7,7,7,7,7,7,7,7,6,6,7,6,6,7,7,6,6,7,7,6,8,7,8,8,7,8,7,7,7,7,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,5,5,6,6,5,6,6,6,6,6,6,6,6,8,9,10,10,12,13,13,13,14,14,16,17,19,20,23,22,22,21,22,23,22,24,21,24,25,24,25,26,26,25,25,25,26,25,25,27,25,25,26,24,24,26,27,26,26,26,25,27,26,25,23,25,26],[28,28,28,28,28,28,28,28,28,27,27,26,27,25,26,25,27,27,26,28,27,25,28,27,25,27,28,25,27,27,25,27,28,28,26,28,27,27,27,26,28,26,26,26,27,26,24,23,25,23,20,22,23,20,19,22,21,19,20,20,17,15,12,9,9,9,7,7,6,6,7,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,2,3,2,3,3,3,3,4,4,4,4,5,4,5,6,5,5,6,6,6,7,8,7,8,8,7,6,6,6,7,7,8,7,8,7,7,7,7,6,7,7,6,6,6,6,6,5,5,6,6,5,5,4,5,5,4,4,5,5,4,5,5,5,5,6,6,5,5,5,5,5,5,6,6,5,5,6,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,6,6,5,5,5,5,5,5,5,4,5,5,4,4,4,4,6,5,5,4,5,5,4,4,5,4,4,4,3,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,4,5,6,6,5,6,6,5,6,6,7,7,8,7,7,8,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,7,6,6,6,5,5,5,4,4,5,4,4,4,4,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,3,3,3,3,4,4,5,5,6,5,6,6,6,6,6,6,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,9,9,8,8,8,8,8,7,7,7,8,7,8,8,8,8,9,8,10,12,12,11,16,15,16,15,16,17,18,17,18,19,18,20,20,21,23,22,23,24,25,25,25,24,24,25,23,23,25,24,25,24,23,24,26,26,27,26,26,27,27,26,27,27,27,27,27,27,26,28,28,27,27,27,28,28,28,27,27,27,27,27,27,27,27,27,27,26,26,26,26,24,24,23,23,21,21,20,19,18,15,14,12,10,10,8,8,8,9,8,8,8,9,9,8,9,10,10,9,10,11,10,10,11,12,11,12,13,13,12,13,11,12,11,10,11,11,12,12,12,14,14,13,14,13,12,11,11,10,10,11,11,10,9,9,9,9,8,9,8,8,8,7,8,8,8,7,8,8,7,8,8,9,8,8,9,9,10,10,10,9,9,8,8,7,7,7,7,7,6,6,6,5,5,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,3,3,4,4,5,6,6,6,5,3,2,1,1,0,1,2,2,2,2,3,3,3,4,4,4,4,5,3,3,4,4,3,3,4,3,2,2,3,2,2,3,3,3,3,3,4,3,4,4,5,4,4,5,5,5,5,6,5,6,6,6,7,7,6,6,5,5,5,5,5,4,4,4,4,4,3,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,5,5,4,5,5,5,5,5,6,5,5,6,5,6,5,6,5,6,6,6,6,6,5,5,5,4,4,4,5,5,4,5,5,5,4,5,5,5,5,5,6,5,5,5,6,6,6,6,5,6,6,5,5,6,6,5,5,5,6,5,5,5,5,5,5,6,6,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,8,8,7,7,7,7,7,8,7,7,7,8,7,7,8,7,7,7,7,7,8,8,8,8,8,8,7,9,8,8,8,8,8,7,7,6,7,7,7,7,7,7,6,6,7,6,6,6,7,6,6,7,7,7,6,7,6,7,7,8,9,10,10,12,14,13,13,15,17,18,19,20,21,22,22,23,22,22,22,23,25,23,25,25,24,27,26,26,25,26,25,28,27,26,27,27,26,27,26,27,26,26,26,27,26,27,27,27,26,25,25,26],[29,29,29,29,29,29,29,29,28,28,28,27,28,27,27,27,28,28,27,28,27,27,28,28,27,28,28,26,28,27,26,28,28,28,27,28,28,28,28,27,28,27,26,27,27,26,24,23,24,23,21,22,22,20,20,21,20,18,20,20,18,15,13,11,10,10,9,8,8,8,8,7,8,7,7,7,6,6,6,6,6,5,5,4,3,3,3,3,3,3,4,3,3,4,5,4,5,5,5,5,6,6,6,6,8,7,8,8,9,9,9,9,7,7,8,9,9,9,10,10,9,9,9,9,8,8,8,8,7,7,7,6,6,6,6,6,6,5,4,6,5,5,5,6,5,4,6,6,5,6,6,7,6,7,6,6,6,7,7,7,7,6,8,8,7,7,8,7,8,9,9,8,8,9,8,7,9,9,8,7,7,7,7,6,6,6,5,5,5,5,5,4,4,5,5,5,6,5,5,6,5,5,4,5,5,4,4,4,2,2,2,3,2,3,4,4,4,4,4,4,4,6,6,5,6,8,7,7,7,9,8,9,9,9,9,10,10,9,10,10,9,10,10,10,10,9,9,10,10,9,8,8,9,8,8,8,7,7,7,7,7,6,6,6,5,5,5,5,4,4,4,4,3,3,4,3,4,3,3,3,3,3,3,3,3,4,4,4,5,5,6,7,7,7,7,8,8,8,9,8,7,9,9,8,9,9,10,10,10,11,11,12,11,11,10,10,11,11,11,11,10,10,10,10,9,9,10,9,9,10,10,10,10,10,11,13,13,14,13,16,16,16,16,17,18,19,20,20,21,20,22,23,25,24,25,25,27,25,26,25,25,26,24,23,25,25,25,25,25,25,27,26,27,26,28,28,27,28,28,28,27,28,28,27,27,28,28,27,28,27,28,28,28,28,27,26,26,27,27,27,27,27,27,26,26,26,26,24,25,23,23,23,22,21,20,17,16,15,14,13,11,11,11,11,11,11,10,11,10,11,11,12,12,11,11,12,13,12,12,13,14,13,13,15,14,13,14,12,13,12,12,12,13,13,14,14,16,15,15,15,14,15,14,13,13,13,13,13,12,12,12,11,11,11,11,11,10,11,10,10,11,10,10,10,12,10,10,10,11,10,10,11,10,11,11,11,11,11,11,11,9,10,9,8,9,8,8,8,8,8,8,7,7,7,7,6,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,4,4,5,5,7,6,7,7,4,3,3,1,1,0,1,1,2,2,3,4,4,4,5,5,5,5,4,3,5,4,3,3,4,3,3,3,3,3,2,3,3,3,3,4,4,4,5,6,6,5,5,7,7,6,7,8,8,8,9,8,9,9,9,8,8,8,7,7,6,6,5,5,6,5,5,5,5,6,5,4,5,5,5,4,5,5,5,5,5,6,5,5,5,5,5,5,4,4,5,5,6,5,5,4,6,6,5,6,6,7,7,6,7,7,7,7,6,8,6,6,6,7,8,7,7,7,6,6,5,6,5,5,5,6,5,5,6,6,5,6,6,6,6,6,7,7,7,8,8,8,9,8,7,9,8,7,7,8,7,6,7,7,8,7,6,7,7,7,6,7,7,7,8,7,8,7,7,8,8,7,8,8,8,7,8,8,9,8,10,9,8,8,9,10,10,8,10,9,9,8,10,9,8,11,9,9,9,10,9,9,10,10,10,10,10,10,10,9,10,10,10,9,9,9,10,10,9,8,8,9,9,8,8,9,9,8,8,9,8,8,8,9,9,9,9,10,9,9,10,9,9,9,10,10,11,11,13,14,14,14,14,16,17,18,19,19,22,22,21,20,21,21,21,24,22,23,23,22,26,25,25,24,26,23,26,26,25,26,26,26,26,24,25,26,26,26,27,26,25,26,26,25,23,25,26],[29,29,29,29,29,29,29,29,29,29,28,28,28,27,28,27,28,29,26,29,28,26,28,28,26,27,28,26,27,28,26,27,28,29,27,28,27,27,28,27,29,27,27,27,28,28,25,25,26,24,22,24,24,22,22,24,22,20,22,22,21,17,16,13,13,12,12,11,10,10,10,9,9,7,7,8,7,6,6,6,6,6,5,6,5,5,3,4,3,4,5,4,4,6,6,6,6,7,7,7,7,8,8,8,9,9,10,11,10,11,11,10,9,9,9,9,10,11,11,11,11,10,10,10,10,9,9,9,8,8,9,8,7,8,8,8,8,7,7,8,8,6,7,7,6,6,7,7,6,7,6,6,7,7,7,7,7,8,8,7,7,7,8,8,8,7,8,8,7,8,9,7,7,9,9,7,8,9,9,9,7,6,7,7,7,7,7,7,7,6,7,7,6,6,6,7,8,7,6,7,6,6,5,6,6,5,4,4,3,2,4,4,3,4,5,4,6,6,5,5,5,6,6,6,6,8,6,6,7,8,8,8,9,10,9,10,11,10,11,11,9,10,10,10,9,10,10,9,9,9,10,8,9,9,8,8,8,7,8,7,7,7,7,6,6,6,6,6,5,5,6,5,4,5,6,4,6,4,4,3,4,3,4,3,6,4,5,7,5,6,6,6,7,8,7,8,8,8,9,9,9,10,11,10,11,11,11,11,13,13,12,14,14,13,13,14,14,14,14,13,14,13,12,11,11,11,12,12,12,13,12,13,14,13,14,15,15,16,16,17,18,19,20,22,21,22,23,24,24,24,26,26,26,26,27,27,28,27,28,28,26,27,26,25,27,27,27,27,27,27,28,28,29,28,29,28,28,28,28,28,28,28,28,28,28,29,29,28,29,29,29,29,29,28,28,28,28,29,28,28,28,28,29,28,27,28,27,24,26,23,24,24,22,21,22,19,20,18,17,16,16,14,13,12,14,14,12,14,13,14,13,14,14,15,15,15,15,15,15,15,17,16,17,17,17,17,16,15,15,15,15,15,15,16,16,17,17,17,17,17,17,17,16,15,15,15,15,16,15,14,14,15,15,13,14,14,12,12,11,14,15,13,12,14,14,12,14,13,13,12,13,14,13,14,14,13,13,12,13,13,12,12,10,10,10,8,10,10,8,9,10,8,8,8,8,7,7,7,7,6,6,6,5,5,6,5,5,5,6,5,6,6,6,6,6,7,8,8,8,7,5,4,3,3,2,1,0,1,2,2,3,4,4,4,5,5,6,5,4,4,5,4,4,4,5,4,4,5,4,4,5,6,5,5,5,6,5,5,7,6,6,6,7,8,8,8,8,9,9,10,10,10,12,12,11,11,10,11,9,9,8,9,7,7,8,8,7,6,7,8,7,6,7,8,8,7,7,8,9,8,7,9,8,7,7,8,7,6,6,5,6,5,5,5,5,6,6,6,6,6,7,8,8,6,8,8,6,8,8,9,7,7,8,9,8,8,9,8,9,9,7,6,8,7,7,7,8,8,8,7,7,8,8,8,8,10,9,9,10,10,12,11,12,11,10,11,11,10,10,11,10,9,10,10,12,10,9,10,10,11,10,11,11,10,10,11,10,9,10,11,11,10,11,12,11,11,12,12,11,11,12,13,12,11,13,13,14,11,13,13,12,11,13,14,11,13,13,12,12,14,14,11,12,13,13,13,14,13,12,13,12,12,12,13,12,13,14,14,12,12,10,12,13,11,12,13,13,11,11,13,11,11,11,12,12,10,13,12,11,11,14,11,11,11,12,12,13,13,14,16,16,16,16,18,19,20,22,21,24,25,23,22,24,24,24,26,24,25,26,24,27,27,27,26,27,26,27,27,27,28,27,27,27,25,26,27,27,27,28,26,27,27,28,26,24,27,26],[27,28,28,28,28,28,28,28,28,27,27,27,27,27,27,26,28,28,26,28,27,26,28,28,26,27,28,26,27,28,26,27,28,28,27,28,28,27,28,27,28,27,27,26,27,26,23,24,25,23,22,23,23,20,21,22,20,19,20,20,17,15,13,10,10,9,7,7,7,6,7,6,6,6,5,5,4,4,5,4,4,4,3,3,3,3,3,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,8,8,7,7,6,7,7,7,7,7,7,8,6,6,7,7,6,6,7,6,6,6,6,5,6,6,6,6,5,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,5,6,6,5,5,6,5,5,5,6,5,5,6,6,5,6,6,6,6,5,5,5,5,4,5,5,5,4,4,5,4,4,4,4,5,5,4,4,5,4,4,4,5,4,4,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,5,6,7,7,7,8,7,7,8,7,7,7,7,7,6,6,7,6,6,6,7,5,6,6,6,7,6,6,6,5,5,5,5,5,4,3,4,4,3,3,4,3,3,3,4,3,3,3,3,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,5,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,9,9,9,9,9,9,10,9,9,10,9,8,8,8,8,9,9,9,9,9,9,11,9,11,12,12,13,15,16,16,16,16,19,19,18,20,20,20,21,22,23,24,25,25,25,26,25,26,26,25,26,24,23,25,25,25,25,25,25,27,26,28,26,27,28,27,27,27,27,28,28,27,27,27,28,28,27,27,27,28,28,28,28,27,26,27,27,27,28,27,27,27,25,25,26,25,24,24,22,22,22,21,19,19,17,16,15,12,12,11,10,10,9,10,9,9,10,9,10,10,11,11,11,11,11,12,12,12,12,13,13,14,15,14,14,14,13,13,12,11,12,12,12,14,13,15,15,14,15,14,14,13,12,12,12,12,12,12,11,11,11,10,9,10,10,8,8,8,10,10,8,8,9,9,9,9,9,9,9,10,10,10,11,12,11,10,10,9,9,8,8,7,7,6,6,7,6,6,6,6,5,5,6,5,5,5,5,4,4,5,4,4,4,4,3,3,3,4,3,3,3,4,5,5,6,9,8,7,7,4,3,3,2,2,1,1,0,1,1,2,3,3,3,3,3,3,4,3,3,4,3,3,3,3,2,2,3,3,2,2,3,3,3,4,4,4,4,5,5,5,4,5,5,5,5,6,6,6,6,7,7,8,8,7,6,7,7,6,6,6,6,5,5,6,5,5,5,5,6,5,5,5,5,5,4,4,5,5,5,4,5,4,5,4,4,4,4,4,3,3,4,4,3,4,4,5,5,4,4,5,5,5,5,6,5,5,5,5,6,5,5,5,6,6,6,6,6,6,5,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,7,6,7,6,6,6,7,7,7,7,7,7,7,7,8,7,7,8,8,8,8,7,8,9,8,8,9,10,10,8,9,9,9,8,9,8,8,9,9,9,8,9,9,8,8,9,9,9,9,10,9,9,9,9,10,9,9,9,10,10,9,9,8,10,9,8,9,9,9,8,8,8,8,7,8,8,7,7,8,8,7,8,9,8,7,8,9,10,11,11,12,14,15,13,14,16,18,19,20,20,23,23,22,21,22,22,22,24,23,24,25,24,26,26,26,25,26,25,27,26,26,27,26,26,27,25,25,26,27,26,27,26,26,27,27,26,24,26,26],[28,28,28,28,28,28,29,28,28,27,27,26,28,26,27,26,27,28,25,28,27,25,27,27,25,25,27,25,26,27,25,26,29,28,25,28,27,25,27,25,27,25,25,24,26,26,21,22,24,22,19,21,22,19,18,22,19,17,18,18,16,14,12,9,9,8,7,7,6,5,6,5,5,4,4,4,4,4,4,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,5,6,6,6,7,7,6,6,6,6,6,7,6,7,7,6,7,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,5,4,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,6,5,6,6,6,6,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,3,3,3,3,3,3,4,3,3,4,4,4,5,5,4,4,5,5,5,5,6,6,7,7,7,6,7,6,7,6,6,6,6,6,6,6,6,6,5,5,5,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,7,6,6,7,7,7,9,8,8,8,8,9,9,8,8,8,8,8,7,7,8,8,7,7,8,8,8,8,9,10,12,12,12,14,15,15,14,15,16,16,16,18,18,18,19,20,21,22,22,24,24,26,24,25,25,24,25,23,22,24,24,23,24,24,25,26,26,27,26,27,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,28,27,27,27,27,25,27,27,27,27,26,26,26,25,24,26,25,23,23,23,22,21,21,20,18,16,15,14,12,10,10,8,9,8,8,8,8,9,9,10,9,10,10,10,10,10,12,10,11,11,13,12,11,13,13,13,13,12,12,11,11,11,12,12,13,14,13,14,13,14,13,12,13,12,11,10,11,11,10,10,10,10,10,8,9,9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,10,11,11,10,10,10,8,8,8,7,7,6,6,6,6,6,5,6,6,6,5,5,6,5,5,5,4,4,4,4,4,4,3,3,3,3,4,3,3,3,4,4,4,5,6,7,6,6,4,3,2,2,2,2,1,1,0,1,1,2,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,6,6,6,6,6,7,7,6,7,6,6,6,6,6,5,6,5,5,5,4,4,4,5,5,4,4,5,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,4,3,3,3,4,4,3,4,5,5,5,4,5,5,4,4,4,5,5,5,4,5,5,5,5,5,5,4,4,4,3,4,4,4,4,4,5,4,4,5,5,5,5,6,5,6,6,6,7,7,7,6,6,7,6,6,6,6,6,6,6,7,7,6,5,6,6,6,5,6,5,5,6,6,6,6,5,6,6,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,7,7,8,7,7,7,7,7,7,7,7,8,7,7,7,7,7,8,8,8,8,8,9,8,8,8,8,8,9,9,8,8,8,8,8,7,8,8,7,7,7,8,7,7,7,7,7,7,8,8,7,7,7,7,7,7,8,9,10,11,12,13,13,13,14,15,16,18,19,18,21,22,21,20,21,21,22,24,21,23,24,22,26,24,25,25,26,24,26,26,24,26,25,26,24,23,24,25,26,25,27,25,25,26,26,25,23,24,25],[28,28,28,28,28,28,28,28,27,27,26,26,27,26,27,26,27,27,26,28,26,26,27,27,26,27,27,26,27,27,25,27,28,28,26,28,27,27,28,27,27,26,26,26,26,25,22,22,24,20,20,20,22,19,18,21,18,18,18,16,15,13,11,9,9,8,7,7,7,6,6,6,6,6,5,5,5,5,5,5,5,4,3,3,3,3,3,3,2,4,4,3,3,4,5,4,4,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,6,6,6,7,7,7,7,7,8,7,7,7,6,7,7,7,6,7,6,6,5,6,6,6,5,4,4,5,5,4,5,5,5,4,6,5,4,5,6,6,5,6,5,5,6,6,6,6,6,6,6,6,6,5,6,6,6,7,6,6,6,6,7,6,7,7,7,7,6,6,6,6,5,6,6,5,5,6,6,5,5,6,5,6,5,5,5,5,5,4,4,4,4,4,4,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,6,5,6,6,6,6,6,7,7,7,7,7,8,7,7,7,8,8,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,5,5,6,5,5,6,4,4,5,5,4,4,5,5,5,5,3,3,3,3,3,2,3,4,4,3,4,5,5,5,6,6,6,6,7,7,6,7,6,7,7,7,7,7,8,8,8,9,9,10,10,10,10,10,11,11,10,9,10,9,9,8,8,8,9,8,8,9,9,9,9,10,11,11,12,12,13,14,14,13,14,17,16,16,18,18,17,19,20,22,23,22,25,24,26,24,26,24,24,24,23,22,24,24,23,24,24,24,26,25,27,26,27,27,27,27,27,27,27,27,26,27,27,27,27,27,27,27,28,27,27,27,26,27,26,27,26,27,27,26,27,25,24,25,25,23,24,23,20,21,19,19,18,17,15,15,12,12,10,9,9,9,10,10,9,11,10,11,11,11,13,12,12,12,13,13,13,14,14,14,14,15,16,15,14,14,14,13,13,13,14,14,15,15,16,16,16,16,15,15,15,14,13,13,13,13,13,12,12,11,11,10,10,11,9,10,8,10,10,10,10,11,10,10,10,10,10,10,11,11,11,12,12,12,11,10,10,9,9,9,9,8,8,7,7,8,6,6,7,7,6,6,7,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,4,5,6,9,8,7,6,5,4,3,3,2,2,2,1,1,0,1,1,2,3,4,5,4,4,3,3,3,4,2,2,3,2,2,2,3,2,3,3,3,3,3,4,4,4,5,5,5,5,5,5,6,6,6,7,7,7,7,8,8,9,7,8,7,7,7,7,7,7,6,5,6,6,6,5,5,6,5,5,5,5,5,4,5,5,5,5,5,5,5,4,5,5,4,4,3,3,4,4,4,4,4,4,5,5,5,5,6,5,5,6,5,5,6,5,5,5,5,5,5,5,6,5,6,6,6,5,4,5,4,4,5,5,5,4,6,5,5,5,6,6,6,6,7,6,7,7,7,8,8,8,7,8,7,6,6,7,7,6,7,6,7,6,6,6,6,6,6,6,6,6,7,7,7,6,6,6,7,6,6,7,7,6,7,8,8,8,8,8,8,8,8,9,9,8,9,8,8,7,8,8,8,8,8,7,8,9,8,7,8,8,9,9,10,10,9,9,9,9,10,9,9,9,9,10,9,9,8,9,9,9,9,9,9,8,8,9,8,8,9,9,8,8,9,9,9,8,9,8,8,8,9,9,11,11,13,13,14,14,14,16,17,19,20,19,22,21,22,21,21,21,21,23,23,23,24,22,24,25,25,25,26,24,27,26,25,26,25,25,26,25,25,26,25,26,25,26,25,26,25,25,23,24,25],[29,29,28,28,29,29,29,29,28,27,27,27,28,27,27,27,27,28,26,28,27,25,27,27,25,26,28,26,26,27,25,26,28,28,26,27,27,26,27,26,28,26,26,25,26,25,22,23,24,22,20,22,22,20,19,21,19,18,19,19,17,16,14,12,11,10,11,10,9,9,9,9,8,8,8,7,7,7,6,6,6,6,5,4,4,4,4,4,3,3,4,5,4,5,5,5,5,6,6,6,6,7,7,7,8,8,8,9,9,10,10,9,8,8,8,9,10,10,10,10,10,9,10,9,9,9,8,9,7,8,8,7,7,8,7,8,6,6,5,6,6,5,6,6,6,6,6,6,5,6,7,6,6,6,7,6,7,7,7,7,7,6,7,7,7,7,7,8,7,8,8,8,8,8,8,8,9,9,8,8,8,8,8,7,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,4,5,6,6,4,5,4,4,4,2,4,3,3,4,4,5,4,4,6,5,5,6,6,6,6,8,8,7,8,8,8,8,9,9,9,9,9,9,10,10,9,10,10,9,10,9,10,10,9,10,10,9,9,9,9,9,9,9,9,9,8,8,8,8,7,7,8,6,6,5,7,6,6,6,6,6,6,5,5,3,4,4,5,4,4,5,5,5,6,6,7,7,8,9,8,8,9,9,9,9,9,9,9,10,10,10,11,11,11,11,12,14,12,12,12,14,15,13,13,13,13,12,12,11,10,11,12,11,10,11,12,11,11,12,12,14,14,14,15,15,16,16,18,18,18,18,20,21,20,21,23,24,24,24,26,26,27,26,27,26,25,26,25,24,25,26,25,26,26,25,27,27,28,26,28,28,28,27,28,28,28,28,28,28,27,28,28,28,27,27,28,28,28,28,27,27,27,26,28,28,28,27,27,26,26,26,27,24,24,24,23,23,22,20,21,19,17,17,15,14,13,13,12,13,13,13,13,14,14,14,14,14,16,16,15,15,17,15,15,17,18,16,17,17,18,17,18,17,17,16,17,16,17,17,18,18,17,18,19,18,17,17,18,17,15,16,17,16,16,16,15,14,14,14,13,15,13,13,11,14,13,13,13,13,13,13,14,13,13,12,14,14,14,15,14,13,14,14,13,12,12,12,11,10,10,10,10,10,8,9,10,9,9,9,9,8,8,8,7,8,8,8,6,6,8,5,6,7,7,6,4,6,5,7,6,6,8,7,9,7,6,5,4,4,3,3,2,2,1,1,0,1,2,3,3,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,5,5,5,6,6,5,6,8,7,7,9,9,8,9,9,9,9,9,10,10,10,11,11,11,10,10,10,10,9,10,10,9,8,9,9,8,8,8,10,8,7,8,8,8,7,8,8,8,8,8,7,7,7,7,7,6,6,5,5,5,5,6,5,5,5,6,6,6,6,6,6,7,6,6,7,7,7,6,6,6,6,7,7,8,8,7,8,8,7,6,7,6,7,7,7,7,8,9,8,9,9,9,10,10,9,10,10,10,10,11,11,11,11,11,11,10,10,10,10,10,10,9,10,10,9,10,10,10,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,11,11,11,11,12,11,11,11,10,11,12,11,11,11,11,10,10,11,10,11,11,11,10,12,12,11,11,11,12,12,13,13,13,13,12,13,12,12,12,12,12,12,12,12,12,11,12,11,11,12,12,12,11,11,12,11,12,12,12,12,11,13,12,11,11,13,11,11,11,12,12,14,14,15,16,17,16,17,18,20,20,22,21,23,23,23,23,24,22,23,24,24,24,26,24,26,26,27,26,27,26,27,26,27,28,27,27,28,27,27,27,28,28,28,28,27,28,27,27,25,26,27],[27,28,27,27,27,27,27,27,27,26,26,25,26,25,26,25,25,27,24,26,26,24,26,26,24,25,26,25,25,26,24,25,27,28,25,26,26,25,27,26,26,25,25,24,25,23,21,21,22,20,19,20,20,18,18,19,18,17,18,18,16,15,13,12,11,11,11,10,10,10,10,10,10,10,9,9,9,9,8,8,8,7,7,6,6,5,5,5,4,4,5,5,4,5,5,5,5,6,6,6,7,7,6,7,8,7,8,8,9,9,9,9,9,9,10,10,10,10,10,11,10,10,10,9,9,9,9,8,8,8,8,7,7,8,7,7,6,5,5,6,6,5,6,6,6,5,6,7,6,6,8,8,8,8,7,7,7,8,8,9,8,8,9,9,8,10,8,10,9,9,9,9,10,9,9,9,10,10,9,9,8,8,8,7,8,8,7,6,6,7,6,5,6,6,6,6,5,5,6,6,5,5,6,6,4,6,5,4,3,3,2,4,3,3,4,5,4,5,6,6,6,7,8,8,8,10,10,9,9,10,10,10,9,10,10,11,10,10,10,10,10,11,10,10,11,11,10,11,10,10,10,11,10,10,9,9,10,10,9,9,9,9,10,9,8,8,9,7,7,7,8,6,6,7,7,6,6,5,6,4,5,4,6,5,5,6,7,6,7,9,10,9,10,11,10,10,11,10,10,11,11,11,11,11,12,12,13,13,12,13,14,16,14,14,14,15,17,14,15,14,14,14,13,13,12,12,13,13,12,12,12,12,12,13,13,12,13,14,14,14,14,14,16,16,16,18,19,18,19,21,22,22,24,24,24,26,26,25,26,25,24,26,24,23,24,25,25,25,25,24,27,27,28,26,27,28,28,27,28,28,28,28,28,28,27,27,28,27,27,27,28,27,27,28,27,27,26,27,27,27,27,26,26,26,25,26,26,22,24,23,22,23,20,21,20,19,17,18,16,15,14,14,13,14,14,15,14,14,15,16,16,16,16,16,15,17,18,17,16,18,19,17,17,18,18,17,18,18,18,17,18,18,18,18,19,19,19,19,19,18,17,17,18,16,16,17,17,16,17,17,15,15,15,15,15,16,15,14,14,15,14,15,15,15,15,15,16,15,15,14,15,15,15,15,15,15,14,15,15,13,13,12,13,11,12,12,12,11,9,11,11,11,9,10,10,9,9,9,9,8,9,8,7,8,8,7,6,8,7,6,5,7,6,6,7,6,8,7,8,7,6,5,5,5,4,3,3,3,3,1,1,0,1,1,3,4,3,4,4,3,3,4,3,3,4,4,4,4,4,6,5,5,6,6,8,8,7,9,10,9,10,10,11,10,11,11,10,11,12,11,11,12,11,13,12,12,13,12,11,11,12,10,10,10,10,9,9,8,10,10,8,9,10,9,8,9,9,8,8,8,8,8,7,8,8,7,6,6,6,6,6,6,7,6,7,7,7,7,6,7,8,7,7,6,6,5,5,5,5,6,6,6,6,7,7,8,8,9,8,8,7,9,8,8,9,10,9,10,10,9,11,11,10,13,11,10,11,12,11,12,12,11,11,11,12,13,11,10,11,10,10,10,10,11,10,9,10,11,10,10,11,10,9,10,10,11,11,11,10,11,11,12,11,11,11,11,11,11,12,11,12,12,12,10,11,13,11,11,12,12,10,10,11,11,11,13,12,11,13,14,11,12,12,13,13,14,14,14,14,13,14,13,13,13,12,13,12,13,12,12,10,12,12,12,12,12,13,12,12,13,13,12,12,13,13,12,13,14,12,11,14,13,12,12,13,11,14,14,16,16,18,17,18,19,19,20,21,21,23,23,23,23,24,22,22,25,24,24,26,24,25,24,27,25,26,25,27,27,26,28,26,26,26,27,26,27,27,26,27,27,26,27,27,25,24,25,26],[29,29,28,29,29,29,29,29,29,28,28,27,28,27,27,27,27,28,26,28,27,26,28,27,26,26,27,26,27,26,25,27,27,27,26,27,26,26,27,25,27,24,25,23,25,24,21,22,23,20,19,21,20,19,17,20,19,17,17,17,16,14,12,11,10,10,9,9,9,9,9,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,5,6,6,6,6,7,6,6,7,8,7,7,8,8,8,8,9,9,8,8,8,8,9,8,9,9,10,9,9,9,8,9,9,9,9,8,8,8,8,7,7,7,7,7,6,6,6,6,6,6,6,7,6,6,7,7,7,7,7,7,8,7,7,7,7,7,7,7,7,7,7,8,7,7,8,8,7,8,8,8,8,9,9,8,9,9,8,9,8,8,8,7,7,7,7,7,7,7,6,6,6,7,6,6,6,5,5,6,6,6,5,6,4,4,4,4,4,4,3,4,5,5,5,6,6,5,7,6,6,7,8,7,8,8,8,7,8,8,8,8,9,10,9,9,9,9,9,9,9,9,9,10,9,9,9,10,9,9,9,9,9,10,9,10,10,9,9,9,9,9,8,7,8,8,8,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,5,6,5,6,6,7,7,8,7,8,8,8,9,9,9,9,10,10,9,10,10,10,10,10,10,10,10,11,11,13,12,13,12,13,13,13,12,12,11,11,10,10,10,11,11,10,10,10,11,11,11,11,12,12,14,13,15,14,14,14,15,16,15,17,17,16,18,20,21,21,23,22,24,24,26,24,25,24,24,24,23,23,25,24,24,25,24,24,26,27,27,26,27,28,27,27,28,28,28,27,27,26,27,28,28,27,27,27,27,27,28,26,27,27,27,26,27,27,27,25,27,26,25,27,26,23,25,22,23,22,21,20,19,18,17,17,15,13,11,12,11,11,11,12,11,11,14,13,12,14,14,14,14,15,16,15,15,14,18,16,17,17,16,16,18,17,17,15,15,16,17,16,19,18,16,18,18,18,17,17,18,16,14,14,15,14,14,15,13,14,13,12,15,13,11,11,10,11,12,12,11,12,12,12,12,13,15,13,14,14,15,15,15,13,14,13,13,12,12,12,11,11,11,10,9,11,9,10,11,9,9,10,10,9,8,8,8,8,8,7,7,7,8,8,6,7,7,7,6,5,6,7,7,6,8,7,8,7,6,5,4,5,4,4,5,4,3,2,2,1,0,1,2,3,3,4,3,2,4,3,2,4,3,4,3,4,4,4,5,5,6,7,7,7,6,7,7,7,8,9,8,8,9,9,9,10,10,10,10,10,10,11,11,11,11,10,10,9,9,10,9,9,9,10,9,9,9,8,9,8,9,9,8,7,7,7,7,7,7,6,7,7,7,6,6,5,5,4,4,5,5,5,5,6,6,6,6,7,7,7,6,5,6,5,5,6,6,5,5,6,5,5,7,7,7,7,7,7,6,6,7,7,7,7,7,8,7,8,9,8,9,9,10,9,9,10,10,10,9,10,10,10,11,10,11,12,10,10,10,11,10,9,9,9,8,9,9,9,8,9,8,8,8,9,9,8,9,9,10,10,10,10,10,10,10,9,10,11,10,10,11,10,10,11,10,10,11,10,9,10,10,10,10,10,10,10,10,12,10,10,10,12,11,12,12,12,11,11,11,11,12,10,10,11,12,12,11,12,12,12,11,11,12,11,10,10,12,11,11,12,11,11,11,11,11,12,10,10,13,11,12,11,12,12,14,14,15,16,17,17,18,20,20,21,23,22,26,24,25,25,25,24,25,25,25,26,28,26,27,27,29,27,27,26,29,28,27,28,28,27,28,28,28,28,28,28,28,28,27,28,28,28,27,27,27],[29,29,28,29,29,29,29,29,29,28,28,27,28,27,28,27,28,28,27,28,27,26,28,27,26,27,28,26,27,28,25,27,28,28,26,28,27,26,27,26,27,26,26,25,26,24,23,23,25,22,21,22,23,20,21,22,20,19,21,20,17,15,14,12,11,11,10,10,10,10,10,9,9,8,9,10,9,9,8,7,8,8,6,6,6,7,5,5,4,5,6,5,5,6,8,7,7,8,9,8,8,9,8,8,9,10,9,9,9,10,10,9,9,9,9,9,10,10,10,11,10,9,10,10,9,9,9,9,8,8,9,8,7,8,8,8,8,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,10,8,7,9,9,8,9,9,9,9,9,9,9,10,9,9,9,8,9,9,10,9,9,9,9,10,9,10,9,8,8,8,8,8,8,7,7,7,7,7,6,7,7,7,7,7,6,7,6,5,6,6,5,6,5,4,3,4,4,4,4,5,5,5,5,6,7,6,7,7,7,9,9,8,9,9,9,8,9,9,9,10,11,10,9,10,11,10,9,10,11,10,10,11,11,10,10,10,10,9,9,10,10,9,9,10,10,9,9,9,8,8,7,8,8,8,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,6,6,8,7,8,8,9,9,8,9,9,9,9,10,10,9,10,10,10,11,12,11,10,11,13,12,14,14,14,14,14,15,14,13,13,13,13,12,12,11,12,12,11,12,12,12,12,12,12,13,13,12,13,15,16,16,15,16,19,18,18,21,20,20,22,23,24,25,24,27,26,27,25,27,26,25,27,23,23,27,25,25,26,25,26,28,26,28,28,28,29,29,28,28,28,28,28,28,28,28,29,29,29,29,28,29,29,28,28,27,28,27,29,28,29,28,28,28,26,25,26,27,24,24,23,23,22,22,21,19,18,17,18,15,15,14,12,12,11,13,13,12,14,13,16,14,15,16,16,16,16,18,16,16,17,18,17,17,18,20,18,18,18,18,17,17,17,18,18,19,20,20,20,20,19,19,17,18,18,16,17,18,17,16,16,16,15,13,14,14,15,13,13,12,15,15,14,15,15,15,14,15,15,15,14,15,16,15,16,16,16,15,15,14,13,14,13,12,11,12,10,11,12,9,10,11,9,9,10,10,8,9,8,7,7,7,7,7,7,7,6,6,6,7,6,6,6,7,6,7,8,11,10,9,8,7,5,5,6,4,4,4,4,3,2,3,1,1,0,1,2,5,4,3,2,4,4,2,5,5,6,4,5,6,5,7,8,8,8,6,7,7,7,8,8,8,8,9,9,9,9,9,10,10,11,11,10,13,12,12,11,10,11,11,10,10,9,9,8,9,9,8,8,8,9,8,7,8,8,7,7,8,7,8,7,8,8,8,7,8,7,7,6,8,7,7,9,8,8,7,7,8,8,7,7,8,8,7,7,8,7,7,8,6,7,7,6,7,8,7,7,8,8,8,8,8,7,7,8,8,9,8,8,9,8,8,8,8,9,9,9,10,10,10,10,11,11,11,12,10,12,11,9,10,10,10,8,10,9,9,10,9,9,9,9,9,9,9,9,10,11,10,9,9,10,10,9,10,10,10,10,11,10,12,11,12,11,11,11,10,12,11,11,10,11,11,10,11,11,12,11,11,11,12,13,11,10,11,11,12,12,13,13,12,12,12,12,13,13,12,13,13,14,12,11,10,12,13,12,12,13,13,10,12,14,12,11,12,13,12,12,13,13,11,12,12,12,12,12,13,13,15,15,17,17,19,18,19,20,22,22,23,22,25,23,25,24,25,24,23,25,25,25,27,25,26,27,27,26,27,25,28,27,27,28,27,27,27,27,27,27,28,27,28,28,27,27,28,27,26,27,26],[28,28,27,27,28,28,28,28,28,27,27,26,28,27,27,26,27,27,25,27,26,24,26,27,25,25,27,25,25,26,24,25,27,27,25,27,26,25,26,25,26,25,25,24,24,23,21,22,23,20,20,21,21,19,18,20,18,18,18,18,16,15,13,12,12,11,12,12,10,12,10,11,10,9,10,11,9,9,9,9,8,8,7,7,7,6,5,5,4,5,5,6,5,6,7,7,7,8,9,8,9,9,9,9,10,10,10,10,10,11,10,10,10,11,11,10,11,12,12,12,12,11,12,12,11,10,11,10,10,9,10,9,9,9,9,10,9,9,8,8,8,8,8,9,8,8,8,9,8,8,9,8,9,9,8,8,9,9,9,9,9,8,9,9,9,10,9,10,10,10,10,11,12,11,10,10,10,11,10,11,10,10,10,9,9,9,9,8,9,9,8,7,9,8,8,8,8,7,8,8,7,6,7,7,6,6,5,5,4,4,4,6,5,6,7,7,6,7,8,9,7,9,9,9,10,10,9,11,10,10,10,11,11,10,11,11,12,11,11,11,11,12,12,12,12,12,12,11,11,12,11,10,11,11,11,10,10,10,11,10,10,10,10,10,9,10,10,9,9,9,9,8,8,8,8,8,7,7,7,5,7,5,7,6,7,8,9,8,9,9,11,11,10,10,10,10,11,12,12,13,12,11,12,13,13,13,15,15,14,14,16,17,15,16,18,16,18,16,15,16,14,14,13,13,13,12,14,13,12,12,13,13,12,13,13,14,13,14,14,14,14,15,16,16,16,16,18,18,18,21,21,21,23,22,23,24,25,25,25,24,24,24,25,23,24,24,25,24,24,25,26,26,27,26,26,27,27,27,27,27,26,26,26,26,27,27,27,26,27,27,27,27,27,26,26,26,25,27,26,27,26,25,27,25,23,25,26,22,23,23,20,22,20,20,20,19,18,17,16,15,14,15,14,16,14,15,17,17,20,17,17,17,18,18,18,18,20,17,17,19,21,18,19,21,21,20,20,19,20,18,19,19,19,18,20,21,21,21,21,20,19,19,19,19,17,18,20,18,18,18,17,16,17,16,19,18,17,17,15,17,16,17,17,16,17,17,17,15,18,16,16,16,16,17,16,17,16,16,16,14,16,14,15,14,12,12,13,13,11,12,13,12,11,12,11,11,11,11,10,10,10,10,8,8,9,8,8,8,8,8,7,8,8,9,7,8,10,9,10,9,8,8,7,6,5,5,4,4,4,3,3,2,2,1,0,1,2,4,2,3,4,4,4,5,4,5,5,7,6,8,8,8,7,8,9,10,8,9,10,10,10,11,11,11,12,12,12,12,12,13,14,13,15,16,15,13,14,12,12,13,12,12,12,11,11,11,9,11,11,11,10,10,11,11,9,11,10,10,10,9,9,9,9,9,10,9,9,7,8,7,7,8,8,7,7,7,8,8,7,7,8,9,8,7,7,7,6,4,5,5,6,6,6,7,8,8,9,10,9,10,8,10,8,9,10,11,10,11,11,11,11,12,11,12,13,12,13,12,13,14,14,13,14,12,14,13,12,12,13,12,12,13,12,12,11,12,12,12,11,12,11,11,11,12,11,11,11,11,12,12,12,13,14,13,13,14,13,13,13,13,13,13,13,13,13,15,12,12,14,13,12,13,12,11,13,13,13,12,13,15,12,13,13,15,15,17,15,15,15,14,15,13,15,14,14,13,13,14,13,14,11,14,13,14,13,14,15,12,13,14,15,14,14,15,14,14,16,16,14,14,16,15,15,14,15,13,16,17,18,18,19,20,20,20,22,22,23,22,25,24,25,24,25,24,24,26,26,25,27,26,25,25,27,26,26,26,27,27,27,28,27,27,27,27,27,27,27,27,28,28,27,27,27,26,25,26,26],[27,28,27,28,28,28,28,27,28,27,26,26,26,26,26,26,26,26,25,26,25,24,26,25,24,26,26,25,26,26,24,26,27,27,26,26,25,26,26,26,26,25,25,24,25,24,21,22,23,20,21,21,20,19,19,19,17,17,17,17,15,13,11,10,8,8,8,7,7,7,7,7,7,7,7,7,7,6,6,5,6,6,5,4,5,5,5,3,4,4,4,4,5,5,6,5,6,6,6,6,7,7,7,7,8,8,7,8,8,9,8,8,8,8,8,8,8,8,9,9,9,9,8,8,8,8,8,8,7,7,7,7,7,7,7,8,7,7,6,6,6,6,6,6,6,6,6,6,6,7,7,6,7,6,6,6,7,7,7,7,7,6,7,7,6,7,7,6,8,7,7,8,8,7,7,7,8,9,8,8,7,8,8,7,7,7,7,7,7,7,7,6,7,6,6,7,6,6,7,6,6,7,6,6,5,6,5,5,5,5,4,5,5,5,5,6,6,5,6,6,7,6,6,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,9,8,8,8,9,8,9,9,9,9,9,9,8,8,9,9,9,9,9,8,8,8,8,8,7,7,7,7,7,7,7,6,6,6,7,7,6,6,6,6,5,5,6,6,5,5,5,6,6,6,6,7,7,6,7,7,7,8,8,8,8,7,8,8,8,9,9,9,10,10,10,10,12,11,12,13,12,12,13,12,12,12,12,11,10,10,9,9,10,9,8,9,9,9,9,10,10,10,11,12,13,13,13,14,15,16,15,16,17,16,17,19,19,19,21,21,22,23,24,24,25,23,22,24,24,22,24,24,24,25,24,23,26,25,26,25,26,27,27,27,27,26,26,26,26,26,27,27,27,27,28,27,28,26,27,27,25,26,26,27,27,27,27,26,26,24,24,24,25,22,22,22,20,20,19,19,17,16,15,15,14,13,12,11,10,11,11,11,11,12,12,13,12,12,14,15,14,14,16,14,14,15,16,15,16,18,18,16,17,15,17,16,16,17,16,16,17,17,18,17,16,17,16,14,15,15,15,13,15,15,14,13,14,13,12,13,13,13,12,11,11,12,12,12,12,13,12,13,13,13,13,13,13,14,14,14,15,15,14,14,13,11,12,11,11,10,9,9,10,10,8,9,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,6,5,5,5,5,6,6,6,8,8,8,8,7,6,6,5,5,5,5,4,4,4,3,2,3,2,1,0,1,1,1,1,2,2,3,3,3,4,4,4,4,5,4,5,5,5,5,5,5,6,6,6,6,6,6,7,8,7,8,8,9,9,9,9,11,11,10,10,10,10,9,9,9,8,8,7,7,8,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,4,4,4,4,3,5,4,5,6,6,6,5,5,5,5,5,6,5,5,4,4,4,4,4,4,4,4,5,6,6,6,7,6,6,5,6,5,5,6,7,6,6,6,6,6,6,7,8,7,8,8,8,8,9,9,9,9,8,8,9,8,8,8,8,8,7,7,8,8,7,6,7,7,7,6,7,7,6,7,7,7,7,6,7,8,8,8,8,8,8,8,9,9,9,9,10,9,8,9,9,9,8,9,9,8,9,9,8,8,9,9,8,10,10,9,8,10,10,10,11,11,11,11,11,10,9,11,10,11,11,10,11,10,9,9,9,11,10,9,10,10,8,9,11,10,10,10,11,11,10,11,12,10,10,11,11,11,11,12,12,14,15,17,16,17,16,17,18,19,21,21,19,23,21,22,22,22,22,22,25,24,24,24,24,25,24,24,23,24,23,24,26,25,25,23,25,24,25,24,26,26,25,26,26,24,24,25,24,23,23,25],[28,28,27,28,28,28,28,27,27,27,26,26,27,26,27,26,27,27,26,27,26,25,27,26,25,26,26,24,25,26,23,26,27,26,25,26,25,25,26,25,25,23,24,23,23,22,21,21,22,20,19,20,20,19,19,20,18,18,18,17,15,13,10,9,7,7,6,6,6,5,6,5,5,5,5,5,5,5,5,4,5,4,4,3,4,4,4,3,4,4,4,5,5,4,5,6,5,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,7,7,7,7,8,8,9,9,9,7,8,9,7,8,8,8,7,8,8,7,7,8,8,8,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,6,6,6,6,6,6,6,5,5,6,6,5,6,6,6,6,7,7,7,7,7,7,7,8,8,7,7,7,7,7,6,6,7,7,6,7,7,6,6,7,7,7,7,6,6,6,6,5,6,6,5,5,5,4,5,5,4,4,5,5,5,5,4,5,5,5,5,6,6,5,5,6,6,5,6,6,6,6,7,7,7,8,8,8,9,8,8,7,9,8,7,8,8,8,7,8,8,7,7,8,8,8,8,8,8,7,7,7,6,6,6,6,6,6,6,5,6,6,6,5,6,6,6,6,5,5,5,4,5,4,4,5,5,4,5,6,5,5,6,6,6,6,7,7,6,6,6,7,7,7,7,8,8,7,8,9,9,10,10,11,11,11,12,11,10,9,9,8,8,8,7,8,8,7,7,8,8,7,8,9,9,10,11,11,13,14,13,13,14,15,14,16,18,17,17,20,21,19,23,22,22,24,25,24,26,24,23,25,24,22,24,24,24,25,24,25,27,25,26,27,26,27,28,27,27,27,27,27,27,27,27,27,28,27,27,26,27,27,27,27,26,26,25,27,26,27,27,26,26,26,24,25,24,22,22,22,21,20,19,18,17,16,14,14,12,11,10,10,9,10,10,10,10,11,10,12,11,11,12,13,12,14,14,13,13,13,16,14,15,16,17,17,15,16,16,15,14,16,14,16,17,16,17,18,16,17,14,15,15,14,13,12,14,13,12,12,12,12,11,11,11,12,10,9,9,10,10,10,10,11,10,10,10,12,12,11,12,13,13,13,14,14,13,13,12,12,11,11,10,9,8,8,8,8,7,7,9,8,7,7,8,8,7,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,5,5,6,9,7,7,6,6,5,5,4,4,4,4,3,3,3,4,3,3,2,1,1,0,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,8,8,9,8,9,8,8,7,8,7,7,7,7,6,6,7,7,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,4,3,3,4,4,4,5,5,5,5,5,5,4,4,4,3,3,4,4,4,3,4,5,5,5,5,5,4,4,4,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,7,7,8,7,6,7,7,7,7,7,6,7,6,6,6,6,5,6,6,5,6,6,6,6,5,6,6,6,6,6,7,7,7,7,7,7,7,8,8,7,8,9,10,8,7,8,8,7,8,7,7,7,8,7,7,9,7,7,7,8,8,9,10,10,8,9,9,8,10,9,9,9,10,10,9,9,8,10,9,9,9,10,9,7,8,10,8,8,10,10,8,9,10,10,9,10,11,10,10,9,11,11,12,14,15,16,17,17,19,19,20,21,22,22,23,22,23,23,23,22,24,25,25,26,25,24,26,26,26,25,26,25,27,26,26,27,26,26,25,26,28,26,26,27,27,27,26,26,27,25,24,24,26],[28,28,27,28,28,28,29,27,28,27,26,26,27,27,27,26,27,26,26,27,26,25,27,26,25,26,26,25,26,26,25,26,27,27,26,27,26,25,26,26,27,25,25,24,25,24,22,22,24,21,21,22,21,19,20,21,18,17,19,18,15,13,11,9,8,7,6,6,6,5,6,5,5,5,5,4,5,4,4,4,4,4,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,6,7,7,7,7,7,6,6,6,6,6,6,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,5,6,7,7,6,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,7,6,6,5,5,6,6,5,5,6,6,5,5,5,5,5,6,6,6,6,5,5,6,6,5,5,5,5,5,4,4,4,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,5,6,7,7,7,6,7,7,7,6,7,7,7,6,7,7,6,6,7,6,6,6,7,7,7,7,7,7,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,4,3,3,4,4,4,4,5,5,4,5,5,6,5,6,6,6,5,6,6,6,7,7,7,7,8,8,9,8,9,9,10,10,10,10,10,9,9,9,8,8,8,7,8,8,8,7,8,8,8,9,9,9,10,10,11,13,14,14,13,15,15,14,15,18,17,17,19,21,20,21,22,23,23,25,22,25,24,24,25,24,22,24,25,24,25,25,25,27,25,27,27,27,28,27,27,27,27,28,28,27,27,27,27,27,27,28,27,28,28,28,27,26,27,27,27,27,27,28,27,27,26,25,25,25,24,23,23,22,21,20,19,18,16,15,14,12,10,10,9,9,9,9,9,9,10,10,11,11,10,11,12,12,13,14,12,12,14,15,13,15,16,16,14,15,15,15,14,13,15,14,15,16,17,16,16,16,16,15,14,14,13,13,12,13,13,13,11,11,11,10,11,10,10,8,8,9,9,9,9,9,10,10,10,10,12,11,11,12,13,12,13,13,13,12,12,11,10,10,9,8,8,7,7,7,7,6,7,7,7,6,7,7,6,6,6,5,5,5,5,5,4,5,4,4,5,5,4,3,4,4,5,5,6,7,7,7,7,6,5,4,4,3,3,3,3,3,2,3,3,3,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,7,7,7,7,7,7,7,6,5,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,2,2,3,3,2,3,3,4,4,3,4,4,4,4,4,4,3,3,3,3,4,4,3,4,4,5,5,5,5,5,4,4,4,3,4,5,5,4,5,5,5,6,6,5,6,6,6,6,7,7,7,7,7,8,7,7,7,8,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,5,6,6,6,7,7,7,7,7,7,8,7,8,8,8,8,7,8,8,8,8,8,7,7,8,7,7,8,8,7,8,8,8,7,8,8,8,8,9,10,8,9,9,8,9,9,8,9,9,9,8,8,8,8,8,8,8,8,8,7,8,9,9,8,8,9,9,8,9,9,8,9,10,9,9,9,10,10,12,13,16,16,16,15,18,19,19,21,22,23,24,23,24,24,24,23,25,25,25,25,25,25,27,26,26,25,26,25,27,26,26,28,26,27,26,26,26,26,26,26,27,27,26,26,27,25,26,25,25],[29,29,29,29,29,29,29,29,28,28,28,27,28,27,28,27,28,28,27,28,27,26,27,27,26,27,27,26,27,27,25,27,28,28,27,27,26,26,27,26,27,26,26,25,25,24,22,23,23,21,21,21,20,19,18,20,18,18,19,17,15,13,10,8,7,7,6,5,6,5,5,5,5,5,4,5,4,4,4,3,4,3,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,5,6,7,6,7,7,6,6,5,6,6,6,6,6,7,7,6,6,6,6,6,7,6,6,6,6,6,6,5,6,6,6,6,5,4,5,5,4,5,5,4,4,5,5,5,5,5,5,5,4,5,4,4,5,4,5,4,5,5,5,5,4,5,5,5,5,5,5,5,5,6,5,6,6,6,6,5,5,6,6,5,5,5,5,5,5,6,4,5,5,5,5,5,5,4,5,5,5,5,4,4,4,4,3,3,3,3,4,3,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,7,6,6,7,7,6,6,7,6,6,6,6,6,6,6,6,5,6,6,6,6,7,7,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,6,7,7,7,7,8,8,8,9,9,9,9,10,10,9,9,8,8,8,8,8,7,7,7,7,6,7,8,7,8,8,9,9,10,11,12,13,14,13,15,15,15,16,18,17,17,20,21,21,23,22,24,24,26,24,26,24,23,25,24,23,24,25,24,24,25,24,27,26,27,27,27,28,28,28,27,27,28,28,28,28,28,28,28,27,28,27,28,27,27,28,27,27,27,27,27,28,27,26,27,26,24,25,26,23,24,22,21,22,21,19,19,15,15,14,11,10,9,8,8,9,9,8,8,10,9,11,10,10,11,12,11,12,14,13,12,14,14,14,14,15,16,15,15,15,15,14,14,14,14,15,15,16,16,16,16,15,14,14,14,13,13,12,13,12,11,12,11,11,9,9,9,10,8,8,8,9,9,8,9,10,10,9,9,11,9,9,11,12,11,12,12,12,11,10,9,9,8,8,7,7,6,7,6,7,6,6,6,6,5,6,6,5,5,5,5,5,5,4,4,4,4,3,3,4,4,3,3,3,4,4,4,4,7,6,7,6,5,4,3,3,3,3,3,3,3,2,3,2,3,3,3,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,7,7,7,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,3,3,2,2,2,3,3,2,3,3,3,4,3,4,4,4,3,3,3,3,3,3,3,3,3,4,3,4,5,4,4,4,5,4,4,4,3,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,7,6,7,6,6,7,7,6,6,6,6,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,6,6,6,6,7,7,6,7,7,7,7,7,8,8,7,7,7,7,7,8,6,6,7,7,7,7,8,7,7,7,7,7,8,9,9,8,8,9,8,9,8,8,8,9,9,8,7,7,9,8,8,7,8,8,7,7,8,8,7,8,8,8,7,8,8,7,8,9,8,7,8,9,10,11,12,14,14,16,15,17,18,20,21,22,21,23,23,25,23,24,23,23,25,25,24,27,25,26,26,28,26,27,26,27,28,27,28,27,27,27,26,28,27,27,27,28,28,27,27,27,27,26,25,27],[29,29,28,28,28,29,29,28,28,27,27,27,28,27,27,27,28,27,26,28,27,25,28,27,25,27,27,25,26,26,24,27,27,28,26,27,27,26,27,25,27,25,25,25,25,25,22,22,24,22,21,22,22,21,19,21,19,18,17,17,14,12,10,8,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,5,5,5,5,5,6,5,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,6,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,5,5,5,4,5,5,4,4,5,4,5,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,6,6,6,6,6,6,5,6,6,5,5,6,6,5,5,6,5,5,5,6,6,5,6,6,6,5,5,5,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,3,3,4,4,3,4,5,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,8,8,7,7,7,7,6,5,6,6,5,5,6,6,6,6,7,8,9,8,9,11,12,12,13,13,14,14,14,15,16,16,18,19,19,21,21,23,23,25,22,25,22,21,25,22,21,23,24,24,24,23,25,25,26,26,25,27,27,27,27,27,27,27,27,26,26,26,27,27,27,27,27,27,27,27,26,27,26,27,27,26,27,27,26,27,24,24,24,24,22,23,20,21,20,20,18,16,14,13,12,10,9,8,7,7,7,7,7,7,7,7,8,8,8,9,9,8,9,10,9,9,11,11,10,11,13,13,12,13,11,12,11,10,11,10,11,11,12,13,13,12,11,11,10,11,10,10,8,10,10,9,8,9,9,7,8,7,7,7,6,7,7,7,6,6,8,7,7,7,8,7,7,9,9,9,10,10,10,9,9,8,8,7,7,6,6,6,5,6,6,5,6,6,6,5,5,6,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,3,3,4,4,4,6,6,6,7,4,4,3,3,2,3,3,3,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,5,6,6,5,5,5,4,4,4,5,5,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,4,3,3,3,4,4,4,4,3,3,3,3,3,3,3,4,3,4,5,5,4,4,4,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,5,6,6,6,6,6,6,6,5,6,5,5,6,6,5,6,7,6,5,6,7,6,7,7,7,7,7,7,6,7,7,7,7,8,7,7,7,6,7,7,6,6,7,6,6,6,7,7,6,6,7,6,6,7,7,6,7,7,7,7,7,8,8,10,10,11,13,14,12,14,15,18,18,19,18,22,21,21,22,21,21,22,24,24,24,24,21,26,25,25,24,25,24,26,25,25,26,24,25,24,25,25,25,26,27,26,25,26,24,25,26,24,24,26],[28,28,27,28,28,28,28,27,28,27,27,27,27,27,27,27,27,27,28,28,27,26,27,27,26,27,27,25,26,26,24,27,27,27,26,27,26,25,26,25,27,26,25,24,25,24,20,23,23,20,19,22,21,19,20,21,18,18,18,17,14,12,10,8,6,6,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,4,5,5,5,5,5,6,5,5,5,6,5,5,5,5,4,5,5,5,4,5,5,6,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,3,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,5,5,5,5,5,5,4,5,4,4,4,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,4,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,6,5,5,5,6,5,4,5,5,5,4,5,5,4,5,6,6,5,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,3,3,3,3,3,4,3,3,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,7,6,6,6,6,5,5,6,5,5,6,5,6,6,6,7,8,9,10,12,12,12,12,13,14,13,14,16,16,16,17,20,19,21,21,22,23,25,23,25,24,22,25,23,22,24,24,22,24,23,24,26,23,26,26,26,27,26,26,27,26,26,26,26,26,26,27,27,27,27,27,28,26,27,26,26,26,26,26,26,26,27,26,27,25,23,23,23,21,21,20,19,19,18,17,16,14,13,12,10,9,7,7,6,6,7,7,6,7,7,8,7,8,8,8,8,9,10,9,9,10,12,10,12,12,12,11,12,11,12,10,10,11,10,11,12,12,12,13,11,11,11,10,10,9,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,7,7,6,6,7,7,7,7,8,7,8,8,9,9,10,10,9,9,9,8,8,7,7,6,6,5,5,6,5,4,5,6,5,5,5,5,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,2,3,3,4,4,5,7,6,6,6,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,5,5,5,6,5,5,5,4,4,4,5,4,4,4,4,4,4,3,4,4,3,3,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,6,6,5,6,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,3,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,6,5,5,6,5,5,6,6,6,6,7,7,7,6,6,6,7,6,7,7,7,7,7,6,6,7,7,7,6,6,6,6,6,7,6,6,7,6,6,6,7,7,6,7,7,6,7,6,8,8,10,10,12,13,13,13,15,16,18,19,20,21,22,21,21,21,22,20,23,24,24,25,25,23,25,25,26,25,25,24,27,26,25,26,26,25,25,25,26,26,26,25,26,27,25,25,26,24,24,24,24],[28,28,28,28,28,28,29,28,28,27,26,27,27,26,26,27,26,26,26,27,26,26,26,26,25,27,26,26,28,26,25,27,27,28,27,27,26,27,27,27,27,26,26,25,26,25,23,22,24,21,22,21,22,20,19,20,18,17,18,17,14,12,10,7,6,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,5,5,4,4,3,4,4,3,3,4,3,3,4,3,3,3,4,3,3,3,4,3,3,4,4,3,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,5,4,4,4,4,4,4,3,4,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,2,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,6,6,6,6,7,8,9,9,11,13,13,13,14,14,14,14,16,16,16,17,20,19,20,21,23,23,24,23,24,22,21,24,21,21,23,23,23,22,22,23,26,24,27,25,26,27,27,26,27,27,27,27,27,27,27,28,28,27,27,26,28,27,27,27,26,26,26,26,26,27,26,26,26,25,25,25,24,23,22,21,22,19,19,17,17,15,13,12,9,8,7,6,6,6,6,6,6,6,6,7,7,7,8,8,8,9,10,9,9,10,11,10,10,12,12,11,12,11,11,11,10,10,10,10,11,12,12,12,12,11,10,10,10,9,9,8,9,9,8,8,8,7,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,7,7,7,7,8,8,9,9,9,8,7,7,6,6,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,4,4,4,6,6,6,5,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,4,4,4,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,6,5,5,5,6,5,5,5,5,5,6,6,6,6,6,7,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,5,5,6,6,5,6,5,5,5,6,6,5,5,6,5,5,6,7,7,9,10,11,13,13,12,14,15,16,19,19,19,22,21,23,22,23,21,22,24,23,24,24,24,26,26,26,25,25,25,26,26,26,28,26,26,26,25,26,26,25,25,26,25,25,26,27,25,23,25,26],[29,29,29,29,29,29,29,28,29,27,27,27,28,27,28,26,28,28,26,28,27,25,28,27,25,27,28,26,27,28,25,27,28,28,26,27,27,26,27,26,27,26,26,25,26,25,23,22,24,22,22,22,22,21,20,21,20,19,17,18,15,12,9,7,6,5,4,5,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,5,5,5,5,5,5,4,4,5,4,4,5,4,4,4,4,4,4,4,5,5,4,4,3,4,4,3,3,4,3,3,3,4,3,3,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,5,5,5,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,4,4,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,6,6,6,7,8,9,9,12,12,13,13,13,14,15,15,16,17,18,19,20,20,22,22,23,23,25,23,25,24,23,26,22,22,25,25,23,24,24,25,27,25,27,26,27,28,27,27,27,27,27,27,27,27,27,27,28,27,28,27,28,28,28,27,27,27,26,26,27,27,27,26,26,25,25,25,24,23,23,22,21,20,19,19,18,14,13,11,9,8,7,6,6,6,6,6,6,6,6,7,6,6,7,8,7,8,9,8,9,10,10,10,10,12,12,12,11,10,11,10,9,10,9,10,11,12,11,12,12,11,11,9,10,10,9,8,9,9,8,7,7,7,6,6,6,6,6,5,5,6,6,5,5,6,6,6,6,7,6,6,7,8,8,9,9,8,8,7,6,6,5,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,4,6,6,6,6,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,4,4,4,3,3,3,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,6,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,6,6,6,6,6,6,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,8,9,9,10,12,13,11,13,14,16,17,19,19,22,21,21,21,22,22,22,24,22,23,24,23,27,26,26,24,26,25,26,26,25,27,25,26,27,25,25,26,27,26,26,26,26,26,27,25,23,24,25],[28,28,28,28,28,29,28,28,28,27,27,26,27,27,27,26,26,27,25,27,26,25,27,27,25,27,27,25,26,26,24,27,27,27,26,27,25,26,26,26,26,25,25,25,25,25,22,22,22,21,20,21,21,20,18,20,19,18,16,16,15,12,9,7,6,5,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,5,4,4,5,5,5,5,6,6,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,5,4,4,4,4,4,3,3,4,3,3,4,4,3,3,4,3,3,4,4,3,3,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,4,4,4,5,5,5,5,5,5,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,4,4,4,4,4,5,4,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,4,5,5,4,4,5,5,5,5,6,6,7,9,9,10,11,12,11,13,14,13,14,15,16,16,17,20,19,21,21,22,23,25,23,25,23,23,24,23,21,24,24,23,24,23,24,25,24,26,25,27,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,26,27,27,26,25,26,26,25,26,26,25,26,24,24,24,23,22,22,19,20,19,17,17,15,13,12,11,10,8,7,6,5,5,6,6,6,6,6,7,7,7,7,7,7,8,9,8,8,9,9,9,9,10,10,11,10,9,10,9,9,9,9,9,9,10,11,11,10,11,10,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,6,5,5,6,6,6,6,7,6,6,7,7,8,8,8,8,8,7,7,6,6,6,5,5,5,4,4,5,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,4,6,6,6,5,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,2,1,1,1,1,1,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,2,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,4,4,4,3,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,4,4,5,5,4,5,5,5,4,4,5,5,6,6,6,6,6,5,5,6,6,6,6,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,7,8,9,11,11,12,11,12,15,15,17,19,18,22,21,20,20,21,21,22,24,22,24,24,21,26,24,25,24,25,24,26,25,24,26,25,25,24,24,24,26,26,25,26,26,25,25,25,25,23,25,25],[28,28,27,28,28,29,28,27,28,27,26,27,27,26,26,27,27,27,27,27,26,25,27,26,25,27,26,26,27,26,24,27,27,28,27,27,27,27,27,27,28,25,25,25,26,26,22,23,24,21,21,22,22,19,19,20,18,18,17,17,15,13,10,7,6,5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,5,5,6,6,8,9,10,11,13,12,13,14,15,14,15,16,18,18,17,20,20,20,21,23,22,24,24,25,23,23,24,22,21,24,23,23,23,23,23,26,23,26,25,26,26,26,26,26,27,27,27,27,27,26,27,27,26,27,26,27,26,27,27,26,27,26,26,26,26,26,26,27,25,24,24,24,22,21,21,19,19,18,17,16,14,12,11,9,7,7,5,5,5,6,5,5,6,6,6,6,6,7,7,7,7,8,7,8,8,9,9,9,10,10,10,10,9,10,9,8,8,8,8,9,10,10,11,10,10,9,8,8,8,7,7,8,7,6,6,7,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,8,8,8,7,7,6,5,5,5,4,4,4,4,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,4,6,6,6,6,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,4,4,3,3,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,4,4,4,4,5,5,5,5,6,5,5,5,5,6,5,5,6,5,6,5,5,6,5,5,5,5,5,4,5,5,5,4,5,5,4,5,5,5,5,5,5,5,5,5,6,7,8,9,10,11,11,11,12,14,15,17,19,18,21,21,21,20,21,19,23,23,22,24,23,24,26,25,26,24,25,24,26,25,25,27,25,24,26,24,25,24,26,26,25,26,25,26,25,25,23,24,25],[29,29,29,29,29,29,29,28,29,28,28,28,28,27,27,27,27,28,26,28,27,26,28,27,26,28,27,26,28,27,26,28,28,28,27,28,27,27,28,27,28,26,26,26,26,25,23,23,24,22,22,22,21,20,20,20,18,18,17,17,15,12,10,7,6,5,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,3,3,2,3,3,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,2,3,3,3,3,4,4,4,5,4,5,5,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,5,5,5,4,4,5,5,4,4,5,5,5,5,6,7,9,9,9,12,14,13,13,14,15,15,15,18,17,18,18,21,20,22,21,23,24,25,24,26,24,22,24,23,22,24,24,24,24,23,23,27,25,27,27,27,27,27,27,27,26,27,27,27,27,27,27,27,27,28,27,28,27,27,27,27,27,27,27,26,27,27,26,27,26,25,25,25,23,23,22,21,20,18,17,16,14,12,10,9,7,6,5,6,5,5,5,5,6,6,6,6,6,7,7,7,7,8,7,8,8,9,9,9,10,10,10,10,9,9,9,8,8,8,9,9,10,10,10,10,9,9,8,8,8,7,7,7,7,7,6,6,6,6,6,5,5,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,7,7,8,7,7,7,6,5,5,5,5,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,6,6,6,5,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,4,5,5,5,6,6,5,5,5,5,5,5,5,6,6,6,5,5,5,6,5,5,5,5,4,4,5,4,4,5,5,4,4,5,5,4,5,5,5,4,5,6,7,8,9,10,11,11,11,12,14,15,17,19,19,22,22,21,20,21,21,20,23,22,22,24,22,25,25,25,25,26,25,26,25,26,27,25,25,26,24,25,26,26,26,26,25,25,25,25,24,23,25,25],[29,28,28,28,28,28,28,27,28,27,26,26,26,25,26,26,26,26,25,26,25,24,26,26,24,25,26,24,26,25,24,26,27,26,26,26,26,26,26,25,26,24,25,24,25,25,22,22,24,22,20,21,22,21,19,20,20,18,16,17,14,12,9,6,6,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,4,5,4,4,4,3,4,4,3,4,4,4,4,4,5,6,8,8,8,11,12,12,12,12,13,13,14,15,16,16,17,18,18,21,21,21,23,24,23,24,22,22,23,22,21,22,23,23,23,23,23,25,23,25,25,25,25,26,26,26,26,26,26,26,25,26,26,26,26,26,26,26,25,26,26,25,26,25,25,25,26,25,25,25,23,23,23,23,23,21,20,20,18,18,17,15,14,11,10,8,7,6,5,5,4,5,5,4,5,5,5,5,5,6,6,6,6,7,6,6,7,7,8,8,8,8,8,8,8,8,7,7,7,7,7,8,8,9,9,8,8,8,7,7,7,7,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,7,7,7,6,6,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,3,3,4,6,5,6,5,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,2,3,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,4,5,5,4,5,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,5,6,7,7,9,10,10,9,11,12,13,14,16,16,19,18,19,18,18,19,18,21,19,21,21,20,23,22,24,22,24,22,24,23,23,24,22,23,23,22,23,24,24,24,24,24,24,24,24,24,21,22,25],[28,28,28,28,28,29,28,27,28,26,27,27,27,27,26,26,26,27,25,27,26,24,26,26,23,26,26,24,26,25,24,26,27,27,25,27,25,26,27,26,26,25,24,25,25,25,21,22,23,21,19,21,22,18,18,20,18,17,17,17,15,12,9,7,5,5,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,4,4,4,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,3,3,3,4,3,3,4,4,4,4,5,5,6,8,8,10,12,12,12,12,14,13,15,16,17,17,16,19,18,20,19,21,22,23,23,23,22,22,23,23,20,22,23,23,23,22,22,24,24,26,24,25,24,25,25,25,24,24,24,24,25,26,25,25,25,26,26,27,26,26,25,25,24,26,26,24,25,24,23,26,24,23,23,22,21,20,19,19,18,17,16,14,13,11,9,8,6,5,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,7,7,7,7,7,8,8,8,9,8,7,8,7,7,6,6,6,6,6,6,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,7,7,7,6,6,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,3,3,4,5,5,6,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,2,3,3,4,4,3,3,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,3,3,4,4,3,3,4,4,4,5,5,5,4,4,4,5,5,4,4,5,5,4,4,4,5,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,5,6,7,8,9,10,10,10,11,12,13,15,18,17,20,18,19,18,19,18,19,21,19,21,22,20,24,23,24,23,25,24,26,23,24,25,23,23,23,22,23,23,24,23,24,23,23,24,23,23,21,23,24],[28,28,27,28,27,29,28,27,28,27,27,27,26,26,27,26,27,26,26,26,26,25,26,26,24,26,26,25,27,26,24,26,26,27,27,27,26,27,27,26,27,26,25,25,25,25,23,22,24,21,21,21,22,19,19,20,19,17,17,18,14,12,10,7,6,5,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,2,3,2,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,4,4,4,5,6,8,8,9,11,13,14,12,14,15,15,15,17,17,17,17,19,19,20,20,21,22,24,22,23,22,21,23,20,21,23,22,22,23,22,23,25,22,25,25,25,25,26,26,26,25,26,26,25,26,26,26,26,26,26,26,27,26,26,26,25,25,25,26,25,26,25,25,26,24,25,23,24,23,22,20,20,19,18,16,15,13,11,9,8,6,5,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,8,8,8,7,7,7,7,7,6,7,7,7,8,8,7,7,7,7,7,6,6,6,6,6,6,5,5,5,4,4,4,4,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,5,4,4,4,3,3,3,2,3,3,3,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,3,3,4,6,6,6,5,4,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,4,4,3,3,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,2,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,5,6,6,7,8,10,10,9,11,12,13,15,17,17,20,20,19,17,19,19,20,22,20,22,22,23,25,24,24,23,25,24,25,24,24,26,23,24,25,24,22,25,25,24,24,24,23,25,24,24,21,24,23],[28,28,28,28,28,28,28,27,28,27,27,27,26,26,26,25,26,27,25,26,26,25,26,26,24,26,26,25,27,26,24,26,27,27,27,27,27,27,27,27,27,26,26,26,26,25,24,23,24,22,22,22,21,20,19,20,18,17,16,16,13,11,8,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,2,3,2,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,4,3,3,4,4,4,4,5,6,7,8,8,11,11,12,11,13,14,13,14,16,16,17,19,20,19,22,21,21,23,24,22,23,22,21,22,21,22,22,22,23,24,22,21,25,23,26,25,25,25,25,26,26,25,25,25,25,25,26,25,25,25,26,26,26,25,25,25,25,25,25,25,24,25,24,24,25,24,23,23,24,22,21,20,19,19,17,15,15,13,11,9,7,6,5,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,8,7,7,7,6,6,6,7,7,8,8,8,8,7,7,6,6,7,6,6,6,6,5,5,5,5,4,4,4,4,3,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,5,5,4,4,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,2,2,2,3,5,5,5,5,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,4,3,3,3,3,3,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,5,5,7,7,8,10,10,9,11,12,13,14,16,16,20,19,18,17,18,19,19,22,19,21,21,21,24,23,23,24,25,24,26,24,25,25,23,24,24,22,22,25,26,24,24,24,23,24,24,24,20,23,25],[28,27,28,28,28,28,28,27,27,27,26,26,26,25,26,24,26,26,24,26,25,23,26,25,23,26,26,24,26,26,23,26,27,26,25,27,26,26,27,26,26,25,25,25,25,25,23,22,24,22,20,21,22,20,17,20,19,16,17,16,13,11,9,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,4,3,4,5,6,7,8,9,11,11,11,12,13,13,13,15,15,16,16,17,18,20,20,21,22,22,22,23,21,21,22,22,22,22,22,23,22,22,22,23,24,26,24,24,24,24,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,25,25,25,24,25,25,24,25,24,23,24,23,23,22,22,21,20,18,20,17,17,15,13,13,11,9,7,6,5,4,4,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,6,6,6,6,6,6,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,6,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,3,3,5,5,6,5,3,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,8,9,9,9,10,11,12,14,15,16,18,17,18,16,18,16,17,20,19,21,20,20,23,23,22,22,23,22,23,23,22,23,21,22,21,21,20,22,22,22,22,23,24,23,24,22,20,22,23],[28,27,28,28,27,29,28,27,28,27,26,28,27,26,26,25,25,27,25,26,27,25,27,26,25,27,27,25,27,26,25,27,27,27,27,27,27,27,27,27,27,27,26,26,26,26,23,24,25,23,21,22,23,20,18,20,20,16,17,17,14,13,9,7,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,8,8,10,12,13,13,14,16,15,15,17,17,17,17,19,19,20,20,21,22,24,24,24,21,21,22,21,22,23,22,23,22,22,21,25,24,26,24,25,25,25,25,26,26,25,25,25,26,26,26,26,25,26,26,26,25,26,26,25,26,26,26,25,25,24,25,26,25,25,23,24,22,21,19,20,19,17,16,15,13,11,9,7,6,5,4,3,3,4,4,3,4,3,4,4,4,5,5,5,5,6,5,6,6,6,6,6,6,7,7,7,7,7,6,6,6,6,6,6,7,7,7,7,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,6,6,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,2,2,2,3,3,5,5,6,4,3,2,2,2,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,4,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,7,7,8,9,9,9,10,12,12,14,15,17,18,18,18,16,17,18,18,21,19,22,20,22,24,23,22,22,23,23,24,22,23,24,22,22,23,22,22,23,24,23,23,23,23,23,23,23,20,23,23],[28,28,28,28,28,29,27,27,28,27,26,27,26,26,26,26,26,27,26,26,27,26,26,26,26,26,26,26,27,26,26,27,26,28,27,27,26,27,27,27,27,27,26,26,26,25,23,23,23,22,22,21,21,19,18,20,18,17,17,17,14,12,9,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,1,1,2,2,1,2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,5,6,7,9,9,11,13,13,12,14,15,15,15,17,17,16,17,19,20,20,20,21,21,23,23,24,21,21,22,21,21,23,22,23,22,22,22,25,23,26,25,25,25,26,26,26,25,25,25,25,25,26,26,26,26,26,26,27,25,26,26,25,25,25,26,25,25,24,24,25,24,24,23,24,24,22,21,21,19,17,17,15,14,11,9,7,5,4,4,4,3,4,3,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,7,6,7,6,7,7,7,6,6,6,5,6,7,6,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,5,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,3,6,5,7,4,3,2,2,1,1,2,2,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,4,5,6,6,8,9,9,9,10,11,12,14,16,17,19,20,19,17,18,19,19,22,19,22,21,22,24,24,22,22,24,24,24,23,23,24,22,23,25,22,21,24,25,24,24,24,23,24,24,23,21,24,25],[28,28,28,28,28,28,28,27,28,27,27,26,26,25,26,24,26,27,25,26,26,25,26,26,25,26,27,26,27,26,25,27,27,28,27,28,27,27,27,27,28,27,27,26,26,25,23,23,24,22,22,21,22,20,19,20,18,17,17,16,13,11,8,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,2,2,1,1,2,1,1,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,5,7,7,8,11,12,12,11,13,14,13,14,16,17,16,18,18,20,22,19,21,22,22,24,23,22,22,22,21,22,22,22,22,22,22,21,24,23,25,24,24,24,24,25,26,25,25,24,25,25,25,26,25,25,26,25,27,25,26,25,26,25,25,26,24,25,24,24,24,24,23,23,24,22,21,20,20,18,17,16,15,14,12,9,7,6,5,4,3,3,4,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,6,6,6,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,5,5,6,4,3,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,3,3,3,3,2,3,3,4,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,3,4,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,3,3,3,4,5,6,6,7,9,9,9,10,12,13,14,17,17,19,19,18,17,19,18,18,20,19,20,22,20,23,23,23,23,23,23,24,23,23,25,24,23,24,22,22,24,24,23,24,24,23,24,24,23,21,24,24],[28,27,27,27,27,28,27,27,27,26,26,26,26,24,25,23,25,26,24,25,25,23,26,25,24,26,26,25,27,26,25,26,26,27,26,27,26,26,26,26,26,26,26,25,25,24,23,23,23,22,21,21,21,19,17,18,17,16,16,15,13,11,8,6,5,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,4,5,6,7,8,9,11,12,11,13,14,14,13,14,16,16,16,17,17,19,19,20,20,21,22,22,20,21,23,21,20,21,21,23,21,22,21,24,23,25,24,24,24,24,25,25,24,25,24,24,24,24,25,25,25,25,25,26,24,25,25,25,25,24,25,24,24,24,23,24,23,22,21,21,22,20,19,19,17,16,15,13,13,10,9,7,5,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,6,6,6,6,6,6,6,7,6,6,5,5,5,5,5,6,6,7,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,5,5,5,4,3,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,4,4,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,3,2,2,3,3,3,2,3,4,5,5,6,7,9,9,9,10,11,12,14,15,16,17,17,18,16,16,18,18,20,19,21,19,21,23,23,22,22,24,22,22,21,22,23,20,21,22,20,21,22,22,22,23,22,21,23,23,23,20,22,22],[28,27,27,28,28,28,27,27,28,26,26,27,26,26,26,25,25,26,25,25,26,25,26,26,26,26,26,26,26,26,25,26,26,27,26,26,26,27,27,26,26,26,25,26,25,25,24,22,23,22,21,21,20,19,18,19,18,16,16,16,14,12,9,6,5,5,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,4,5,7,9,9,11,13,13,12,13,14,14,15,15,16,16,16,17,18,19,18,20,21,21,22,22,21,20,22,20,21,21,21,23,21,21,22,24,23,26,24,24,24,25,25,26,25,25,25,25,25,26,26,26,26,25,25,26,25,25,25,25,26,25,26,25,25,24,24,25,24,24,22,24,23,21,20,20,19,16,15,14,12,10,9,7,6,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,6,6,7,6,6,5,6,5,6,6,6,7,6,6,6,6,6,5,5,5,5,4,5,4,4,4,4,4,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,5,5,5,5,5,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,3,5,6,6,4,3,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,4,4,3,3,3,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,2,3,2,2,3,3,3,2,3,4,5,6,6,7,9,9,9,10,11,12,15,15,17,18,18,18,17,17,18,19,20,19,22,20,22,24,24,23,23,24,23,22,22,23,24,21,22,23,21,21,23,23,22,23,22,23,22,23,22,20,23,24],[28,28,28,28,28,28,27,27,28,26,27,27,26,26,26,25,26,27,26,26,27,26,26,26,26,27,27,26,27,26,26,26,27,27,27,27,27,27,27,26,27,26,26,26,26,25,23,23,23,22,22,21,21,19,18,20,18,17,18,17,14,11,9,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,5,6,8,9,9,12,14,13,12,14,14,15,15,17,17,17,18,19,19,21,20,21,23,23,22,23,22,21,22,20,21,22,21,23,22,22,21,24,23,27,24,25,24,25,25,25,25,25,25,25,25,24,25,25,25,26,25,27,26,26,26,26,25,25,26,25,25,25,25,25,24,23,23,24,23,22,20,20,19,17,16,15,13,11,9,8,6,5,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,7,6,7,6,6,6,5,6,5,5,6,6,7,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,2,2,2,3,2,2,2,3,3,2,3,3,3,3,4,4,4,5,5,5,5,4,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,5,6,6,4,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,2,3,3,2,2,2,2,2,2,3,2,2,2,3,2,2,3,4,5,5,6,7,9,9,9,10,12,12,14,15,16,18,18,17,16,17,18,18,21,19,21,21,21,24,24,23,22,24,22,23,23,24,23,22,22,24,22,22,24,24,23,24,21,23,23,24,23,21,23,25],[28,28,28,28,28,28,27,27,26,26,27,26,26,24,25,23,25,26,24,25,26,25,25,26,25,26,26,26,27,26,25,26,26,26,26,27,26,27,27,27,26,26,26,26,25,25,24,23,23,22,22,22,21,20,18,20,19,17,17,17,13,11,8,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,7,8,8,11,12,13,11,13,14,13,14,15,16,17,18,18,19,21,20,20,21,22,23,23,21,21,22,20,21,20,21,22,22,21,21,23,23,26,24,23,23,24,24,24,24,24,24,25,24,24,24,24,24,24,25,26,24,25,25,25,25,24,25,24,24,24,24,25,23,22,22,22,22,20,19,18,18,17,15,14,13,11,9,7,5,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,4,5,6,6,6,6,5,5,6,5,5,5,5,4,4,5,4,3,4,4,3,3,3,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4,4,4,5,5,4,4,4,3,3,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,3,3,6,5,6,4,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,6,7,9,9,10,10,12,13,14,16,16,18,19,17,17,18,17,19,21,18,21,21,21,23,23,21,22,23,22,23,23,23,22,22,23,22,21,22,22,23,21,22,22,21,23,24,21,20,23,23],[28,27,28,28,28,28,27,27,27,27,26,26,26,25,26,24,26,27,25,26,26,25,26,27,25,27,27,26,27,26,25,27,27,27,27,27,27,27,27,27,27,26,26,26,25,25,24,23,24,22,22,22,22,20,19,20,18,17,17,17,14,11,9,6,5,5,3,3,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,3,3,3,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,2,2,3,2,2,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,6,7,8,9,10,13,13,12,13,14,14,14,16,16,17,18,18,20,20,20,22,22,23,23,23,22,22,23,21,21,23,22,25,22,23,23,25,25,26,25,25,26,26,25,26,26,26,26,26,26,25,26,25,26,26,26,27,26,27,26,26,26,26,26,25,26,25,25,25,23,24,23,24,23,21,19,20,19,17,15,13,12,10,9,7,6,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,6,6,6,6,6,6,6,6,7,7,6,6,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,5,5,5,5,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,2,3,5,5,6,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,3,4,4,3,3,4,4,3,4,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,3,4,4,3,4,3,4,3,3,3,3,2,2,2,3,2,2,2,2,2,2,3,2,2,3,3,2,2,3,4,5,6,6,7,9,9,9,10,12,12,14,15,16,17,18,18,17,16,18,20,20,19,21,20,21,23,23,22,22,23,22,23,22,22,23,21,22,22,21,22,22,22,23,22,21,21,22,24,22,21,23,23],[28,27,28,28,28,28,28,27,28,26,26,27,26,26,26,25,26,27,26,26,26,26,26,26,26,27,27,26,28,26,26,27,27,28,27,27,27,27,27,27,27,26,26,26,26,25,24,23,24,23,22,22,22,20,18,20,19,17,17,17,14,12,9,7,6,4,3,3,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,6,7,9,10,11,13,14,12,13,14,14,15,16,17,17,18,18,19,21,21,21,21,23,22,23,22,20,21,21,20,22,22,24,21,23,22,24,24,26,24,25,26,26,26,26,26,26,26,26,27,26,26,26,26,26,26,26,26,26,26,25,26,25,26,25,26,25,25,25,24,23,23,23,23,22,20,20,20,18,15,14,12,10,8,7,6,5,4,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,6,6,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,4,4,4,4,3,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,4,4,4,3,3,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,1,2,2,3,3,3,5,5,6,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,3,3,4,4,3,4,3,4,3,3,3,4,4,3,4,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,3,3,3,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,4,6,5,7,8,9,8,9,11,12,14,15,15,18,18,17,16,16,18,18,20,19,22,20,21,23,24,23,22,23,22,23,22,22,24,21,22,24,22,22,23,22,23,22,21,21,22,24,23,19,22,23],[28,28,28,28,28,27,27,27,26,26,26,26,26,24,25,24,25,26,25,25,26,26,25,26,26,25,26,26,26,26,25,25,26,26,26,26,26,26,26,26,25,25,25,25,24,24,23,22,23,22,22,21,21,20,18,19,18,17,17,16,14,11,9,6,5,4,3,3,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,3,2,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,7,8,8,11,12,13,12,13,14,14,14,16,16,17,18,18,20,21,20,21,21,22,22,22,21,20,21,20,21,21,21,22,21,21,21,24,24,26,23,23,24,25,24,24,24,24,24,24,24,24,25,24,25,25,25,25,25,25,24,25,25,24,25,24,24,24,24,25,24,23,23,24,22,21,20,19,18,17,16,14,12,10,9,7,5,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,6,6,6,6,6,6,6,5,5,5,4,5,4,5,6,5,6,6,5,6,5,5,5,5,5,4,4,4,4,3,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,4,4,4,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,3,3,5,5,7,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,7,8,9,9,9,13,12,14,15,16,18,18,16,15,17,18,18,20,18,20,20,20,23,23,23,21,23,22,22,22,23,22,21,22,23,20,21,22,22,23,22,21,21,21,23,21,20,23,24],[29,28,28,28,28,28,27,28,27,27,27,26,27,24,25,24,26,26,25,26,27,26,26,27,26,27,27,26,27,26,25,26,27,26,26,27,26,26,27,26,26,26,25,25,25,25,23,22,23,22,21,21,21,20,18,19,18,16,16,15,13,10,8,6,5,4,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,3,3,3,3,3,3,5,7,7,8,10,11,13,11,12,13,13,13,14,15,17,17,17,19,20,20,20,21,21,22,23,21,21,22,20,20,21,20,23,21,22,22,24,25,27,24,25,25,24,25,24,25,25,25,25,25,24,25,25,25,25,25,26,25,26,25,25,25,24,25,24,24,25,24,25,23,23,23,23,22,21,18,19,18,17,15,13,12,10,8,7,5,4,3,3,2,3,3,2,3,3,3,3,3,3,4,3,3,4,4,4,5,5,5,5,5,6,6,6,5,5,5,4,4,4,5,5,5,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,3,3,2,2,2,2,1,1,1,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,3,3,5,5,6,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,3,3,3,3,4,4,3,4,3,4,3,3,3,4,4,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,7,8,9,10,10,13,13,14,16,17,18,18,17,17,18,17,19,20,19,22,20,22,24,23,23,22,23,22,23,23,21,23,22,23,22,21,21,21,20,22,22,22,21,22,23,21,21,22,22],[28,28,28,28,28,28,27,27,28,26,26,26,26,25,26,26,26,27,26,26,28,27,27,27,27,27,27,27,28,27,27,27,27,28,27,27,27,27,27,27,27,26,26,26,25,25,25,23,24,23,22,22,21,20,19,19,18,18,17,16,13,11,8,6,5,4,3,3,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,3,3,3,3,4,4,5,6,8,8,11,11,12,11,12,14,13,14,15,15,16,17,18,17,19,20,20,21,22,22,23,22,22,23,20,20,22,22,24,22,22,23,25,25,27,26,25,26,26,26,26,26,26,26,26,27,26,27,26,26,26,26,27,26,27,26,25,26,25,26,26,26,25,25,25,25,23,24,24,23,21,20,19,19,17,14,13,11,10,8,6,5,4,3,3,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,5,5,5,4,4,4,4,5,5,6,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,3,3,3,2,2,2,2,1,1,1,2,1,1,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,3,2,3,4,4,5,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,4,4,3,3,3,4,3,3,3,3,4,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,7,8,8,8,9,12,12,15,17,16,18,19,18,16,16,18,20,21,20,21,21,21,23,23,23,23,23,22,23,23,22,22,20,22,22,20,21,23,21,23,22,22,22,22,23,23,20,22,22],[27,27,28,27,27,28,27,27,28,26,26,26,26,25,26,25,25,27,26,26,27,27,26,27,27,26,26,27,27,26,26,27,27,27,26,27,26,26,27,26,27,26,25,26,25,25,25,23,23,23,22,22,21,20,19,20,19,18,17,17,14,12,8,6,5,4,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,5,5,4,4,3,3,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,4,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,3,3,2,3,3,3,2,2,2,3,2,2,2,3,2,2,3,2,2,3,3,3,4,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,6,7,9,9,11,12,14,12,13,14,14,14,16,17,18,17,19,19,20,20,21,21,23,22,23,22,21,23,21,20,22,22,23,22,22,23,25,24,26,25,25,26,26,26,26,25,25,25,25,25,26,26,26,26,26,26,26,26,26,25,26,25,25,26,25,25,25,24,26,24,24,23,24,24,22,21,20,20,18,16,14,12,10,9,7,5,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,6,6,6,6,6,5,5,5,4,4,4,5,5,5,6,6,5,5,6,5,5,4,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,3,3,3,4,4,5,4,3,2,2,2,2,2,2,2,3,3,3,4,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,4,4,4,3,3,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,7,8,8,8,9,12,12,15,16,16,18,19,17,16,16,19,18,21,18,21,20,21,23,24,23,21,22,23,23,22,22,22,20,21,23,20,21,22,22,23,22,21,22,21,23,21,20,22,22],[28,28,28,28,28,28,27,28,26,27,27,25,26,25,26,24,26,27,25,25,26,25,25,27,26,26,26,26,26,26,26,25,26,26,25,26,26,26,26,25,26,26,25,25,25,24,23,22,22,23,21,21,21,19,17,19,18,16,17,17,14,10,8,6,5,4,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,4,4,5,7,8,8,10,12,13,12,12,15,14,14,16,17,17,18,19,20,21,21,21,21,22,22,23,21,20,22,20,20,21,21,22,20,22,21,24,24,26,24,24,24,25,25,24,24,24,24,24,25,25,25,25,25,25,25,26,25,25,25,25,25,24,25,24,24,25,24,24,24,23,23,23,22,21,19,19,18,16,15,13,12,10,9,7,5,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,5,5,5,6,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,4,5,5,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,4,4,3,3,3,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,5,5,6,7,8,9,9,9,14,12,14,17,17,18,18,18,17,17,18,19,20,18,21,21,21,23,23,23,21,22,22,23,22,21,23,21,22,22,21,22,22,21,22,21,21,20,22,23,20,20,22,22],[28,28,28,28,28,27,27,27,26,26,26,26,26,24,26,24,26,27,25,25,27,26,25,27,26,26,27,27,27,26,26,26,27,26,26,26,26,26,26,26,26,26,25,25,25,25,24,22,23,22,21,21,21,19,18,19,18,17,16,16,13,10,8,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,4,4,3,3,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,2,2,3,3,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,3,3,3,3,3,4,5,7,7,7,10,12,13,11,12,13,13,13,15,15,17,17,17,18,20,20,20,21,22,22,23,22,21,22,21,19,20,21,22,21,21,22,24,25,25,25,25,26,26,26,26,25,26,26,25,26,25,26,25,25,26,25,26,25,26,26,25,25,24,26,25,25,25,24,25,24,23,23,23,22,21,20,19,17,17,15,12,11,9,8,6,5,4,3,3,2,2,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,3,4,4,4,5,5,4,5,5,5,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,3,3,3,4,5,5,3,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,7,8,8,9,9,13,12,14,16,16,18,18,18,16,16,18,18,19,19,21,19,20,23,22,22,21,22,21,23,22,20,21,20,21,21,19,21,22,20,21,21,21,19,20,22,19,20,22,20],[27,26,27,27,27,27,26,27,27,25,25,26,25,24,24,25,24,26,25,24,26,26,25,26,26,26,25,26,25,26,25,26,26,26,25,26,26,25,25,25,25,24,24,25,24,23,23,22,22,22,22,21,20,19,19,19,18,17,16,16,13,11,8,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,3,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,4,3,3,3,4,3,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,3,3,3,4,3,4,5,7,8,8,10,12,12,11,12,13,13,13,15,15,15,15,16,17,19,19,20,21,21,21,22,21,20,21,20,18,20,21,22,20,20,20,23,23,24,24,24,25,25,25,26,25,25,25,24,25,25,26,25,26,26,26,26,25,25,24,25,24,24,25,24,24,24,23,24,23,22,23,23,24,21,21,21,19,17,14,13,12,11,8,7,5,4,3,3,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,5,5,5,5,4,4,4,4,4,5,4,5,5,5,5,5,5,4,5,4,4,4,3,3,3,3,3,3,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,3,3,2,2,2,1,1,1,1,1,1,1,2,2,1,2,2,2,1,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,3,3,3,4,4,5,4,3,2,2,2,2,3,3,2,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,6,7,7,7,8,10,10,12,13,15,17,17,18,15,16,16,17,18,17,19,18,20,22,22,22,21,21,21,22,20,21,21,19,20,21,18,20,22,20,20,19,20,20,20,20,19,17,21,18],[27,27,27,27,27,27,26,26,27,26,26,26,25,24,25,25,25,26,26,25,26,26,25,26,26,26,26,26,26,26,25,26,26,26,26,26,26,26,26,26,26,26,25,25,25,24,24,23,23,23,22,22,21,20,19,20,19,17,17,17,14,12,9,6,5,4,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,4,4,3,3,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,3,2,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,4,3,3,4,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,4,4,4,5,7,8,8,11,12,13,12,13,14,14,14,17,16,17,18,18,18,20,20,20,21,22,22,22,21,19,20,20,19,21,21,23,21,21,21,24,23,27,24,24,25,26,26,26,25,25,25,25,25,25,26,25,26,25,26,25,25,25,24,24,25,24,25,24,24,24,24,24,24,23,23,24,23,21,20,20,19,17,14,13,12,9,8,6,5,4,3,3,2,3,3,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,5,4,5,5,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,3,2,3,2,3,3,3,2,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,3,4,5,5,7,7,8,8,8,11,10,12,15,15,18,18,17,15,16,17,17,19,17,19,19,19,22,22,22,21,21,21,23,22,21,22,19,19,21,19,20,21,21,21,20,20,19,21,21,19,18,21,21],[28,28,28,28,28,28,27,27,27,26,27,26,26,25,26,25,25,27,25,25,26,26,25,26,26,25,26,27,26,26,25,25,26,26,25,26,25,25,26,25,26,25,24,24,24,24,23,22,23,23,21,21,21,19,17,19,17,16,16,16,13,11,8,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,4,3,3,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,4,3,3,4,4,3,3,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,3,3,3,4,4,4,5,7,7,8,10,12,13,12,12,13,14,14,15,17,17,17,17,18,20,19,20,21,21,21,21,20,19,21,20,19,20,20,21,20,21,21,23,23,26,24,24,24,25,25,26,25,25,24,24,25,25,24,25,25,26,26,26,25,26,24,25,24,24,25,24,24,24,23,23,22,21,22,23,23,20,20,19,18,16,15,13,12,10,8,7,5,4,4,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,4,4,4,4,3,4,4,4,5,5,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,4,4,4,4,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,4,4,5,5,4,3,2,3,2,2,3,3,2,3,3,4,4,4,4,4,4,4,4,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,3,4,5,6,8,8,8,10,9,13,11,14,16,16,17,19,17,17,17,18,17,20,17,20,21,20,23,22,22,22,21,21,22,22,20,21,20,21,20,19,21,21,20,20,20,21,19,21,21,19,19,20,20],[28,27,28,28,28,28,27,27,27,26,26,25,26,25,26,25,25,27,26,26,27,26,26,27,26,26,26,26,26,26,26,26,27,27,25,26,25,26,26,25,25,24,25,26,24,24,23,22,23,23,22,22,22,20,18,19,18,17,16,16,13,11,8,6,5,4,4,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,3,3,3,3,3,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,2,3,3,4,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,4,4,4,5,7,8,8,10,12,12,11,12,15,14,14,15,16,16,16,17,19,20,19,20,20,21,21,22,21,20,22,21,20,21,21,23,21,21,22,24,24,26,25,24,25,26,26,27,26,26,26,26,27,26,27,27,27,26,27,27,26,26,26,26,24,25,26,25,26,25,24,25,24,23,24,24,22,21,20,20,19,17,15,13,12,10,8,7,5,4,3,3,2,3,3,2,3,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,3,4,4,4,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,4,4,4,4,4,3,3,2,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,3,3,3,2,3,3,3,3,3,4,4,4,4,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,5,5,5,5,4,5,5,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,3,4,5,5,6,7,7,8,8,10,11,12,14,15,18,17,17,14,17,17,15,18,15,18,18,19,21,21,20,20,21,19,22,20,20,20,19,20,20,16,18,20,19,18,19,18,18,20,21,17,17,20,17],[27,27,27,27,28,28,27,27,27,26,26,26,26,25,26,25,26,26,26,26,26,26,26,26,26,26,27,26,26,26,25,26,26,27,25,26,26,26,26,26,26,25,25,25,25,25,24,22,24,23,22,21,22,20,19,20,19,18,17,17,14,12,9,7,5,5,4,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,5,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,3,3,2,3,3,3,4,4,4,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,3,3,4,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,6,7,8,8,11,13,14,12,13,14,14,15,16,16,17,17,18,18,20,20,20,21,21,21,22,20,20,21,20,19,20,21,21,19,20,22,23,23,25,24,24,25,25,26,26,26,26,25,25,25,25,26,25,26,26,25,27,26,26,25,25,24,24,26,25,25,25,24,25,23,22,22,23,22,22,21,20,20,18,15,15,13,12,9,8,6,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,5,6,5,5,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,3,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,4,3,3,3,3,3,3,3,3,4,4,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,4,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,5,5,5,7,8,8,8,8,10,10,12,14,14,18,18,17,15,16,18,16,18,17,19,19,19,22,22,21,21,20,21,23,21,21,21,21,20,21,18,20,21,20,20,20,19,18,21,21,18,18,20,19],[28,28,28,28,28,28,27,28,27,26,26,26,26,25,26,26,26,27,26,26,27,26,26,26,26,26,26,27,26,26,25,26,26,26,25,26,25,25,26,25,26,25,24,25,25,24,24,22,23,23,22,22,22,21,20,20,19,20,18,18,15,13,10,8,6,5,4,4,4,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,6,5,6,6,5,5,5,4,5,5,5,4,5,5,4,4,4,5,4,4,5,4,4,5,4,4,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,4,5,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,4,3,3,3,4,3,4,4,5,5,5,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,4,4,4,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,5,5,6,8,9,11,12,13,14,13,14,15,15,16,18,18,18,18,20,19,21,21,22,21,23,22,22,21,20,22,21,19,21,21,22,20,21,21,24,24,26,24,24,25,26,25,25,25,26,25,25,26,25,26,26,26,26,25,26,26,26,25,25,24,24,25,25,25,25,24,25,23,23,22,24,23,21,21,20,18,18,15,14,13,10,10,7,6,5,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,4,4,4,5,5,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,3,3,4,4,6,4,4,4,3,3,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,4,4,6,6,6,5,4,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,6,5,6,5,5,6,5,5,5,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,4,4,5,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,4,5,6,7,8,9,10,11,10,13,12,15,17,18,19,20,18,17,18,20,18,20,19,21,22,20,22,23,23,22,21,23,24,22,20,23,21,21,22,20,21,21,22,21,22,21,20,21,22,19,19,22,21],[28,28,28,28,28,28,27,27,28,26,26,26,26,25,25,26,24,27,26,25,27,26,26,27,26,26,27,27,26,26,25,26,27,27,25,26,26,25,26,25,26,25,24,25,25,24,24,22,24,22,22,21,21,20,18,20,18,19,18,17,14,13,10,7,6,5,4,4,4,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,7,8,8,11,12,13,12,13,14,14,14,15,15,16,17,17,18,21,19,19,21,22,21,22,21,18,20,20,20,20,20,22,20,21,21,23,24,27,25,24,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,24,25,25,24,25,25,25,25,24,24,23,22,22,23,22,21,21,20,18,18,15,14,13,10,9,7,5,5,4,3,3,3,3,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,3,3,4,4,4,4,4,3,3,2,2,2,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,5,5,4,3,3,3,3,3,3,3,3,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,1,1,1,2,1,1,2,2,1,1,2,3,4,6,6,7,9,10,10,9,11,12,12,15,15,18,17,16,15,17,18,15,19,17,21,20,21,23,22,22,21,20,21,23,22,21,21,20,21,21,19,20,20,20,19,20,20,20,22,22,19,16,20,19],[27,27,27,27,28,27,26,27,26,25,26,25,26,24,25,25,25,26,25,25,26,25,25,26,26,26,27,27,26,26,26,26,27,27,26,27,26,26,26,26,26,25,25,25,25,25,24,22,23,22,23,21,21,20,19,19,18,18,16,17,14,13,10,7,6,5,4,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,7,7,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,5,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,4,4,5,5,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,4,4,3,3,3,2,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,6,7,8,9,11,12,13,12,13,14,13,14,16,17,16,17,18,19,21,20,21,21,22,23,23,21,19,21,19,20,20,21,23,20,22,22,24,25,27,25,26,27,27,27,27,27,27,26,27,27,27,27,27,27,26,27,27,26,27,26,26,25,25,26,25,26,26,24,26,24,23,23,24,23,21,21,21,18,18,15,14,13,10,9,7,6,5,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,5,5,4,4,4,4,5,5,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,1,2,1,1,1,2,2,2,2,2,2,2,2,2,3,3,5,5,5,5,4,3,3,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,6,5,4,4,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,5,4,4,4,4,4,5,5,5,5,5,5,6,6,5,6,6,6,6,5,5,6,5,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,4,5,6,6,8,9,9,10,9,11,12,14,16,17,19,19,17,16,19,19,17,21,17,21,20,20,23,23,20,21,21,22,24,21,21,21,22,21,20,19,19,21,21,19,22,20,19,21,22,18,18,21,19],[28,29,28,28,29,28,28,28,27,27,26,26,26,25,26,25,25,26,25,25,26,26,25,26,26,26,26,26,27,26,26,26,27,27,26,26,25,26,26,26,26,25,25,25,25,25,24,22,23,23,22,21,21,20,17,18,17,17,16,16,13,11,9,7,6,5,4,4,4,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,6,6,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,3,3,4,4,4,4,5,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,4,4,4,5,6,7,8,8,11,11,12,11,12,12,14,14,14,16,15,16,17,18,20,19,20,20,21,21,22,20,18,20,20,19,19,20,23,20,22,21,23,25,27,24,25,26,27,26,26,26,26,26,26,26,26,27,26,26,26,26,26,26,26,25,25,25,25,25,25,25,25,25,25,23,22,22,23,22,20,20,19,17,18,15,14,13,10,9,7,5,4,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,5,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,4,5,4,3,3,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,4,6,6,7,9,9,10,9,12,11,14,14,15,18,18,17,16,17,18,16,21,17,21,20,21,24,24,22,21,21,22,24,22,22,20,21,22,22,18,20,22,23,21,22,21,22,22,24,20,19,22,21],[29,28,28,28,28,28,27,28,27,27,26,26,26,25,26,25,26,26,25,26,26,25,25,27,26,26,26,26,26,26,26,26,27,27,25,26,26,26,26,25,26,25,25,26,25,24,23,23,23,23,22,22,22,22,20,20,19,19,18,17,14,12,9,7,5,5,4,4,4,3,3,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,3,4,3,3,4,4,3,3,4,4,4,4,3,4,3,4,3,3,3,3,2,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,4,4,3,4,3,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,6,7,8,8,10,12,13,12,14,14,14,14,16,16,17,18,17,20,21,20,21,21,22,22,23,21,22,23,21,21,22,21,23,22,23,22,26,25,27,24,25,26,27,26,26,26,27,26,26,27,26,27,27,27,26,26,27,27,26,26,26,25,25,26,25,26,26,25,25,24,24,24,25,22,22,20,20,19,18,16,15,14,11,9,7,6,4,4,4,3,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,3,4,3,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,5,5,4,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,5,4,3,2,3,2,3,3,3,3,3,4,4,4,4,5,5,5,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,4,5,6,6,7,9,10,10,9,13,12,15,17,18,18,19,17,17,18,18,17,21,18,22,22,21,23,23,22,21,22,22,24,22,22,21,22,22,22,19,21,22,22,20,21,21,21,21,23,20,19,22,21],[27,28,28,28,28,28,27,27,27,26,26,27,26,25,26,24,26,27,26,26,26,26,26,27,26,26,26,27,27,26,26,26,27,27,26,26,27,26,26,26,26,25,25,25,25,24,23,23,23,22,22,21,22,20,18,20,18,18,17,16,13,11,9,7,5,5,4,3,3,3,3,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,3,3,3,3,4,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,4,4,3,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,7,7,10,12,12,10,12,14,13,14,15,16,15,16,17,19,21,20,20,20,21,22,22,20,20,22,21,20,20,20,23,22,22,23,25,25,27,25,25,26,26,27,27,27,26,27,26,26,27,26,26,26,26,27,27,26,27,26,26,27,25,26,26,26,26,24,25,24,22,23,24,23,22,21,20,19,18,16,14,12,10,9,7,5,5,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,3,3,4,5,5,5,4,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,2,3,2,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,4,4,3,3,3,3,4,4,4,4,4,5,4,5,5,5,5,5,5,5,4,5,5,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,3,5,5,6,7,9,9,9,9,12,13,13,16,16,20,20,18,17,19,19,18,21,18,21,21,20,23,24,22,22,22,22,24,22,22,22,21,21,22,19,22,21,22,20,21,21,21,21,22,20,19,21,20],[28,28,28,28,28,28,28,28,27,28,26,27,27,25,27,25,26,26,26,26,26,27,26,27,27,27,28,28,28,27,27,27,28,28,27,27,27,27,27,27,27,26,26,26,26,25,24,24,23,24,22,21,21,21,18,18,18,17,16,16,13,11,9,6,5,4,4,4,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,5,5,4,4,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,4,4,5,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,3,3,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,7,8,8,11,12,12,10,12,13,14,13,15,16,16,17,18,19,21,20,21,21,23,23,23,20,20,22,21,21,21,22,23,21,23,22,25,26,27,25,26,27,27,27,27,27,28,27,28,28,27,28,28,28,27,27,28,27,27,26,26,26,25,27,26,25,26,25,25,24,23,23,24,23,21,21,20,19,19,15,14,13,10,9,7,5,4,4,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,5,5,5,5,5,4,4,4,5,4,5,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,3,3,4,5,5,5,4,3,3,2,2,2,2,2,1,1,2,2,1,1,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,3,3,3,3,3,3,3,3,4,4,5,4,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,4,5,7,7,9,9,9,11,10,12,13,15,15,17,19,19,17,17,18,19,17,20,16,20,20,19,23,23,22,20,21,22,24,22,21,22,20,21,22,19,20,21,20,20,21,20,21,22,23,19,20,22,21],[27,28,27,28,28,28,28,28,26,26,26,25,26,24,26,24,26,26,25,26,26,26,26,27,26,26,26,27,26,26,26,26,27,27,26,26,26,26,26,26,26,26,26,26,25,25,24,22,23,23,22,21,20,20,18,18,18,17,16,16,13,11,9,6,5,5,4,4,3,3,3,2,2,2,2,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,4,3,3,4,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,2,2,3,3,2,3,3,3,4,3,3,3,4,3,3,3,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,4,4,4,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,6,8,8,8,10,11,12,11,12,13,14,13,14,16,16,16,16,19,20,18,19,20,21,21,22,20,19,20,20,20,20,20,23,20,21,21,24,25,27,24,25,26,25,25,26,26,25,25,25,25,26,26,26,26,25,26,26,26,26,25,25,25,25,25,24,25,25,24,24,23,23,23,23,22,21,20,20,19,17,16,15,14,11,9,7,6,5,4,4,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,3,4,4,5,5,5,4,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,4,5,5,3,3,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,3,4,3,3,3,3,4,4,4,4,4,5,5,5,5,4,5,5,5,5,4,5,5,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,4,5,6,7,8,10,10,10,10,13,13,15,16,16,17,18,18,17,18,18,16,20,17,21,19,21,23,24,21,21,22,21,22,21,22,22,21,22,22,20,20,21,22,22,21,21,21,22,23,22,19,21,23],[28,28,28,28,28,28,27,27,27,27,27,26,26,24,26,24,25,26,26,25,26,26,25,26,26,26,27,27,27,27,25,26,27,27,26,27,26,26,27,26,26,26,26,25,25,25,23,23,24,23,23,22,22,20,19,19,18,17,17,18,14,12,9,7,6,5,4,4,4,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,3,3,4,4,4,4,5,5,5,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,3,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,4,3,3,4,4,4,4,4,4,5,7,8,8,10,12,13,12,13,14,15,14,15,17,17,18,19,21,21,21,21,21,22,22,23,21,20,21,20,22,21,21,23,21,22,22,25,25,27,25,25,26,26,25,26,25,26,27,26,27,26,27,27,26,26,26,27,26,27,26,26,26,25,26,25,26,26,25,25,24,23,24,24,23,22,21,20,20,18,16,15,14,11,10,8,6,5,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,6,6,6,6,6,5,5,5,4,4,4,4,5,5,6,6,5,5,6,5,5,4,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,4,4,5,5,4,4,3,3,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,4,4,4,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,2,2,2,2,2,4,5,6,7,8,9,10,10,10,12,14,14,16,15,18,20,17,17,18,19,19,21,19,21,22,21,24,24,22,22,23,23,24,23,23,23,24,22,23,21,23,24,22,22,23,22,22,23,24,22,21,24,23],[28,28,28,28,28,28,27,28,28,27,27,27,27,25,26,25,26,27,26,27,27,27,27,27,27,27,28,27,28,27,26,27,27,27,27,27,27,27,27,27,27,27,26,26,26,26,25,23,24,24,22,20,21,20,19,19,19,18,17,16,13,11,9,7,5,5,4,3,4,3,3,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,5,5,4,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,3,4,3,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,2,2,2,3,3,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,7,7,8,10,12,12,11,11,13,14,13,14,16,16,17,17,19,20,19,21,21,22,22,22,21,21,22,20,20,21,22,23,21,22,23,25,26,28,25,26,26,26,26,26,26,26,26,26,26,26,27,27,27,26,26,27,26,27,26,26,26,26,27,25,25,26,25,26,24,24,24,25,23,22,21,21,20,18,16,15,14,11,10,8,6,5,4,4,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,5,5,5,5,5,4,4,4,5,5,6,6,5,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,4,4,3,3,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,4,6,5,6,4,3,2,3,2,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,4,4,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,2,2,2,2,2,3,5,6,6,8,9,10,11,10,13,14,14,16,17,19,20,19,17,19,19,19,21,19,22,21,21,24,24,22,23,23,22,24,22,22,23,22,23,23,22,22,22,22,22,23,22,22,23,23,22,21,24,23],[28,28,27,28,28,27,28,27,26,27,25,25,27,22,27,22,26,25,25,27,25,26,27,27,25,26,27,26,27,26,25,27,27,27,26,26,26,26,27,26,26,26,26,25,24,24,24,23,23,23,22,20,20,20,18,18,17,17,16,15,13,11,9,7,6,5,5,4,4,4,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,5,6,7,7,6,5,5,5,6,5,5,5,5,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,5,4,4,5,4,4,4,4,4,4,5,4,4,5,5,4,4,4,5,5,5,5,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,4,4,3,4,4,4,5,5,5,6,8,8,9,10,11,12,11,12,13,14,14,15,16,16,16,16,19,21,19,20,21,22,22,22,20,20,22,20,20,21,22,23,21,22,23,25,25,27,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,26,26,26,26,25,25,26,25,25,26,24,26,25,23,23,23,23,22,21,20,19,18,16,16,14,12,10,8,7,5,4,4,3,4,4,3,3,3,3,4,3,4,4,4,4,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,5,5,5,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,4,6,5,6,4,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,4,4,4,5,4,5,5,5,6,6,6,6,5,5,5,6,6,5,5,5,5,5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,3,3,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,4,3,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,5,7,7,9,10,11,10,10,13,14,15,15,17,18,19,17,17,18,19,19,24,18,22,21,21,24,24,21,22,24,23,22,23,23,21,21,22,22,21,21,23,23,22,23,22,22,22,24,21,21,24,23],[27,27,27,27,28,26,28,27,25,26,25,23,26,22,25,22,26,25,23,26,24,24,26,26,24,25,26,24,26,25,25,26,26,27,26,26,26,26,26,26,26,25,25,25,24,24,23,22,22,21,20,20,20,18,17,17,17,16,15,15,12,10,8,6,5,5,4,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,6,5,5,4,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,4,4,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,4,3,3,3,3,4,3,3,4,4,4,4,5,5,6,6,7,8,9,11,11,10,11,12,12,13,13,15,16,16,17,18,21,19,19,21,22,21,22,22,19,20,20,20,19,21,23,20,21,21,24,24,27,25,24,24,25,26,25,25,24,25,25,25,26,25,26,25,26,26,26,25,25,25,25,25,25,25,25,25,24,24,24,23,24,23,24,22,22,19,20,19,18,16,15,13,11,9,7,6,5,4,4,3,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,5,6,5,5,4,4,4,4,4,5,5,6,6,5,5,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,5,5,4,4,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,3,3,3,4,5,6,5,4,3,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,4,4,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,4,6,7,8,9,10,10,10,9,12,13,14,14,14,17,17,15,16,16,18,17,21,17,21,20,19,24,23,21,22,23,22,21,22,21,23,21,22,21,20,20,22,22,21,22,21,22,23,23,21,20,22,24],[28,28,28,28,28,28,28,27,27,27,27,26,26,25,26,25,26,27,25,27,26,26,27,27,26,27,27,25,27,27,25,26,27,27,27,27,26,27,27,27,27,26,26,26,26,26,25,23,24,23,22,21,21,19,18,19,18,17,17,16,13,10,8,6,5,4,4,3,3,3,3,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,5,5,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,5,4,4,4,4,3,3,4,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,4,4,4,5,6,7,7,9,11,12,10,11,13,12,12,14,15,15,15,18,19,20,21,21,22,23,23,24,23,22,23,21,22,22,23,25,22,23,23,26,26,28,27,27,26,26,26,27,26,27,26,27,27,26,27,27,27,27,26,28,27,27,27,26,26,26,27,26,26,26,26,26,24,23,24,24,22,22,19,20,19,18,16,15,14,11,9,8,6,5,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,5,5,5,5,4,4,5,5,5,6,6,5,5,5,5,4,5,5,4,4,4,4,4,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,3,3,4,6,6,6,4,3,2,2,2,2,3,3,3,3,4,4,4,3,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,4,4,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,5,6,6,7,9,10,10,9,12,13,15,16,17,18,19,17,17,18,20,19,22,20,23,21,22,25,24,23,23,24,23,23,24,24,24,22,23,25,22,22,23,23,24,23,22,24,23,25,23,22,24,25],[28,28,27,28,28,27,28,27,26,26,26,25,26,23,26,23,26,24,24,26,24,24,27,25,24,27,26,25,27,26,25,27,26,27,26,26,26,26,26,26,26,25,26,25,25,25,24,23,23,22,22,20,20,20,18,18,17,17,16,15,13,11,9,6,6,5,4,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,6,6,7,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,4,5,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,5,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,3,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,4,4,3,3,4,4,4,4,4,5,7,7,7,10,11,12,11,11,13,13,12,14,15,15,15,16,18,19,19,21,20,22,22,22,22,21,22,21,21,22,22,23,21,23,23,25,25,27,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,26,27,26,26,26,25,26,26,25,25,25,25,24,23,23,23,22,21,21,19,18,18,15,14,14,11,9,7,6,5,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,5,4,5,6,6,6,6,6,6,7,6,6,6,5,5,5,5,5,6,6,7,7,6,6,6,6,6,5,5,5,4,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,5,4,4,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,3,3,3,4,7,6,6,4,4,3,3,2,3,3,3,3,3,4,4,4,4,4,5,5,5,4,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,7,6,8,10,10,10,10,12,14,15,14,17,18,19,20,15,18,20,20,22,18,23,22,21,24,24,23,23,25,22,24,23,23,23,23,22,23,21,22,23,22,22,22,22,22,23,24,21,22,23,24],[28,27,27,27,27,26,28,27,24,26,24,22,25,20,25,22,25,24,22,25,23,24,26,25,24,25,25,25,26,24,24,26,27,27,26,27,25,26,26,26,26,25,25,26,25,25,24,22,23,22,21,19,20,20,18,18,18,17,15,15,13,11,9,7,6,6,5,5,4,4,4,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,6,5,5,5,6,6,6,6,7,7,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,3,3,4,4,3,4,4,5,5,5,5,6,8,8,9,11,11,13,11,11,12,13,12,13,15,16,15,16,18,19,18,20,22,22,21,23,21,21,22,21,20,20,22,23,20,20,22,24,25,27,25,25,25,25,26,25,25,25,25,26,25,26,26,26,26,26,26,26,25,26,26,26,25,25,26,24,25,25,24,25,24,24,24,23,22,21,20,21,19,18,16,16,14,12,10,8,7,6,5,4,4,4,4,3,4,3,4,3,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,6,6,6,5,5,5,5,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,3,3,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,5,5,5,5,5,5,4,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,7,6,6,5,3,3,3,3,3,3,4,4,4,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,6,6,6,5,6,6,5,5,5,5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,4,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,3,3,4,4,4,3,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,4,4,3,4,3,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,5,6,8,8,10,11,11,11,11,13,15,16,16,17,18,19,17,16,18,18,18,23,18,23,23,19,25,23,23,24,24,23,23,24,23,22,23,24,24,21,22,23,25,22,24,23,22,25,25,22,23,24,24],[27,28,27,27,28,28,28,27,26,26,26,23,26,23,26,23,26,25,23,27,24,23,27,25,24,26,26,25,26,26,24,27,27,27,27,27,26,27,27,26,27,26,26,26,26,25,24,23,23,23,22,21,20,18,18,19,18,17,16,16,13,11,10,7,6,5,5,4,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,3,3,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,7,7,6,6,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,4,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,5,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,8,8,8,10,12,12,10,11,12,12,13,13,15,15,15,16,18,19,19,20,22,22,21,23,22,20,22,21,20,20,23,22,21,21,23,25,24,27,25,25,26,26,26,26,26,26,26,26,25,26,27,27,27,26,26,27,27,27,27,27,25,25,26,26,26,26,26,26,24,24,24,23,22,22,19,19,19,18,17,15,14,12,10,8,7,6,5,5,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,6,6,6,7,7,7,6,7,6,6,5,5,6,5,6,7,6,7,7,6,7,7,6,6,6,6,5,5,5,5,4,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,4,4,3,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,5,6,7,7,5,4,3,3,3,3,3,3,3,4,4,5,5,4,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,4,4,5,4,4,5,5,5,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,6,5,5,5,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,5,6,8,7,9,10,11,10,10,12,14,16,16,17,18,18,17,17,18,18,19,23,19,23,21,20,25,24,22,24,25,23,23,25,25,24,22,24,24,22,21,24,24,24,24,23,23,23,25,24,21,24,25],[28,28,27,27,28,27,28,27,26,26,26,23,26,22,26,23,27,25,23,26,24,22,26,25,23,26,26,24,26,26,24,26,27,28,26,27,26,27,26,26,27,25,25,26,25,24,24,21,23,22,21,20,20,20,17,18,18,17,16,15,13,11,9,6,5,5,4,4,4,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,6,6,5,6,6,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,6,7,8,10,11,12,11,10,12,11,13,14,15,14,15,16,19,19,20,21,20,23,22,22,22,21,22,21,19,21,21,22,21,20,22,23,24,26,25,25,24,25,26,25,25,25,25,26,25,26,26,26,26,26,27,26,26,27,25,25,23,25,26,25,25,24,23,25,22,22,22,22,21,20,17,19,18,17,15,14,14,11,10,8,7,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,6,6,6,5,6,6,7,6,7,7,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,6,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,3,3,3,4,6,6,6,5,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,4,5,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,2,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,5,6,8,7,9,10,10,11,10,13,13,15,18,17,18,19,18,16,18,18,19,22,20,21,23,21,24,23,24,24,24,21,24,23,23,24,23,23,24,21,22,24,25,23,24,23,24,23,25,23,23,24,26],[28,28,28,28,28,28,28,27,27,26,26,26,26,25,26,24,26,26,25,26,26,25,26,26,26,26,26,25,27,26,25,26,26,26,26,27,26,27,27,27,27,26,26,26,25,25,25,24,24,23,24,22,21,21,19,20,19,17,18,16,13,11,8,6,5,4,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,4,5,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,3,3,4,4,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,4,3,3,3,4,3,4,3,3,4,6,7,7,10,12,12,10,12,13,13,12,14,15,16,16,17,18,19,20,20,22,22,23,24,23,22,22,20,21,22,21,23,22,22,23,25,25,27,26,26,26,26,26,26,26,26,26,27,26,27,27,27,27,26,26,27,27,27,26,26,26,25,26,26,25,25,25,26,24,23,23,23,22,21,19,19,18,18,15,14,13,11,9,7,6,5,4,4,3,4,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,5,6,5,5,5,5,5,6,6,7,6,6,6,6,5,5,5,5,4,4,5,4,4,4,4,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,4,4,5,5,5,5,4,4,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,4,5,6,6,5,3,3,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,4,3,4,4,4,4,5,4,5,5,4,5,4,5,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,4,5,6,6,8,9,9,10,10,13,14,15,16,16,19,18,17,18,18,18,19,22,21,25,23,23,26,25,24,24,24,23,25,24,24,25,24,23,24,22,23,24,23,24,23,23,24,25,25,24,22,24,24],[29,28,28,28,28,28,28,27,27,27,26,26,26,25,26,25,26,26,25,27,24,25,26,26,26,27,26,26,27,26,25,26,26,27,27,27,27,27,27,27,27,27,26,27,26,26,25,24,24,23,23,22,21,21,20,19,18,17,17,16,13,12,8,6,5,4,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,4,3,3,3,4,4,5,5,7,9,11,12,11,10,12,12,11,12,14,15,15,16,19,20,20,22,23,23,24,24,24,22,22,22,20,21,23,24,23,23,23,26,26,27,26,27,26,26,27,27,27,27,27,27,27,28,28,27,28,28,28,28,27,28,27,27,26,27,27,27,26,25,25,26,24,24,24,23,23,21,20,20,19,18,16,14,14,10,10,7,6,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,6,6,6,5,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,4,4,5,5,5,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,3,3,4,5,6,6,4,4,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,4,5,6,5,8,8,9,9,10,12,13,15,17,17,20,20,20,17,19,20,19,23,21,23,23,22,25,24,25,24,24,23,25,25,24,25,24,24,24,22,22,24,24,23,23,24,22,25,25,23,22,25,25],[28,28,27,27,28,27,27,27,25,26,25,23,26,23,25,23,25,25,24,26,24,22,26,25,23,25,25,24,26,25,23,26,27,27,26,27,26,27,26,26,27,25,25,26,26,25,25,22,24,23,21,21,21,20,19,19,18,17,16,15,13,11,8,6,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,4,3,3,4,3,3,3,4,3,4,4,4,5,5,5,8,10,12,11,11,10,12,12,12,13,14,14,15,15,19,20,18,21,21,23,21,23,22,21,22,20,18,21,22,22,21,21,23,24,24,26,25,25,26,26,26,27,26,27,26,26,26,26,27,27,27,27,26,26,26,26,25,26,24,26,25,24,25,25,24,26,23,24,23,23,22,22,19,20,19,18,16,14,13,11,9,7,5,4,4,4,3,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,6,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,5,5,4,4,4,3,4,3,3,3,3,3,3,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,3,3,4,6,6,6,4,3,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,2,1,1,2,2,2,2,2,1,2,2,2,1,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,5,6,6,7,8,8,9,10,12,12,14,16,16,18,19,17,16,17,18,19,21,20,23,21,20,24,24,22,22,24,21,23,23,22,23,21,24,23,20,21,24,23,23,23,22,23,22,23,23,22,23,24],[28,28,28,27,27,28,28,27,27,26,26,25,26,25,26,24,26,25,25,26,25,24,26,25,24,26,26,24,26,26,24,27,27,27,26,27,26,27,27,26,27,26,26,26,26,25,25,23,24,22,23,22,22,21,18,20,18,17,17,17,14,11,9,6,5,4,3,3,3,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,4,3,4,4,6,7,8,9,12,12,11,12,13,12,12,13,13,13,15,15,17,19,18,20,21,23,22,23,23,23,22,22,21,21,23,24,22,22,23,26,25,27,25,26,26,26,26,26,26,27,26,27,27,27,27,27,27,27,26,28,27,27,26,27,25,26,26,26,26,25,25,25,24,23,23,23,22,22,19,19,19,18,16,15,14,11,9,7,6,5,4,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,5,5,6,5,6,5,6,5,6,5,5,5,5,6,6,6,6,6,5,5,6,6,5,5,5,4,4,5,4,4,4,4,3,3,3,3,3,3,2,2,3,3,2,3,3,2,3,3,3,3,3,4,4,5,5,5,5,5,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,2,2,3,3,3,5,6,6,5,3,2,2,2,2,3,3,3,3,3,3,4,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,2,1,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,2,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,5,6,6,8,9,8,9,10,14,14,15,18,17,20,20,19,17,19,19,20,22,20,24,22,22,25,25,24,24,25,23,24,24,24,23,23,25,25,21,22,25,24,24,24,24,25,24,26,24,22,24,26],[28,28,29,28,28,29,27,27,28,27,27,26,26,25,25,25,25,26,26,26,27,27,25,26,26,27,27,26,27,27,24,26,27,27,26,27,26,27,27,27,27,26,26,26,26,25,24,24,24,23,24,22,21,21,20,20,19,19,19,17,14,11,8,5,4,4,3,3,3,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,5,5,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,2,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,7,6,10,12,12,11,12,14,13,12,14,16,15,16,17,18,20,20,21,22,23,23,23,22,22,22,21,22,22,23,24,23,23,23,26,26,28,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,27,27,27,26,26,25,27,25,25,25,24,25,24,23,23,22,22,21,19,19,18,17,15,13,12,10,8,6,5,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,6,5,6,6,5,5,5,5,5,4,4,4,4,4,4,3,4,4,3,3,3,3,2,2,3,2,3,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,3,3,4,5,6,6,4,3,2,2,2,2,2,3,3,3,3,4,4,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,4,5,5,6,7,9,9,9,10,13,14,15,18,17,20,19,19,17,19,19,20,23,21,24,23,22,25,25,24,24,25,24,25,25,25,25,24,24,24,22,23,25,24,24,24,24,25,24,27,25,22,25,25],[28,29,29,28,28,28,28,27,27,27,26,26,27,25,26,25,26,26,25,26,25,26,26,25,25,27,26,25,27,26,25,27,27,28,26,28,26,27,27,26,27,27,26,27,26,26,25,22,24,23,22,21,22,22,18,20,20,19,18,17,14,11,8,5,4,4,3,3,3,2,3,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,4,3,4,4,3,4,4,3,3,3,3,3,3,3,4,3,3,3,5,4,5,5,7,9,12,12,10,9,11,13,11,13,14,14,15,15,18,19,20,22,22,22,23,24,24,23,24,22,20,21,23,24,21,23,25,26,27,28,27,27,27,27,27,27,27,27,27,27,27,27,28,27,28,27,27,27,28,27,27,27,25,26,26,26,26,26,25,26,23,23,24,23,22,22,19,21,18,18,16,14,13,10,8,7,6,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,4,5,4,5,6,5,5,5,4,4,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,4,6,6,6,5,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,4,4,4,4,4,4,5,5,5,5,4,5,4,4,4,4,4,4,5,4,4,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,2,3,3,2,2,2,2,2,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,5,6,6,7,9,9,9,10,13,14,16,17,17,19,19,19,17,18,19,20,23,21,23,22,22,26,25,23,24,26,23,24,25,24,24,23,25,24,22,22,25,24,24,24,23,24,23,26,23,21,23,24],[27,27,27,26,27,27,27,26,26,25,25,23,26,23,25,24,24,24,23,25,23,23,24,24,23,24,24,22,24,23,22,24,26,25,24,26,25,25,25,25,25,24,24,25,25,25,24,21,23,22,19,19,21,20,17,18,18,17,16,16,14,11,8,6,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,4,4,4,5,5,6,7,10,11,11,11,10,11,12,12,12,13,14,13,14,17,17,17,19,20,22,21,23,21,22,21,21,20,20,22,24,21,20,22,23,24,26,24,25,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,24,25,23,24,24,23,24,24,22,24,21,21,22,21,20,20,17,19,18,16,15,13,13,11,9,7,6,5,4,4,3,4,4,3,4,3,4,3,4,4,4,4,4,5,5,5,5,6,6,5,6,6,6,6,6,6,5,5,6,5,6,7,6,7,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,5,5,6,6,6,6,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,5,6,6,5,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,6,6,6,7,9,8,9,10,11,12,14,15,15,18,18,18,15,17,16,17,20,18,21,19,20,23,23,20,22,23,20,23,24,23,21,21,23,21,19,18,22,22,22,22,21,23,21,23,23,19,22,23],[27,28,28,28,28,28,28,28,28,27,27,26,27,25,26,25,26,26,25,25,25,25,25,25,24,26,26,25,26,25,23,26,26,27,26,26,25,26,26,26,26,26,25,26,26,25,23,23,23,22,22,21,20,20,18,20,18,17,17,16,15,12,9,6,5,4,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,6,5,5,5,6,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,5,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,4,4,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,4,3,4,4,5,6,8,7,11,12,12,11,12,13,13,12,14,14,13,14,17,17,17,19,20,20,23,21,23,22,22,22,21,20,22,22,24,21,22,23,26,25,27,25,25,25,26,25,26,25,25,25,26,26,26,26,26,26,26,26,27,26,27,26,25,25,26,25,25,25,24,24,25,22,22,22,21,21,20,18,19,18,16,15,14,12,10,9,7,6,5,4,4,3,4,4,3,4,4,4,4,4,4,5,4,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,6,5,6,6,6,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,4,3,3,3,4,3,4,4,4,4,4,5,5,6,6,6,6,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,5,6,6,5,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,2,2,2,2,2,1,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,4,3,3,4,4,3,3,3,4,4,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,4,4,3,4,5,6,7,7,8,9,9,10,10,12,13,15,17,17,20,20,19,18,19,18,19,22,19,23,23,23,24,26,24,23,24,24,24,25,25,24,23,25,25,22,22,25,25,25,25,23,24,24,26,25,22,24,25],[28,28,28,28,28,29,28,28,28,27,27,27,27,25,26,26,26,27,25,26,26,26,25,26,25,26,27,26,27,26,25,27,27,27,26,27,26,27,27,26,26,26,26,26,25,25,24,23,23,22,22,21,21,20,19,20,19,18,18,18,15,12,9,6,5,4,3,3,3,2,3,2,3,2,3,2,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,5,4,4,5,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,3,4,5,5,6,9,8,11,13,11,12,14,12,11,13,14,12,13,16,16,16,17,20,20,22,22,23,23,22,22,21,22,23,23,25,22,23,24,26,26,28,27,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,26,26,26,25,25,24,24,25,22,22,22,21,21,20,18,19,17,17,15,13,12,10,9,7,6,4,4,4,3,4,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,6,6,6,5,6,5,6,7,6,7,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,6,6,6,6,5,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,7,5,4,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,2,3,2,2,2,2,2,3,3,3,2,3,3,3,4,4,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,7,7,8,10,10,10,11,13,14,15,18,17,22,20,19,18,20,19,20,22,21,23,23,23,25,24,24,25,25,25,25,25,25,25,24,25,25,23,23,26,25,25,26,23,25,25,26,24,22,24,25],[29,29,28,28,28,29,28,28,28,27,26,26,27,25,27,25,26,26,24,26,25,24,26,25,23,26,26,24,27,25,23,27,27,27,26,27,26,27,26,26,26,25,25,25,24,25,23,22,21,22,20,20,21,21,19,19,19,18,17,17,16,12,10,6,6,5,4,5,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,9,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,7,6,6,6,6,7,7,7,6,6,6,6,6,6,6,5,6,6,5,6,6,5,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,4,5,4,4,5,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,4,5,5,6,6,5,5,5,4,4,4,4,4,4,3,4,4,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,3,4,4,3,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,5,5,5,6,6,8,8,10,12,12,11,13,13,12,13,14,15,14,16,18,19,19,21,21,24,22,23,21,21,22,21,19,21,22,22,21,22,22,25,25,27,25,26,25,25,26,25,25,25,25,25,25,25,26,27,26,26,26,26,26,27,25,25,24,25,25,24,25,24,23,26,22,22,24,21,20,21,19,20,17,17,15,14,13,11,10,8,7,6,5,5,4,5,5,4,4,4,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,8,7,8,7,7,7,7,7,7,7,8,7,8,9,7,7,7,7,6,7,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,5,4,4,4,5,4,5,5,5,5,5,6,6,7,7,7,7,7,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,3,3,3,4,6,6,6,6,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,5,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,1,1,1,1,1,1,0,1,2,2,2,2,2,2,2,2,3,3,3,4,4,5,4,4,5,5,5,5,6,6,6,6,6,6,6,5,5,5,6,5,5,5,5,6,5,5,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,5,5,4,4,4,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,6,7,8,8,9,10,10,10,11,13,14,15,17,18,20,19,20,18,19,19,19,22,20,21,22,21,24,24,22,24,25,24,26,26,25,25,23,25,23,21,21,24,25,23,23,22,22,24,25,23,21,24,25],[28,28,28,28,28,28,28,28,28,27,27,27,27,25,26,25,27,27,25,26,25,24,26,26,24,26,26,24,26,26,24,27,27,27,26,27,26,26,27,26,27,26,25,25,25,25,23,22,23,21,20,19,21,20,17,18,18,17,17,17,15,12,10,8,6,6,5,5,5,5,5,6,6,6,6,6,5,6,6,6,6,6,6,6,6,5,5,5,6,6,6,7,7,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,9,9,9,10,9,9,8,9,9,9,9,8,9,9,9,9,9,8,8,9,10,9,9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,8,8,8,7,8,8,8,8,7,8,7,7,7,8,8,8,8,8,8,9,8,8,8,8,8,8,8,8,8,8,8,8,8,7,8,8,8,8,7,8,8,8,9,9,8,8,8,8,8,7,8,7,7,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,7,8,8,8,8,8,8,8,8,9,8,9,9,8,8,8,8,8,8,7,7,8,8,8,8,8,8,8,8,7,7,7,7,6,7,7,7,6,6,6,5,5,6,6,6,6,6,6,6,5,5,5,5,6,5,5,6,6,6,6,7,7,7,7,7,7,7,6,6,7,7,7,8,7,8,8,8,7,8,9,8,8,8,7,8,7,8,8,7,7,7,7,7,6,6,7,6,6,7,6,7,7,7,8,9,9,10,14,12,12,12,14,14,13,14,14,14,16,16,17,18,18,19,20,22,21,23,20,21,22,21,20,22,23,23,21,21,23,25,24,27,25,25,25,26,26,26,26,26,26,26,26,26,26,26,27,25,26,26,26,26,25,25,24,25,25,23,25,23,22,24,22,21,22,20,19,20,18,19,19,17,16,15,14,13,11,10,8,7,6,6,7,7,7,7,7,7,8,7,7,8,8,9,8,10,9,9,10,10,10,10,9,10,10,10,10,10,9,9,9,10,9,10,10,10,11,10,10,10,10,10,9,9,9,9,9,9,8,8,8,7,7,8,8,7,8,7,7,8,7,8,8,8,8,8,8,8,8,8,9,9,9,9,10,9,9,9,9,9,8,8,9,7,7,7,8,7,7,7,7,7,7,6,6,6,5,5,6,5,5,5,5,4,4,4,4,3,4,4,4,3,3,4,4,7,8,9,7,5,5,5,5,5,6,5,5,5,6,6,7,6,6,7,7,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,6,6,6,5,6,6,5,5,5,4,4,4,4,4,3,3,3,3,4,3,2,2,2,1,0,1,1,2,2,3,3,3,3,4,4,4,5,5,5,6,5,6,6,6,7,7,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,5,5,4,4,3,4,4,4,4,4,4,4,3,4,4,4,4,5,4,4,4,5,4,4,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,4,3,2,3,3,2,2,3,2,3,3,4,4,4,5,4,4,4,4,4,4,4,4,5,4,4,5,5,4,4,5,6,5,4,5,5,5,4,5,4,4,5,5,5,6,5,5,6,6,6,6,7,7,7,7,5,6,5,6,6,6,5,6,6,6,5,5,6,6,5,5,6,5,5,5,6,6,5,7,6,7,7,7,8,7,7,8,8,8,8,9,10,11,11,12,13,13,12,13,14,15,17,18,18,21,20,21,19,20,20,20,22,21,22,22,22,24,24,23,24,25,23,24,25,24,24,23,25,24,22,22,25,24,23,24,23,23,24,25,23,22,24,24],[28,28,28,28,28,28,28,27,28,27,27,27,27,26,26,26,26,27,26,25,26,25,25,26,25,25,26,25,26,26,24,26,27,27,26,28,27,27,27,27,27,27,26,26,25,24,23,23,23,23,22,20,21,20,18,19,19,18,18,18,16,14,10,7,5,5,4,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,6,6,6,6,7,6,7,7,8,8,8,8,8,8,8,9,8,9,9,8,8,8,7,8,8,8,8,8,8,8,7,8,9,8,8,8,8,7,8,8,7,7,8,8,8,8,7,7,7,7,7,7,7,6,7,7,6,6,7,6,6,6,7,6,6,7,6,6,6,5,5,6,6,5,6,6,6,6,7,6,6,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,6,7,6,7,7,7,7,7,7,7,7,7,6,6,6,6,6,5,5,5,5,6,6,6,6,6,6,5,6,6,5,5,6,6,5,5,6,5,4,5,6,5,5,5,6,6,6,7,7,7,7,7,6,7,7,6,6,7,7,6,7,7,6,6,6,7,7,8,7,7,6,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,4,5,4,4,5,5,4,4,5,5,4,5,5,6,5,4,4,4,5,5,5,5,6,6,5,6,6,6,7,6,6,7,6,6,6,6,6,5,5,5,5,4,5,4,4,5,5,5,5,5,6,6,7,8,11,13,13,12,12,15,15,13,13,14,15,14,16,17,18,20,20,21,23,23,24,23,22,22,22,21,22,22,23,22,21,22,25,25,27,25,25,25,26,26,27,26,26,26,26,26,26,26,26,26,26,26,27,26,26,26,25,24,26,26,25,26,23,23,25,23,22,22,21,20,20,18,19,18,17,16,15,14,12,11,9,7,6,6,5,5,6,6,6,6,6,6,7,7,7,7,8,7,8,8,9,8,8,9,9,10,10,9,9,9,9,8,8,8,9,8,9,9,10,10,8,9,9,8,8,8,8,8,8,8,7,7,7,7,6,6,6,6,6,6,6,6,6,6,7,6,7,7,7,7,7,7,7,8,8,9,9,9,8,8,8,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,4,3,3,3,3,4,4,6,6,7,6,5,4,5,4,4,4,5,4,5,5,5,6,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,4,3,3,3,3,3,4,4,3,3,3,4,4,4,4,4,4,5,5,4,5,5,5,5,6,6,6,6,6,5,5,6,5,4,4,5,4,4,4,4,4,4,3,3,3,3,2,2,2,2,1,1,0,1,1,2,2,1,2,2,2,3,3,3,4,4,4,4,5,5,4,5,5,6,5,6,6,5,6,5,6,5,5,5,5,5,5,6,5,4,3,3,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,4,4,4,4,3,3,3,3,2,2,3,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,4,4,4,5,4,4,4,4,3,4,4,4,4,5,4,4,4,5,5,6,6,6,6,5,5,5,6,5,6,5,6,6,5,5,5,6,5,5,6,6,6,5,6,6,6,6,6,7,7,6,7,7,7,6,7,7,7,7,8,8,10,10,11,12,12,12,13,14,15,16,18,18,20,19,20,19,20,19,20,22,20,22,22,21,24,25,23,23,25,24,24,24,24,25,23,24,23,22,23,25,24,23,24,22,23,24,25,23,21,23,24],[29,29,29,29,29,29,29,29,29,28,28,29,28,28,27,28,27,28,27,27,28,26,27,27,26,27,28,27,28,27,26,28,28,28,28,28,28,28,28,28,28,27,26,27,26,25,24,22,24,23,23,21,22,22,19,20,20,19,18,18,16,14,11,8,6,5,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,8,8,8,8,6,7,6,7,7,7,7,7,8,6,6,7,7,7,6,7,7,6,6,7,6,6,7,7,7,7,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,6,5,6,6,6,5,5,4,5,5,5,4,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,5,6,6,7,7,7,6,7,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,4,4,5,5,4,5,5,6,6,6,6,6,6,6,6,6,6,5,6,6,6,5,6,6,5,6,6,6,7,7,7,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,5,4,5,5,4,4,5,5,4,4,4,4,4,5,4,4,5,6,5,6,6,6,6,7,7,6,7,6,6,6,5,5,5,5,4,4,5,4,4,5,5,4,5,5,6,7,8,9,11,12,13,11,12,15,14,12,14,15,16,16,19,20,19,21,22,23,25,24,25,24,23,24,22,23,24,24,25,24,25,25,26,26,28,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28,27,27,27,27,27,26,26,25,25,26,24,23,24,22,22,21,19,19,19,18,16,16,14,12,11,9,7,6,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,7,8,9,9,9,10,10,10,10,10,9,9,9,9,8,8,8,9,9,10,10,10,10,9,9,9,8,8,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,9,9,9,9,8,7,7,7,6,6,6,5,5,6,6,5,6,6,6,5,6,5,5,5,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,4,3,4,5,6,6,8,5,5,4,4,4,4,4,4,4,4,5,5,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,5,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,4,4,3,3,3,3,2,2,2,2,1,2,1,0,1,1,1,1,1,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,3,3,3,3,4,4,3,4,4,4,4,4,5,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,6,5,6,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,7,6,6,7,6,7,6,6,7,6,8,9,10,10,11,12,13,11,13,15,16,17,19,19,22,21,21,20,22,21,21,24,22,23,24,22,24,25,26,24,25,25,26,25,25,27,25,25,25,24,24,26,25,23,25,25,24,26,26,24,23,25,24],[28,28,28,28,28,29,28,28,28,27,27,28,27,27,26,27,27,28,27,27,27,25,27,26,25,27,27,26,27,27,25,27,27,28,27,27,27,28,27,27,27,26,26,26,25,25,24,23,23,22,23,22,21,21,19,19,19,19,17,16,14,12,9,6,6,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,4,5,5,5,5,6,6,6,6,6,7,6,7,7,7,7,7,6,6,6,6,6,7,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,5,5,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,5,5,5,6,5,5,6,6,5,5,6,5,5,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,4,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,4,5,4,4,5,5,6,6,6,6,6,6,6,5,6,6,6,5,6,6,5,5,5,5,5,6,6,6,6,6,6,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,4,4,5,5,4,4,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,7,8,7,11,12,11,9,11,14,12,11,13,13,13,15,17,17,18,19,21,21,23,23,24,22,22,23,21,21,23,22,24,22,22,23,26,25,27,26,26,26,26,26,27,27,26,26,27,27,27,27,27,27,27,27,27,27,27,25,26,24,26,26,23,25,23,22,26,22,21,23,22,21,21,19,18,18,17,16,15,13,12,10,8,7,6,5,5,4,5,5,6,6,6,6,6,6,6,7,6,7,8,7,7,8,9,8,8,9,9,8,9,8,9,8,8,8,8,8,9,9,9,9,9,9,8,8,8,7,7,7,7,7,7,6,6,6,6,5,6,5,5,5,5,5,5,6,5,5,6,6,6,6,7,6,6,7,7,8,8,8,7,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,3,4,5,6,6,6,5,4,4,3,4,4,4,4,4,4,5,5,4,4,5,5,4,4,4,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,5,5,5,5,5,5,4,4,5,4,3,3,4,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,2,2,2,3,3,3,3,3,4,4,3,4,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,3,3,4,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,5,5,5,5,5,4,4,5,5,5,5,5,5,4,5,4,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,8,9,9,10,11,11,11,12,14,15,16,17,19,21,20,20,19,20,19,20,22,22,22,23,22,24,26,25,23,25,24,25,25,24,26,25,24,24,24,24,24,24,24,24,24,24,24,26,23,23,24,25],[27,27,27,28,27,28,28,27,28,26,27,27,26,26,26,26,27,27,26,26,26,24,26,26,24,26,27,24,26,26,23,26,27,27,26,26,26,26,26,26,26,25,25,25,25,24,23,22,21,21,20,20,20,19,18,17,18,17,17,16,15,12,10,7,6,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7,6,7,7,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,5,6,6,7,6,5,5,6,5,5,5,5,5,4,5,5,4,4,5,4,4,4,5,4,4,5,4,5,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,6,6,5,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,3,4,4,4,4,5,5,6,6,5,6,6,6,5,5,6,6,5,5,6,5,5,5,5,5,5,5,5,5,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,6,7,8,9,12,11,10,10,13,12,12,13,14,14,14,16,16,17,17,19,20,21,21,23,21,22,22,20,21,21,22,23,20,22,23,24,23,26,24,24,24,25,25,25,25,25,25,25,25,25,26,26,25,25,25,26,25,26,25,25,24,25,24,23,24,23,23,25,22,21,22,21,19,19,16,17,18,16,16,13,13,11,10,8,7,5,5,4,5,5,5,5,6,5,6,6,6,7,7,6,7,7,7,7,8,8,8,8,9,9,8,9,8,9,8,8,8,8,8,8,8,9,10,8,9,8,8,8,7,7,7,7,7,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,8,8,8,8,8,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,2,3,3,4,5,6,7,5,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,5,4,3,3,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,5,5,5,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,7,8,8,9,10,11,12,11,13,13,15,16,16,17,19,18,18,18,19,18,18,21,19,21,22,21,24,23,22,22,23,23,23,23,24,25,22,23,23,22,22,22,23,22,23,22,22,24,24,23,21,23,24],[28,28,28,28,28,29,28,28,28,27,28,28,28,27,27,26,27,27,26,27,27,25,27,27,25,27,27,26,27,27,25,28,28,28,27,28,27,28,27,27,28,27,26,26,26,25,24,23,23,23,23,22,21,21,19,19,19,19,18,17,15,13,10,7,6,5,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,5,5,5,4,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,4,4,3,3,3,4,4,4,4,4,4,3,3,3,4,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,4,4,5,4,4,4,3,4,4,3,3,4,3,4,4,5,5,7,8,8,10,13,13,12,12,14,14,13,14,15,15,14,17,18,19,19,21,22,24,23,25,22,22,24,23,22,23,24,25,23,24,24,26,26,27,26,26,26,27,26,27,27,27,27,27,27,27,27,27,26,26,27,27,27,27,27,26,26,26,26,25,26,25,25,26,23,22,22,23,21,21,19,20,19,18,17,15,14,12,10,8,6,5,4,4,4,4,4,4,5,4,5,5,5,5,6,6,6,7,7,7,7,7,8,7,8,8,8,8,8,8,7,7,7,7,7,8,8,8,8,8,7,7,7,7,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,7,7,7,7,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,4,5,6,7,5,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,0,1,1,1,1,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,4,5,6,7,9,9,10,11,11,10,12,13,14,16,18,17,20,20,19,18,20,20,19,23,20,22,23,21,24,24,25,24,25,24,26,25,25,26,24,25,25,23,23,25,25,24,26,24,24,25,26,24,22,24,24],[29,29,29,29,29,29,29,29,29,28,28,28,28,28,27,28,27,28,27,27,28,27,27,27,26,27,27,27,27,27,26,27,28,28,28,27,27,28,27,27,27,27,26,26,25,25,24,22,23,23,22,21,21,22,19,20,20,19,19,18,15,13,10,7,7,5,3,5,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,6,7,7,7,7,6,5,6,5,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,5,5,6,5,5,5,5,5,5,5,4,5,5,4,4,4,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,6,8,8,9,11,13,14,13,12,14,14,14,16,16,16,16,18,19,18,21,21,23,24,23,25,24,24,24,23,24,24,24,25,24,25,25,27,27,28,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,27,27,26,27,25,25,27,23,23,24,23,22,22,20,19,20,18,16,15,14,11,10,8,7,6,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,8,7,8,9,9,9,9,9,9,9,10,9,9,8,8,8,8,8,9,9,9,10,9,9,9,8,8,7,7,7,7,7,6,6,6,6,6,6,6,5,5,6,5,5,6,5,5,6,6,6,6,6,6,7,7,7,7,8,8,8,8,8,6,7,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,3,3,4,6,6,6,5,4,4,3,3,3,4,4,3,4,4,4,5,4,4,4,4,4,4,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,3,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,3,3,2,2,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,4,4,4,4,4,3,3,4,4,4,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,6,7,8,10,10,11,12,12,12,12,14,15,16,19,19,21,21,21,19,20,20,20,23,22,22,23,23,25,25,25,24,25,24,26,24,25,26,25,25,25,24,24,25,25,24,25,24,25,26,26,24,22,25,25],[28,27,28,28,28,28,28,28,28,27,27,27,27,27,27,27,27,28,27,28,27,26,27,27,26,27,27,27,28,27,26,28,28,28,27,28,27,27,28,27,28,27,26,26,27,25,24,23,24,23,22,23,22,20,21,21,19,19,19,18,15,13,10,7,6,5,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,5,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,5,6,6,6,5,6,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,5,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,5,6,5,6,5,6,5,5,5,6,5,6,6,6,7,7,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,5,5,4,4,5,4,4,5,5,6,6,6,5,6,6,6,5,6,6,5,5,6,6,5,5,5,5,5,5,6,6,7,6,6,5,5,5,4,5,5,4,4,5,5,4,4,5,4,4,5,5,5,5,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,3,4,4,4,4,5,5,6,8,9,9,11,13,13,12,12,15,13,14,16,15,15,17,18,18,18,18,20,21,23,21,24,22,23,22,21,21,22,23,24,22,22,24,26,25,27,25,26,25,27,26,27,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,26,25,26,26,24,26,25,24,26,23,21,24,23,20,21,19,19,19,16,16,15,14,12,11,8,7,6,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,8,8,9,8,9,9,10,9,10,9,10,8,8,8,8,8,9,9,10,10,10,9,8,8,8,8,8,7,8,7,7,6,6,6,6,6,6,5,5,5,5,5,5,5,5,6,6,6,6,6,7,6,7,8,8,8,9,9,8,8,7,7,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,2,3,3,3,4,6,6,7,6,5,4,4,3,4,4,4,3,4,4,5,4,4,4,4,4,4,3,3,3,3,2,3,2,2,2,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,5,5,4,5,4,4,4,5,4,4,4,4,3,3,4,4,3,3,3,3,3,2,2,3,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,2,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,5,4,3,3,2,1,2,2,2,1,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,4,4,3,4,4,3,4,4,3,4,4,4,3,4,4,4,5,5,5,5,5,4,4,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,8,10,10,12,12,12,12,13,14,16,17,17,17,20,18,20,19,19,19,20,21,20,21,23,23,23,24,24,22,23,22,24,24,24,26,24,23,25,23,23,23,23,24,23,23,23,24,25,25,21,24,25],[28,28,28,28,28,29,28,28,28,27,28,27,27,27,27,27,27,28,26,27,27,25,27,27,24,26,27,25,27,27,24,27,28,28,26,27,26,26,27,26,27,25,24,25,26,25,22,23,23,21,20,21,21,17,18,19,17,17,17,17,15,12,10,8,6,5,3,3,3,3,3,3,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,7,8,8,7,6,6,6,7,7,7,7,7,7,6,7,7,6,6,7,7,6,7,7,6,6,7,7,7,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,6,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,5,6,6,6,7,7,6,6,6,6,6,6,6,6,6,5,5,5,4,5,5,4,4,5,5,4,5,5,5,4,5,5,5,4,5,6,5,5,5,5,5,5,6,6,7,7,6,7,7,6,6,7,7,7,7,6,7,7,6,6,6,6,7,6,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,5,4,5,4,5,5,5,5,5,5,5,5,4,5,5,6,6,6,6,6,7,7,7,7,7,7,7,7,8,7,7,7,7,6,6,5,5,5,5,4,5,5,5,5,6,5,6,8,8,8,10,13,12,11,12,14,14,14,15,16,16,16,19,19,19,20,21,22,24,22,24,22,22,24,21,21,22,24,23,22,23,24,25,24,26,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,24,25,25,24,26,24,24,25,23,21,22,21,20,20,18,18,18,16,17,15,14,13,11,9,8,7,6,5,6,7,6,7,7,7,8,7,8,8,8,8,9,9,8,8,10,10,10,10,11,11,10,11,10,11,9,9,9,10,10,11,11,12,12,11,11,10,9,9,9,9,8,9,9,8,8,8,8,7,7,7,7,7,7,6,7,7,7,7,7,7,7,7,8,7,7,8,9,9,9,9,9,9,9,8,8,8,7,7,7,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,4,5,7,7,8,7,5,5,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,3,4,3,3,3,3,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,6,6,6,6,5,6,5,5,5,5,4,5,5,5,4,4,4,4,3,3,3,3,3,2,3,3,2,2,1,1,1,1,1,0,1,1,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,5,4,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,3,4,4,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,5,5,5,5,5,6,6,5,5,5,5,4,5,4,4,5,4,4,4,5,4,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,6,7,7,6,6,6,6,6,6,6,7,6,7,7,7,7,7,7,7,7,7,7,7,7,9,10,11,11,12,13,14,12,14,15,17,17,18,19,21,19,21,19,20,20,21,24,22,24,23,23,26,25,25,24,25,25,26,25,25,25,24,25,26,24,24,25,25,25,25,25,25,25,26,25,23,25,24],[28,28,28,29,28,29,28,28,28,28,27,27,27,27,27,27,27,28,27,27,26,26,26,26,25,26,27,26,27,27,25,27,28,28,27,27,27,27,27,26,27,26,26,26,26,25,23,23,24,22,22,21,21,18,19,19,17,17,17,18,15,13,11,8,6,6,5,5,5,6,5,6,6,7,6,6,5,5,4,4,5,4,3,4,4,4,3,3,4,4,4,5,4,5,5,5,6,6,6,7,7,7,7,8,8,8,8,9,8,9,9,8,7,8,7,8,8,8,8,9,8,7,8,9,7,8,8,8,7,8,8,8,8,8,9,9,8,8,7,7,7,7,7,7,7,6,7,7,6,6,7,7,6,6,6,6,5,6,6,6,6,5,7,6,6,6,7,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,7,8,8,8,8,8,8,7,7,7,8,8,7,8,8,8,8,8,7,7,8,8,7,6,6,6,6,6,5,6,6,5,6,7,5,6,6,6,6,7,7,7,6,7,8,7,6,7,7,6,7,7,8,8,8,8,8,8,8,8,9,8,9,8,8,9,8,8,8,8,8,8,8,8,9,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,5,5,6,6,5,6,7,8,7,8,8,8,8,7,9,8,7,8,8,8,8,9,8,8,8,8,9,9,9,10,9,10,9,10,9,9,9,8,8,9,7,7,7,7,7,6,7,7,7,7,7,8,8,10,10,11,13,12,12,14,15,14,15,15,17,17,17,18,19,21,20,23,23,24,23,25,22,23,24,23,22,23,23,24,23,23,24,25,24,27,25,26,26,26,26,27,27,27,27,27,27,27,27,27,26,27,26,27,27,27,27,26,25,26,26,25,25,25,24,27,23,22,24,23,20,21,19,20,20,18,17,17,16,15,14,11,10,8,8,7,9,9,8,9,9,9,10,10,10,10,10,10,10,11,10,11,12,13,11,11,13,13,12,13,12,12,11,11,11,12,11,13,13,14,14,13,12,12,11,11,11,10,10,11,11,10,10,10,10,9,9,10,9,9,10,9,9,10,10,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,10,10,10,9,9,9,9,8,8,9,9,9,9,9,8,8,8,7,8,7,6,7,7,7,7,6,6,6,7,6,6,5,5,4,4,4,5,6,8,8,8,8,7,6,6,6,5,5,5,4,5,5,5,5,5,5,6,5,5,4,4,4,4,3,4,3,2,2,3,3,2,3,3,3,4,5,5,6,7,6,6,6,7,7,8,8,8,7,7,8,8,8,8,8,9,8,9,8,9,7,8,8,8,7,7,7,7,7,8,6,7,6,6,6,5,5,5,4,4,4,4,3,3,3,2,2,3,1,1,0,1,2,2,3,4,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,7,5,4,3,3,2,3,3,3,4,6,5,4,6,6,5,5,6,7,6,6,8,8,7,7,8,7,8,7,8,7,7,7,6,6,6,6,5,5,5,4,5,4,4,4,4,4,3,3,4,4,5,5,5,4,6,6,5,5,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,5,7,6,6,7,7,6,6,7,8,7,9,9,9,9,8,8,8,8,8,8,8,8,9,9,8,7,10,9,8,8,8,9,8,8,9,9,9,9,9,9,9,9,10,10,9,9,9,10,9,10,11,12,12,15,15,16,15,16,16,19,19,20,20,22,21,22,22,22,21,22,24,24,24,25,25,25,26,27,25,26,25,27,26,25,28,25,26,26,26,25,25,25,25,25,26,25,26,26,26,24,25,25],[28,28,29,28,29,29,28,28,29,28,28,28,28,28,28,27,28,28,27,28,28,26,28,28,25,28,29,26,28,28,25,28,29,29,27,28,28,27,28,27,28,26,26,25,26,25,21,23,24,21,20,22,22,18,18,20,18,17,18,18,16,14,11,8,7,6,5,4,4,4,4,5,4,4,4,4,3,4,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,6,6,5,5,6,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,5,5,6,5,5,5,5,4,5,5,4,4,5,4,4,4,5,5,4,5,4,5,5,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,4,5,5,6,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,7,7,7,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,4,4,4,4,3,3,3,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,7,8,7,8,7,8,7,7,6,6,6,6,5,6,6,6,6,7,7,8,11,10,11,12,15,14,15,15,17,17,17,18,19,18,18,21,21,21,23,23,23,26,24,26,23,23,25,24,22,24,24,25,24,25,25,26,25,28,26,27,26,26,27,26,27,26,26,27,27,27,27,27,27,27,27,27,27,27,27,26,26,27,27,27,26,26,26,26,24,23,24,24,23,23,20,21,21,19,19,17,15,14,13,11,9,8,7,7,7,7,7,7,8,8,8,8,9,8,9,9,9,10,9,9,10,11,10,11,12,12,11,12,11,11,10,10,11,11,10,12,11,13,13,12,12,11,11,10,10,9,9,9,9,9,8,8,8,7,7,8,7,7,7,7,7,7,7,7,7,8,7,8,8,8,8,8,9,9,10,10,10,9,10,9,8,7,7,7,6,6,6,6,6,6,7,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,4,4,6,7,7,8,7,5,4,4,4,4,4,4,3,4,4,4,4,5,4,4,4,3,4,3,4,3,2,3,3,2,2,3,2,2,3,2,2,3,3,3,3,3,3,4,4,5,4,4,5,5,5,5,5,6,6,6,7,6,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,3,4,4,3,3,3,2,2,2,2,2,1,0,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,5,5,4,4,3,2,2,2,3,2,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,6,7,6,6,6,6,6,6,7,6,6,6,5,5,5,5,4,4,4,4,4,3,4,3,3,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,7,7,6,6,7,6,7,6,6,6,6,6,5,5,6,6,5,6,6,5,5,6,6,6,7,7,7,7,7,7,7,7,8,7,7,8,8,7,7,7,8,7,7,7,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,8,9,10,11,12,13,14,14,13,14,16,16,18,20,20,21,22,22,20,21,22,22,24,22,24,24,24,25,26,26,24,25,24,25,25,24,26,24,25,26,24,24,26,26,26,26,26,25,26,26,25,23,25,26],[29,29,29,29,29,30,29,29,29,29,28,29,29,28,28,29,28,29,28,29,29,28,28,28,27,28,28,27,29,27,27,28,28,29,28,28,28,28,28,28,28,27,26,26,26,25,23,23,25,22,22,22,23,19,20,21,19,17,19,19,17,15,12,10,8,7,6,6,5,5,5,5,5,5,5,4,4,5,3,3,4,4,3,3,4,3,3,2,4,4,4,4,5,4,4,5,5,5,5,6,7,6,6,7,7,7,7,8,8,8,7,7,6,6,5,6,7,7,8,7,7,7,7,7,7,8,8,8,7,8,8,7,8,7,8,8,8,8,7,7,7,7,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,4,4,4,5,5,5,5,5,5,5,5,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,7,8,7,7,7,8,7,7,6,6,6,6,6,6,5,6,6,6,6,6,6,6,5,6,6,5,6,6,6,5,5,6,6,5,6,6,6,7,7,7,7,7,7,7,7,8,7,7,7,8,8,7,7,7,7,7,7,8,8,8,8,7,7,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,5,6,5,5,6,5,5,5,5,5,5,5,5,6,5,6,6,7,6,6,7,6,7,7,7,7,8,7,7,8,8,8,8,9,8,9,9,9,9,9,9,9,8,9,8,8,7,8,7,7,7,7,7,7,7,8,8,9,11,11,12,13,14,15,15,17,17,17,16,18,19,18,20,21,22,21,22,24,24,26,25,26,25,24,25,24,23,25,25,25,25,25,26,27,26,28,27,27,27,27,27,27,27,27,27,27,27,28,27,28,27,27,27,28,27,28,27,27,26,27,26,26,27,26,26,27,25,24,25,24,22,23,20,20,20,18,18,18,15,14,13,11,10,9,8,8,9,9,8,9,9,9,10,11,9,10,11,10,11,11,11,11,11,12,12,13,13,13,14,13,13,12,12,11,11,11,12,12,12,14,14,12,13,12,11,10,11,10,10,11,11,10,10,10,9,9,9,9,9,8,8,8,9,9,9,9,10,10,10,10,10,9,9,10,10,10,12,11,10,11,11,10,10,9,9,8,8,8,8,8,8,8,8,8,7,7,7,7,6,7,7,6,6,7,6,6,6,6,5,6,5,4,5,4,3,4,4,5,5,7,8,8,7,6,6,6,5,5,5,5,5,5,5,6,5,5,5,6,5,4,4,4,4,3,3,3,3,3,4,3,3,2,3,3,3,4,4,4,4,5,5,4,5,6,6,6,6,7,7,7,7,7,8,7,8,8,8,8,8,8,7,8,7,7,7,6,6,6,6,6,5,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,2,1,1,0,1,2,2,2,2,3,3,3,3,4,4,3,4,4,4,4,5,4,4,5,4,5,5,5,6,6,5,5,4,3,3,3,3,3,4,4,4,4,5,5,6,5,6,7,6,6,8,7,6,7,8,7,8,7,7,7,8,7,6,7,7,6,6,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5,5,5,6,6,6,7,7,7,7,7,7,7,8,8,8,7,8,9,8,8,8,7,7,7,7,7,7,8,7,7,7,8,7,7,8,8,7,9,9,9,9,9,9,8,9,9,9,9,9,9,9,9,7,10,9,8,9,9,9,8,8,9,8,8,9,9,8,9,9,9,8,9,9,8,8,9,11,11,12,12,13,15,15,14,15,17,18,19,22,21,23,23,23,22,23,23,22,25,23,24,25,24,25,26,26,26,26,25,27,26,27,28,26,26,27,24,25,26,27,26,27,26,25,27,27,26,23,25,26],[28,28,28,28,28,29,28,28,29,27,27,27,27,27,27,27,27,28,27,27,27,27,27,28,27,27,28,26,28,27,26,28,28,29,28,28,27,28,28,27,28,26,26,26,26,24,23,23,24,21,22,21,21,20,19,20,18,17,18,18,15,14,11,8,7,6,5,5,5,4,4,4,4,3,4,3,3,3,2,2,2,2,2,2,2,2,2,1,3,2,2,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,5,6,5,5,4,4,4,4,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,5,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,6,6,7,6,6,6,5,5,6,6,5,5,6,6,6,7,7,8,11,10,10,12,13,14,14,14,16,15,15,16,17,17,18,19,20,21,22,22,23,24,23,25,23,22,23,22,23,23,23,24,24,24,23,25,25,27,25,26,26,26,26,26,27,26,26,26,26,26,26,26,26,26,27,27,27,27,26,26,26,26,27,26,27,26,25,27,24,24,25,23,22,22,20,19,19,18,18,17,15,14,13,10,9,7,7,7,7,6,6,6,7,7,8,7,8,8,9,8,9,10,9,9,10,11,10,10,12,13,12,12,11,12,11,10,10,10,10,11,11,13,13,12,11,11,9,10,10,8,8,9,9,7,8,8,7,7,7,7,7,6,6,6,7,6,6,7,7,7,7,7,8,7,8,8,9,9,10,10,10,9,8,7,7,7,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,5,7,7,7,6,5,4,4,3,3,3,3,3,3,3,4,4,3,4,4,4,3,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,4,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,5,5,5,4,4,4,4,5,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,2,3,2,2,2,1,1,0,1,1,1,2,2,2,2,2,2,2,2,3,3,4,4,3,4,4,4,4,3,4,4,5,4,4,4,3,2,2,2,2,2,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,5,6,5,6,6,5,6,5,5,5,5,5,4,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,6,6,6,6,6,6,6,6,6,6,7,6,6,7,6,7,6,6,6,7,6,7,7,7,7,6,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,8,9,10,11,12,13,13,13,14,15,16,18,19,19,21,21,21,20,21,20,21,24,22,23,23,23,25,25,25,23,24,23,24,24,23,26,22,23,24,23,24,24,24,24,25,25,24,25,25,23,22,24,25],[28,28,28,29,29,29,29,29,29,28,28,28,28,28,28,28,28,29,29,29,28,28,29,29,28,28,28,28,28,28,27,28,29,29,27,28,27,28,28,27,27,27,26,26,26,26,24,23,24,22,22,22,22,19,20,21,18,19,19,19,17,14,12,10,8,6,6,5,5,4,5,4,5,4,4,4,3,3,3,3,3,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,6,6,5,6,6,5,4,4,4,5,5,5,5,6,5,4,5,6,5,5,6,6,5,5,6,6,5,6,6,7,6,6,5,5,5,5,4,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,6,5,5,6,5,5,6,6,5,5,6,6,6,6,6,7,7,7,7,7,7,7,6,7,7,6,7,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,6,5,5,6,5,5,5,6,6,5,5,6,6,5,6,6,5,6,6,6,6,7,7,7,6,6,6,5,5,6,5,6,6,6,5,6,6,5,5,6,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,5,6,5,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,8,8,8,8,8,7,8,7,7,6,7,6,6,6,7,7,7,8,9,11,13,12,14,16,15,17,17,18,18,18,19,19,19,21,22,23,23,24,24,25,26,25,27,26,25,27,24,26,26,25,27,25,25,26,27,27,28,26,28,27,27,27,28,27,28,28,27,28,27,28,28,28,27,27,28,28,28,28,28,28,28,28,26,28,27,26,28,25,25,26,26,24,23,21,21,20,19,18,18,15,15,14,12,10,9,8,8,8,9,8,9,9,9,10,10,10,10,10,10,11,11,11,11,11,12,12,12,12,13,13,13,12,13,11,12,11,12,12,12,12,13,14,12,13,12,12,11,11,11,10,10,10,10,10,9,9,9,8,9,9,8,8,8,9,9,9,9,9,9,9,9,10,9,9,10,11,10,11,11,10,10,10,8,9,8,7,7,6,7,7,7,7,6,7,7,7,6,7,7,6,7,6,6,6,6,6,5,5,5,5,5,4,5,4,4,4,4,5,5,6,7,7,8,7,6,5,5,4,4,4,4,3,4,5,5,5,5,5,5,5,4,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,7,7,7,7,7,7,8,7,7,7,7,7,7,6,7,6,5,6,6,6,6,6,6,5,5,5,5,5,4,4,5,5,4,4,4,3,4,3,3,3,2,2,2,1,0,1,1,1,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,5,3,4,4,5,5,5,4,4,3,3,3,3,3,4,4,4,4,5,4,5,5,6,6,6,6,7,7,7,7,8,7,7,7,7,8,8,7,6,7,7,6,7,7,7,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,8,7,8,7,8,7,8,9,8,8,8,8,7,7,8,7,7,8,8,7,8,9,7,6,7,8,8,9,9,9,8,9,9,8,9,9,9,9,9,9,9,9,8,10,8,8,9,8,8,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,10,11,12,12,13,14,15,14,15,17,18,19,21,21,23,23,23,22,23,22,23,26,25,25,26,25,26,26,27,25,26,25,27,26,26,28,26,26,27,26,27,26,26,26,27,27,26,27,27,26,25,26,26],[28,27,27,27,27,28,28,27,28,26,26,25,26,25,25,26,26,27,26,27,27,26,26,27,26,26,26,26,27,26,26,27,27,28,27,27,27,27,27,26,27,25,25,25,26,24,22,22,23,20,22,20,20,19,19,20,18,18,17,17,15,13,10,8,7,6,5,4,4,4,4,4,4,4,4,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,5,5,5,5,4,5,5,4,4,5,5,4,5,5,5,4,5,5,6,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,6,6,6,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,3,4,3,4,3,4,4,4,4,5,4,4,5,5,5,5,5,5,5,6,5,6,6,6,6,7,7,8,7,8,8,8,8,8,7,8,7,7,7,6,6,6,6,6,5,6,6,6,7,7,8,11,10,10,12,13,13,13,14,15,15,15,17,17,16,18,20,20,20,20,22,21,23,23,24,23,21,23,21,21,22,23,23,22,22,23,25,24,26,24,25,26,26,26,26,26,26,26,26,26,24,26,25,25,25,25,26,25,26,25,25,25,25,25,24,25,24,24,26,24,23,24,23,21,21,20,19,19,17,18,16,14,13,13,10,9,8,7,7,8,7,7,8,9,9,9,9,9,9,10,9,10,12,11,10,12,13,12,12,13,14,13,13,13,13,12,12,12,11,12,12,13,13,13,13,13,12,11,12,11,10,10,11,10,9,9,9,8,8,8,8,8,8,8,8,8,8,8,8,9,8,9,9,9,9,9,9,10,10,11,11,11,10,10,9,8,8,7,7,6,6,7,6,6,6,6,6,7,6,6,6,6,6,6,5,6,6,5,5,4,5,5,4,4,5,4,4,4,4,5,5,6,7,7,7,7,6,5,5,4,4,4,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,2,2,2,1,1,0,1,1,2,2,2,1,2,2,2,3,2,4,4,4,4,4,4,3,4,4,4,5,4,4,4,4,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,7,6,6,7,7,7,7,7,6,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,5,5,5,5,5,5,5,5,6,6,6,7,7,7,7,7,7,7,7,8,8,7,8,7,6,6,7,6,6,7,7,6,7,7,6,6,7,7,7,8,8,8,8,8,9,7,8,8,8,8,8,8,8,8,8,9,9,8,8,8,8,8,8,9,8,7,8,8,8,8,8,8,8,8,8,7,8,8,9,9,11,11,13,14,15,13,15,16,17,19,19,20,21,20,22,22,21,21,22,24,22,24,24,23,25,25,24,23,24,23,24,25,24,26,24,24,24,24,25,24,23,23,24,25,24,25,25,24,23,23,24],[29,29,28,28,28,29,29,28,28,28,27,27,28,27,27,27,27,28,27,28,27,27,27,28,27,27,28,27,28,27,26,28,28,28,28,28,27,28,28,27,27,26,26,26,26,25,23,23,24,21,22,21,22,20,19,21,18,19,18,18,15,13,11,8,7,6,5,4,4,4,4,4,4,3,3,2,3,2,2,2,2,2,1,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,4,3,3,3,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,3,3,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,4,5,5,4,4,5,5,5,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,4,4,5,5,4,4,5,4,3,4,4,4,3,4,4,3,4,4,3,3,4,4,4,5,5,5,5,4,4,3,3,4,3,3,4,3,3,3,4,4,3,4,4,4,4,4,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,6,6,7,6,6,6,5,5,5,6,5,5,6,6,6,7,7,8,11,10,10,13,13,14,14,14,16,16,16,18,18,18,19,21,21,22,22,24,23,24,23,26,23,23,26,23,23,25,25,25,25,26,25,26,26,28,26,27,28,27,27,28,27,27,27,27,27,27,27,27,27,28,27,28,28,28,27,27,26,27,27,27,27,27,26,27,24,24,25,24,22,22,20,20,20,18,18,17,14,14,12,10,8,7,7,7,6,6,6,7,7,7,8,7,8,8,9,8,9,10,9,9,10,11,11,11,12,12,11,12,11,11,11,10,10,10,11,11,12,12,12,12,11,11,10,10,10,8,9,9,9,8,8,8,8,7,7,7,6,6,6,6,6,6,6,6,7,6,6,7,8,7,7,8,8,8,9,9,9,8,8,7,6,6,6,5,5,4,4,4,4,4,4,5,4,4,5,5,4,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,3,4,4,4,5,6,6,6,6,5,4,3,3,3,3,3,2,3,3,3,4,3,4,4,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,4,5,4,4,4,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,2,2,2,2,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,4,4,3,3,4,5,4,4,3,3,3,2,2,2,2,3,3,3,3,4,3,4,4,4,4,4,4,4,5,5,5,6,5,6,5,5,6,6,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,6,5,6,6,6,6,6,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,6,7,6,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,5,6,6,6,5,6,7,8,9,10,11,12,13,12,13,14,16,17,19,18,21,21,20,20,21,20,21,24,22,23,24,22,25,24,25,24,24,23,26,25,25,26,24,25,25,25,24,25,25,25,25,25,24,26,25,24,23,24,25],[28,28,29,29,29,29,29,29,29,28,28,28,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,27,28,29,29,28,28,28,28,28,28,28,27,27,26,27,25,23,24,24,22,23,22,22,20,20,21,19,20,19,18,16,14,11,8,7,6,5,5,4,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,3,4,4,4,4,4,4,4,3,3,3,3,3,4,3,4,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,5,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,4,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,4,3,3,4,4,4,4,5,5,5,4,4,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,6,6,7,8,12,10,11,14,14,16,16,15,17,18,16,17,19,19,19,21,21,23,22,23,24,25,24,26,25,23,25,23,23,25,24,25,24,24,24,26,25,27,26,27,26,27,26,26,27,26,26,26,26,26,27,27,27,27,27,27,27,27,27,26,26,27,27,26,27,27,26,27,25,24,26,25,23,23,20,20,20,17,17,16,14,13,12,10,8,8,7,7,6,6,6,7,7,7,7,7,8,8,8,8,9,9,9,9,9,10,10,10,11,12,11,11,10,10,10,9,9,9,10,10,10,11,12,10,11,10,10,9,9,8,9,9,9,8,8,8,7,7,7,7,6,7,6,7,6,6,6,6,7,6,6,7,7,6,6,7,8,7,8,8,8,8,7,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,4,5,5,6,6,6,6,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,6,5,5,4,4,3,2,2,2,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,5,6,6,6,5,5,5,5,6,6,5,5,5,5,5,6,5,5,4,5,5,5,4,5,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,6,5,6,6,5,6,6,5,6,6,7,8,9,9,11,12,13,12,12,14,16,18,20,20,22,22,22,20,22,22,21,23,22,24,24,23,25,26,25,24,25,24,26,25,25,26,24,25,25,23,24,25,26,25,26,25,24,25,25,23,22,25,24],[28,29,28,28,28,29,28,28,28,27,27,27,27,27,27,27,27,27,27,27,26,27,27,27,26,27,27,27,27,26,26,27,27,28,27,28,26,27,27,27,27,26,25,26,26,25,23,23,23,22,22,22,21,20,19,20,18,19,18,18,15,13,11,8,8,6,5,4,4,4,4,4,4,3,3,3,2,2,2,2,2,3,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,5,4,4,3,3,3,3,3,4,3,4,4,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,5,5,5,4,5,5,5,4,5,5,5,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,4,4,4,3,3,3,4,3,3,4,4,4,4,4,3,4,4,4,5,5,5,5,4,4,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,3,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,5,5,5,6,5,6,6,6,7,8,7,8,12,11,11,14,14,16,16,16,17,19,17,18,20,19,19,21,22,23,23,23,24,25,24,25,23,23,24,24,23,24,24,24,25,25,24,26,26,27,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,26,25,26,26,26,26,26,26,26,24,24,25,24,23,22,21,20,20,18,18,16,14,13,12,10,8,7,6,7,6,7,6,6,7,7,8,8,8,8,8,8,9,10,9,9,10,10,10,10,11,12,11,11,11,11,10,10,10,10,10,10,11,11,12,11,11,11,10,10,10,9,9,9,8,8,8,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,7,7,6,7,7,8,8,8,8,9,8,8,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,4,4,4,5,6,6,6,6,5,4,4,3,3,3,3,2,3,3,3,4,3,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,0,1,1,1,1,1,2,3,2,3,3,3,4,4,4,4,3,4,5,4,4,4,4,3,3,3,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,6,5,6,6,6,6,6,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,7,7,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,8,8,10,10,11,13,12,11,13,15,16,18,19,19,23,23,21,20,22,22,20,24,21,23,25,22,25,26,25,25,26,24,25,26,25,26,25,25,26,24,25,27,26,25,26,25,24,25,25,25,23,25,24],[29,29,28,29,29,29,29,28,28,28,28,27,27,27,27,27,27,27,27,28,27,27,28,27,27,28,28,27,28,28,26,28,28,28,28,28,28,28,28,27,28,27,27,27,26,25,23,23,24,22,22,22,21,20,20,21,18,19,19,18,15,14,11,8,8,7,5,5,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,5,5,4,4,4,3,4,3,3,3,3,3,2,3,3,3,2,2,3,2,2,3,3,3,2,3,3,3,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,6,6,6,6,5,5,6,6,5,6,6,6,7,8,7,9,13,12,12,15,15,17,16,16,18,18,17,19,20,20,20,21,24,23,23,25,25,25,25,26,24,23,24,23,24,25,24,24,25,24,24,26,26,28,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,28,28,27,27,26,26,26,27,26,26,26,25,26,24,24,25,24,23,22,21,20,20,18,17,17,15,13,12,10,9,8,7,7,7,7,7,7,7,8,8,8,8,8,8,9,9,10,9,9,10,11,10,10,12,12,11,12,11,11,10,10,10,9,10,10,11,12,12,12,11,11,10,10,10,9,9,9,9,9,8,8,7,8,7,7,7,6,6,7,7,7,7,6,7,7,7,7,7,7,8,8,8,8,9,9,8,8,8,7,7,6,6,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,7,7,6,5,4,4,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,2,2,2,2,1,1,1,0,1,1,2,2,1,2,3,3,3,4,4,4,5,5,4,4,5,6,5,6,5,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,6,7,6,6,6,6,6,7,6,7,6,6,6,6,6,7,7,7,7,7,8,7,7,8,7,7,8,8,7,7,8,8,7,7,8,7,7,7,7,7,7,6,7,7,7,6,7,7,6,6,7,6,6,7,8,9,10,10,12,13,13,12,13,15,16,18,19,19,22,22,22,21,21,21,21,24,23,23,24,22,25,25,25,24,25,24,26,26,26,27,24,25,26,24,25,26,25,25,25,26,25,25,26,24,24,25,25],[28,28,27,28,28,28,28,28,28,27,27,26,27,26,26,27,27,27,27,27,27,27,27,27,26,27,27,27,28,27,26,28,28,28,26,28,27,27,28,27,28,26,26,26,26,25,23,23,24,20,22,21,21,20,20,20,18,19,19,18,15,14,11,8,7,6,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,4,3,3,4,4,3,4,4,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,3,3,4,3,3,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,3,3,4,4,5,4,5,5,5,4,4,3,3,4,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,3,3,2,3,3,3,2,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,6,7,7,8,11,11,11,12,14,16,15,14,16,17,16,18,18,18,19,20,22,21,21,23,23,23,23,24,23,22,23,22,22,22,23,24,23,23,23,24,23,27,24,25,26,26,26,26,25,25,26,25,25,25,25,25,24,25,25,26,26,26,25,25,25,26,26,25,26,24,24,26,23,23,24,24,20,21,20,18,19,17,16,16,14,12,12,10,9,8,7,6,6,6,7,7,7,7,8,8,8,8,8,8,9,9,9,9,9,11,10,10,11,11,11,11,11,11,10,9,9,9,9,10,10,11,11,11,11,10,10,9,8,9,9,8,8,8,8,8,7,6,6,6,6,6,6,6,6,6,6,6,7,6,7,7,7,7,7,8,8,8,9,9,9,8,8,7,6,6,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,5,5,6,6,6,6,5,4,4,3,3,3,3,3,3,3,4,4,4,3,4,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,4,5,5,4,4,4,4,4,4,4,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,2,2,3,3,3,3,3,4,3,3,4,4,5,4,4,4,4,3,3,2,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,5,6,6,5,5,6,6,5,5,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,7,7,7,7,8,7,7,7,7,7,7,8,7,7,7,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,8,10,9,12,13,13,12,13,15,17,17,17,17,20,20,21,20,21,20,21,23,21,23,23,23,24,24,25,24,24,22,24,24,24,26,25,24,25,24,24,24,24,22,24,24,23,25,24,24,22,23,24],[28,28,28,28,28,28,28,28,28,27,26,25,27,26,26,26,27,27,27,27,26,26,27,26,26,27,26,26,27,26,26,28,27,28,26,27,26,27,27,26,27,25,25,25,26,25,22,22,23,21,21,21,22,20,20,21,18,19,18,18,15,13,10,8,7,6,5,4,4,4,4,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,4,3,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,5,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,6,7,6,6,6,5,5,6,5,5,6,6,6,7,7,8,11,11,11,14,14,15,15,15,16,16,15,18,18,18,19,20,22,22,21,22,23,24,23,24,23,22,24,22,20,23,24,23,23,23,23,25,25,27,25,26,26,27,26,26,26,27,26,26,26,26,26,26,26,27,26,26,26,27,26,25,25,26,25,26,26,26,25,27,23,24,24,24,22,21,20,18,19,17,17,15,14,13,11,10,9,8,7,7,6,7,7,7,8,8,9,9,9,8,9,9,10,11,10,10,11,12,11,12,12,13,12,12,12,12,12,10,11,11,11,11,12,13,12,12,12,10,12,11,10,10,10,10,10,9,9,9,8,7,7,7,7,7,6,7,7,7,7,7,8,7,7,8,8,7,8,9,9,9,10,10,10,9,9,8,7,7,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,6,7,7,7,7,6,5,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,4,4,4,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,3,3,3,4,4,4,4,4,4,4,5,4,5,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,6,6,7,6,6,6,5,6,7,6,6,7,7,5,6,6,6,6,5,5,5,5,5,5,5,4,5,4,4,4,4,5,5,4,5,5,5,5,6,6,6,6,7,7,6,6,7,8,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,8,7,7,8,7,8,8,7,8,8,8,8,8,8,9,8,7,7,8,8,7,7,7,6,7,7,7,7,7,7,7,6,7,7,6,6,7,8,9,10,10,11,13,13,12,13,15,17,18,18,19,20,21,21,20,21,22,21,22,20,22,23,22,25,25,24,23,24,23,25,25,25,26,25,25,24,24,25,25,24,24,25,25,23,24,24,23,21,23,24],[28,28,28,28,28,29,28,28,28,27,27,26,27,26,26,27,27,27,27,27,26,26,26,26,26,26,26,26,27,26,25,27,27,28,26,27,25,26,26,26,27,25,25,25,25,24,23,22,23,21,22,21,21,20,20,20,19,19,18,18,15,14,11,9,8,8,6,5,5,4,5,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,4,4,4,4,4,3,3,3,3,3,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,4,4,4,5,5,4,4,4,4,4,4,3,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,6,6,5,5,6,6,6,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,4,4,5,5,4,4,4,4,4,4,5,4,5,5,5,4,5,5,5,6,6,6,6,5,5,4,4,5,4,4,4,5,4,4,5,5,4,4,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,6,6,5,6,6,6,6,7,7,7,8,8,10,11,12,12,13,15,15,15,16,17,17,17,18,19,19,20,21,22,24,22,23,24,25,24,26,24,23,24,22,23,24,23,25,24,24,24,26,26,28,26,26,27,27,27,27,27,27,27,27,27,26,27,27,27,27,26,27,27,27,27,26,26,26,26,26,26,26,26,27,25,24,24,24,23,22,20,19,19,18,17,16,14,13,12,11,9,9,8,8,7,8,7,8,8,9,9,9,9,10,11,10,10,12,11,11,12,13,12,12,13,14,13,13,12,13,12,11,12,11,12,12,13,14,14,14,13,12,13,12,12,10,11,11,11,10,10,9,9,8,8,8,7,7,7,7,8,7,7,7,8,7,7,8,9,8,8,9,9,9,10,10,10,9,9,8,8,7,7,6,6,6,5,5,5,5,5,6,6,5,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,6,7,7,7,7,6,5,4,4,4,4,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,6,6,6,6,6,5,6,6,6,5,6,6,5,6,5,5,5,5,5,5,5,4,4,5,5,5,4,4,4,4,4,4,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,2,2,3,3,3,4,4,4,4,4,4,5,5,5,5,4,4,4,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,7,6,7,7,6,7,7,6,6,7,7,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,4,5,6,5,5,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,8,8,9,8,8,9,8,9,9,8,8,9,9,8,8,8,9,9,8,8,8,8,7,7,8,7,7,8,7,7,7,7,7,7,7,7,7,7,7,8,9,10,10,12,13,13,13,13,15,17,17,18,19,20,20,21,21,21,21,21,22,22,22,23,23,23,24,24,24,24,23,25,25,24,26,25,24,25,23,25,25,24,24,25,25,23,25,25,24,23,24,24],[28,28,28,28,28,28,28,28,28,27,27,26,27,27,26,27,27,27,27,27,27,27,27,27,27,26,27,27,27,27,26,28,28,29,26,28,26,28,27,26,28,26,26,26,26,25,23,23,24,22,22,22,22,21,21,22,19,20,19,19,17,15,12,10,9,8,7,6,6,5,6,5,6,5,5,4,3,3,3,3,3,2,3,3,2,2,3,2,3,2,2,2,3,2,2,3,3,3,3,4,3,4,4,4,4,4,5,5,4,5,5,4,4,3,3,4,5,4,4,5,4,4,4,5,4,4,5,4,4,5,5,5,5,5,6,6,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,5,5,4,5,6,5,5,5,5,5,5,6,6,6,7,6,6,7,7,6,7,7,7,7,6,6,5,4,5,5,4,4,4,4,3,3,4,4,3,3,4,3,3,4,4,4,3,4,4,5,5,6,5,5,5,5,5,5,4,5,5,5,5,5,6,5,5,6,6,5,6,6,6,6,6,7,7,6,6,5,5,6,6,5,5,6,5,5,6,6,5,5,6,6,6,5,5,5,5,4,4,4,3,4,4,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,8,8,8,8,9,9,9,9,9,9,9,9,9,8,8,8,7,8,8,7,7,8,9,9,10,10,11,12,13,13,15,17,17,16,18,20,19,19,21,21,20,22,23,25,24,24,26,25,27,26,27,25,25,26,23,23,24,25,25,25,25,25,27,27,27,26,27,28,28,27,27,27,27,28,28,28,27,28,28,28,27,27,28,28,28,28,27,27,27,27,27,28,27,27,27,25,25,25,25,24,23,22,20,20,18,18,17,15,14,13,12,10,10,10,9,9,10,9,9,11,10,11,11,12,12,13,12,12,14,13,13,14,15,14,14,15,14,15,14,14,14,14,13,13,13,13,14,14,14,16,15,15,14,13,14,13,12,13,13,12,12,11,11,11,11,10,9,10,9,8,8,10,10,9,10,11,10,10,11,11,10,10,11,11,11,11,12,11,11,10,9,9,8,8,8,7,6,6,7,7,6,7,7,7,6,7,7,7,6,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,5,6,6,7,7,8,9,7,7,6,5,5,5,5,4,4,4,4,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,6,5,6,6,6,7,7,7,7,7,8,8,7,8,7,8,7,7,8,7,7,6,7,7,7,7,6,7,7,6,6,7,7,6,6,6,6,6,6,6,6,5,5,5,4,4,4,3,3,3,2,2,2,1,1,1,1,1,0,1,2,3,3,4,4,5,5,5,5,5,5,6,6,7,6,5,5,4,4,5,4,4,5,5,5,6,6,5,6,6,6,7,7,7,7,7,8,8,9,8,9,9,8,9,9,8,8,9,8,8,8,8,9,8,7,8,8,7,7,7,7,7,7,7,7,6,6,7,7,7,8,8,8,8,8,8,9,9,9,9,9,9,9,11,10,10,10,10,9,9,9,9,9,10,9,9,9,9,9,8,9,9,9,9,10,10,10,10,10,10,10,10,10,11,11,11,11,10,9,10,11,10,10,11,10,9,10,11,9,9,10,10,9,9,9,9,8,9,9,8,8,9,10,10,11,12,14,15,16,14,15,17,19,20,21,20,21,22,23,21,21,22,24,24,23,23,25,23,24,25,26,24,25,22,26,26,25,27,25,26,26,26,25,26,25,25,26,26,25,26,26,25,23,24,25],[28,28,28,28,27,28,28,27,28,27,27,27,27,27,27,28,27,27,28,27,27,27,27,28,27,27,28,27,27,28,26,27,28,29,27,28,27,27,27,26,28,26,25,25,26,25,23,23,24,20,22,22,22,20,20,21,18,19,19,18,17,15,12,10,10,8,7,7,7,7,6,6,6,5,5,5,5,3,3,4,4,3,3,4,3,3,3,4,3,3,3,3,4,3,3,4,3,4,4,5,4,4,5,5,5,5,6,6,5,6,6,5,4,4,4,5,5,5,5,5,5,4,5,6,5,5,6,6,5,6,6,6,6,6,7,7,6,7,6,6,6,6,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,2,3,4,3,3,4,4,4,4,4,4,4,5,5,5,6,5,5,6,6,5,6,6,6,6,6,7,7,7,7,8,8,7,8,8,8,8,8,8,8,8,8,8,7,7,6,6,7,6,6,6,5,5,5,5,5,4,4,5,4,3,4,5,4,3,4,5,5,5,5,6,6,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,8,7,7,7,6,6,7,7,6,7,7,7,7,7,7,7,7,7,7,7,8,7,7,6,5,6,5,4,5,5,5,5,5,6,5,6,6,6,5,6,6,7,7,7,7,7,7,7,8,8,8,8,8,9,10,9,9,10,11,11,11,10,10,10,9,9,8,9,9,8,9,8,9,9,9,10,10,10,13,13,13,15,16,16,16,17,19,18,18,20,21,19,20,23,23,23,23,26,25,26,25,26,26,24,25,24,23,25,25,26,25,24,25,27,26,28,27,28,27,28,28,28,27,27,28,27,27,28,28,27,28,27,27,27,28,27,27,27,27,27,26,27,28,26,26,27,26,25,26,25,23,22,22,20,20,19,18,18,16,15,14,12,12,11,10,10,10,11,11,10,12,13,13,13,13,13,14,14,14,15,15,14,15,15,15,16,16,16,16,16,17,16,15,15,15,15,15,15,15,15,16,16,16,14,14,15,14,13,13,14,13,13,13,13,12,12,11,11,13,11,10,10,11,12,11,12,12,11,12,12,12,12,13,13,14,14,14,14,14,13,13,11,10,10,9,8,8,7,8,8,8,7,8,8,8,8,8,8,7,8,8,7,7,7,8,7,7,7,6,7,6,6,7,6,6,6,7,7,8,8,9,10,9,8,8,7,7,6,7,5,5,6,5,6,6,6,5,6,5,5,4,4,5,5,5,4,5,5,4,6,5,5,5,6,5,5,6,7,5,5,6,7,6,6,7,7,7,7,7,7,8,8,8,8,8,9,10,10,9,9,9,9,8,9,9,8,8,8,9,9,8,8,9,8,7,8,8,8,8,7,7,8,7,7,6,7,7,6,5,5,5,5,4,3,3,2,3,2,2,2,1,2,1,1,0,1,2,3,3,4,5,5,6,5,5,6,6,6,6,7,7,6,5,4,5,5,5,6,6,6,7,7,7,7,7,7,8,8,8,8,8,9,9,10,9,11,10,9,10,10,9,9,10,10,9,9,10,9,8,8,9,9,8,9,8,8,7,7,8,7,8,8,8,8,8,9,9,9,10,9,10,10,10,10,11,10,9,11,12,11,11,11,10,9,9,10,9,10,10,9,9,11,10,9,8,9,10,10,11,11,12,11,12,12,10,12,11,12,12,12,13,12,12,11,14,12,12,12,12,12,11,11,12,11,11,11,11,11,11,11,11,10,10,11,10,10,10,12,12,14,14,17,17,18,17,18,19,20,21,22,20,22,22,24,23,23,22,23,25,24,24,25,24,25,24,26,25,25,24,26,27,25,28,26,26,25,26,26,26,25,25,25,26,25,26,26,25,23,24,25],[29,29,28,28,29,29,29,29,28,27,27,27,28,28,27,28,28,28,27,28,28,27,27,28,27,26,28,27,27,28,26,27,28,28,27,28,27,27,28,27,27,26,25,25,26,24,23,23,23,21,21,22,21,20,20,21,19,20,19,19,17,16,14,13,12,12,10,11,10,10,11,10,11,10,9,8,8,6,5,6,7,6,6,7,8,6,6,5,5,6,5,6,6,6,5,7,6,6,7,7,7,7,9,8,8,8,9,9,9,8,8,8,7,7,6,7,7,9,8,10,8,7,10,10,8,9,10,10,9,11,11,10,10,11,11,11,12,11,10,10,10,10,9,9,10,8,8,8,8,6,7,8,6,5,5,4,4,5,4,3,4,4,4,4,5,5,6,6,6,7,7,8,8,9,8,9,10,10,10,11,9,10,11,11,10,11,12,11,11,11,12,11,12,13,12,12,12,12,11,12,11,10,12,12,11,11,10,10,9,9,9,10,9,9,10,10,9,9,10,10,9,8,11,9,9,9,11,9,7,10,9,9,9,9,9,9,9,9,10,11,8,11,11,11,11,11,12,12,13,13,13,12,12,13,13,12,13,13,13,13,12,13,13,13,13,12,12,12,13,12,12,12,13,11,12,12,12,11,10,11,10,8,11,8,8,10,11,9,9,11,11,10,12,12,11,12,12,12,13,13,12,13,13,13,13,13,15,16,14,15,16,18,16,17,16,16,18,16,15,16,14,15,13,13,12,12,13,13,13,12,13,12,14,12,14,15,15,15,17,17,16,17,19,20,18,20,23,22,20,25,24,24,25,25,26,26,28,26,28,27,26,27,25,24,27,26,27,27,27,27,29,28,29,28,29,28,29,28,28,29,29,29,29,29,29,28,29,28,28,28,29,28,28,27,28,27,27,28,27,27,27,26,26,27,23,25,26,23,23,22,21,22,20,19,20,17,18,18,16,17,15,15,14,17,16,16,18,18,19,20,18,20,20,21,19,20,21,20,20,20,23,21,20,22,22,22,21,22,21,20,21,22,21,22,22,22,22,22,22,20,21,20,21,19,20,19,21,20,19,20,19,19,18,17,20,18,19,18,18,18,17,20,19,18,18,19,19,18,18,17,18,19,18,18,18,18,18,19,17,17,18,16,18,16,13,15,15,15,13,14,15,15,13,14,13,13,13,12,13,13,14,13,12,12,12,11,11,10,11,10,10,9,9,10,10,10,10,11,12,12,11,11,10,10,9,10,9,9,8,7,9,9,8,6,8,7,6,5,5,6,6,5,6,7,7,6,8,7,8,8,10,8,10,11,12,11,11,12,12,12,11,13,13,13,14,14,13,14,14,14,15,15,14,17,15,16,16,15,14,16,15,13,13,13,13,13,13,11,13,14,12,12,13,12,11,11,12,10,11,10,10,10,9,9,10,9,8,7,6,6,4,5,3,3,4,4,3,3,4,3,2,1,0,1,2,3,4,4,4,5,5,5,6,7,8,8,9,9,9,9,8,10,8,9,11,11,9,12,13,11,12,13,13,15,14,13,15,14,14,15,16,14,15,14,16,16,16,15,15,15,14,15,13,14,14,12,13,14,12,11,12,12,11,11,11,12,11,13,12,13,13,14,14,14,15,16,14,15,15,15,15,15,16,14,15,16,16,15,16,15,14,14,15,13,15,16,14,14,16,16,15,15,16,16,15,18,17,16,18,18,18,16,16,17,15,18,16,17,17,17,15,17,17,16,16,16,18,17,15,18,18,18,16,17,19,16,17,18,17,16,16,16,18,16,18,16,18,19,20,20,22,21,22,22,24,24,25,24,25,25,27,25,26,25,25,27,26,27,27,26,27,27,28,27,28,26,28,28,28,28,28,28,27,28,28,28,28,27,28,28,27,28,28,27,26,26,28],[30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,29,29,29,28,29,29,28,29,29,28,29,29,28,29,28,27,29,29,29,28,28,27,28,28,27,28,27,27,26,27,26,24,24,25,23,23,22,23,21,22,22,21,21,20,21,19,17,16,13,13,13,10,10,11,9,12,10,12,10,11,8,8,8,7,7,9,8,8,7,8,9,8,7,7,7,6,6,7,7,5,7,6,6,7,8,8,7,8,9,9,8,9,9,9,9,9,8,7,7,7,8,9,10,10,10,9,10,10,9,10,11,11,10,12,11,10,11,11,10,11,11,12,11,10,10,11,9,9,9,9,8,8,10,9,7,8,9,8,7,6,5,4,5,5,5,6,6,8,6,6,7,7,8,8,9,9,9,10,11,10,12,11,11,11,11,11,12,11,11,13,11,12,12,12,10,11,12,11,12,13,13,12,13,12,12,12,12,12,12,12,11,10,10,9,9,8,9,9,9,9,10,8,9,10,10,10,10,11,10,8,11,11,9,9,11,11,10,10,12,11,11,10,11,12,11,11,11,12,12,12,12,13,13,12,14,12,13,11,14,13,12,14,13,14,13,13,13,11,12,12,14,12,12,13,13,12,12,13,13,12,13,13,12,12,11,11,10,11,9,9,11,11,11,11,11,13,12,11,11,12,12,11,11,12,14,11,13,12,12,13,14,14,15,14,15,15,17,15,16,16,17,17,17,16,15,15,15,14,13,12,14,14,13,14,13,14,14,15,13,14,16,18,15,17,17,18,18,19,20,20,20,22,23,22,23,25,24,25,24,27,26,27,27,27,26,26,27,25,25,28,27,27,27,27,28,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,27,28,28,28,27,28,28,27,27,26,25,27,27,24,25,23,23,23,22,21,20,20,19,18,18,16,15,15,15,15,15,16,14,17,18,19,18,20,20,21,20,21,22,21,21,21,23,20,22,24,24,22,23,22,22,22,21,21,22,22,22,23,22,23,24,23,21,22,22,20,19,19,20,20,20,20,20,18,17,17,18,18,16,16,15,17,17,17,16,19,19,18,19,19,18,17,19,19,20,19,20,19,19,18,18,17,16,16,16,15,14,14,14,15,12,14,14,13,13,13,15,14,13,13,14,13,12,13,13,13,11,12,13,12,11,12,11,11,10,11,10,11,11,11,12,13,12,12,10,11,10,9,8,8,8,9,8,8,7,8,7,7,7,6,7,7,7,6,7,9,7,8,8,7,7,8,9,8,9,10,11,12,12,12,11,12,13,12,12,13,12,13,12,12,14,14,14,13,16,15,15,15,13,14,14,14,14,13,15,13,14,14,15,13,14,13,14,13,13,12,13,13,12,11,11,11,9,10,9,10,9,9,8,8,8,8,6,6,3,4,5,7,6,3,3,3,4,4,1,0,1,3,3,5,7,6,5,6,7,7,7,8,9,8,9,8,7,8,7,8,10,10,10,11,12,12,13,12,11,14,13,12,13,14,14,14,13,14,16,15,15,15,14,13,13,14,14,15,14,13,13,13,13,13,12,13,13,11,11,11,11,11,12,12,12,12,12,13,13,13,14,14,13,14,14,15,15,16,15,14,14,16,14,14,14,14,12,13,13,13,14,14,13,13,14,16,13,13,14,15,15,16,17,16,16,16,15,14,16,16,15,17,16,18,16,17,15,16,17,16,16,17,17,16,16,18,16,17,17,16,15,17,18,18,16,16,18,16,16,17,18,18,19,20,21,23,23,22,23,24,24,26,26,26,28,26,27,28,28,27,28,28,28,28,29,28,29,29,29,28,28,28,30,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,28,29,28],[29,29,28,29,29,29,29,28,29,28,28,27,28,28,28,28,28,28,27,28,28,27,27,28,27,27,28,27,27,28,25,27,28,29,27,28,26,27,27,26,27,26,25,25,26,24,21,23,24,20,22,22,22,20,20,23,19,20,21,20,18,16,15,13,13,12,11,10,11,11,12,12,12,11,10,9,9,7,7,8,8,7,7,7,8,7,9,6,7,7,7,7,7,6,7,8,7,6,9,9,9,10,10,9,10,10,10,10,10,10,10,9,8,8,9,9,10,11,11,12,11,10,12,12,11,12,12,11,12,12,12,12,12,11,12,12,12,12,11,11,10,11,11,10,10,10,9,9,9,7,8,8,7,6,7,5,6,7,5,6,6,6,8,7,5,6,8,7,8,9,9,9,10,10,11,11,12,12,12,12,12,12,12,11,12,12,11,12,13,12,11,13,13,13,12,13,13,13,13,14,13,13,14,12,12,12,11,11,11,10,11,11,11,10,10,11,10,9,10,10,9,9,10,10,8,10,10,9,8,10,11,10,10,11,11,12,11,12,11,12,11,12,13,13,13,13,13,13,13,14,12,13,14,14,14,14,15,15,14,15,14,14,13,14,13,13,13,13,14,13,13,12,13,13,13,14,13,13,12,11,11,11,11,10,9,11,12,10,11,11,13,12,12,13,13,13,12,13,14,13,13,14,14,14,15,14,16,16,16,17,18,19,18,19,19,18,20,19,18,18,16,17,15,14,14,15,15,15,15,14,14,15,15,14,16,16,15,16,17,17,19,18,18,21,20,20,22,22,21,23,25,24,24,24,26,26,27,25,26,26,25,26,24,24,26,26,26,26,26,26,28,27,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,27,27,27,27,27,27,27,27,26,27,25,24,25,25,22,22,23,21,21,21,20,19,18,18,19,16,16,16,16,16,16,17,18,16,20,20,21,19,20,20,21,19,20,21,20,20,21,22,21,21,21,22,22,22,21,22,21,21,21,22,21,21,21,21,22,22,23,22,21,22,21,19,20,22,20,20,20,21,19,19,19,20,20,21,20,19,20,21,20,21,21,20,20,20,19,20,19,19,20,20,20,20,21,20,19,19,17,19,19,18,18,16,16,17,18,15,17,16,18,16,17,16,16,17,15,15,16,15,15,14,13,13,12,14,12,12,13,12,11,11,12,11,12,12,12,13,14,12,12,11,12,12,12,11,9,10,9,10,10,10,7,8,7,7,6,6,7,7,6,7,8,7,8,9,8,8,8,10,9,10,12,12,11,11,13,12,13,13,14,14,14,14,15,14,16,16,16,17,17,19,19,18,18,18,17,16,17,17,17,17,15,16,15,16,14,14,16,15,13,13,14,13,13,13,11,13,12,11,11,10,9,9,10,7,9,6,7,7,8,3,5,5,5,5,5,4,4,4,3,2,1,0,1,2,4,7,7,5,6,8,8,9,9,9,9,9,8,8,9,8,9,10,10,10,12,13,13,12,13,13,16,15,14,16,16,16,16,16,16,18,17,17,19,17,16,16,16,16,16,15,15,15,15,14,14,14,14,13,13,13,12,13,13,13,14,13,14,14,14,15,15,14,16,16,16,17,17,17,17,18,17,16,17,17,16,17,15,15,15,15,16,16,17,15,16,17,17,16,15,16,16,16,18,18,18,17,17,18,16,18,16,17,18,18,19,18,18,17,17,18,18,18,18,18,18,18,19,19,19,18,19,20,18,19,20,20,18,18,18,19,18,19,18,20,21,23,21,22,22,22,22,24,24,25,24,26,25,26,25,26,25,24,26,26,26,27,26,27,27,27,26,27,26,28,28,26,28,27,27,27,27,27,27,27,26,27,28,27,27,27,26,26,25,27],[29,29,29,29,29,29,29,28,29,27,28,27,28,27,27,27,27,28,26,28,28,26,27,28,26,26,27,26,27,27,24,27,28,28,25,27,26,26,27,26,27,25,25,24,25,23,21,23,23,20,21,21,21,20,20,21,19,19,19,19,18,16,14,13,13,13,11,12,10,12,12,12,13,12,12,10,10,9,9,9,9,9,9,8,8,8,7,6,7,8,7,8,8,7,7,9,9,7,9,10,10,11,11,13,12,10,11,12,12,11,11,11,9,11,9,10,11,12,12,13,13,12,13,13,12,14,14,13,13,13,14,13,13,13,13,13,13,14,13,12,13,13,11,12,12,12,10,12,11,10,11,11,11,10,9,7,6,8,8,6,7,7,8,8,8,9,9,9,11,11,11,11,12,12,12,13,13,14,14,14,13,13,13,13,13,13,14,13,14,13,14,13,14,14,13,13,14,13,12,13,13,12,13,14,11,12,11,11,10,10,10,11,12,11,12,12,11,11,12,13,11,11,12,12,11,12,12,12,11,13,12,13,11,13,12,14,13,13,13,14,14,14,14,14,16,15,15,14,16,15,16,15,16,14,15,15,15,14,14,15,16,14,15,15,14,14,13,14,14,14,13,13,13,13,13,14,13,13,12,11,11,10,12,9,10,11,13,12,12,12,14,13,13,14,14,15,15,15,15,16,15,15,16,16,17,16,19,18,17,19,20,20,18,20,19,19,21,19,18,18,17,17,16,16,15,14,15,16,15,13,15,14,16,14,15,15,15,15,17,16,17,17,19,19,18,20,22,21,21,23,25,24,25,25,26,26,27,26,28,26,26,27,26,25,26,26,26,26,26,27,28,28,29,28,29,29,29,29,29,29,28,29,29,28,28,28,28,28,28,28,28,27,28,27,27,26,27,27,26,27,27,26,26,25,24,25,25,22,23,22,21,22,21,20,20,19,19,20,17,17,17,17,17,19,17,18,20,20,22,22,21,22,22,23,21,21,23,23,21,22,25,23,22,23,24,25,23,23,22,22,22,24,23,23,24,24,24,25,24,24,22,22,24,22,21,22,23,22,21,23,21,20,20,20,22,22,22,21,21,20,21,22,22,21,21,22,22,21,22,20,21,21,21,21,21,21,21,21,21,18,21,18,19,18,16,18,18,18,16,17,18,18,16,16,15,14,15,13,13,15,15,14,13,14,13,11,12,12,11,11,10,10,9,12,11,11,11,12,12,13,12,12,10,12,10,11,10,8,9,8,11,9,8,8,7,6,5,4,6,6,5,5,6,6,5,6,8,7,8,8,9,9,10,11,13,12,12,12,13,16,13,14,15,15,15,15,15,16,16,16,17,17,17,19,19,18,19,17,16,17,17,15,14,15,15,14,15,13,15,15,13,12,13,13,12,12,12,11,11,11,10,10,9,10,10,9,9,7,6,5,4,5,5,4,5,6,7,5,4,5,6,3,3,2,1,0,1,2,3,4,4,3,5,7,7,8,8,9,9,9,9,11,10,9,12,12,11,13,13,12,14,14,14,16,15,14,16,16,15,16,17,15,17,16,17,18,18,16,17,16,16,14,14,15,15,13,13,14,13,13,13,12,12,12,12,14,12,14,14,14,14,16,15,15,15,17,16,16,16,16,17,17,17,16,16,18,16,17,17,16,16,14,15,15,15,18,16,15,18,18,15,17,17,18,17,20,19,20,20,19,20,18,18,19,18,20,18,19,18,18,17,19,19,17,18,19,20,18,18,20,20,20,19,19,21,18,20,20,19,18,19,19,20,18,19,18,19,21,23,23,23,23,23,23,24,26,25,25,27,26,27,26,27,26,26,27,27,27,28,27,27,27,28,27,28,27,28,29,28,29,28,28,28,29,28,28,29,28,29,28,28,28,29,27,26,27,28],[29,30,29,30,30,30,30,30,30,29,29,29,29,28,29,29,29,29,29,29,28,27,28,28,27,28,28,28,28,28,27,28,28,28,27,28,27,27,27,27,27,26,26,25,26,24,23,24,24,22,23,23,22,21,21,22,20,21,20,20,18,16,14,13,12,11,10,10,11,10,12,11,12,11,10,10,8,8,9,9,9,9,7,8,8,7,6,6,6,6,5,6,8,6,7,8,8,8,8,10,10,9,10,11,11,10,11,12,11,11,10,10,9,11,10,10,11,12,12,13,11,11,13,12,12,13,13,13,12,12,14,12,13,13,12,14,12,13,12,12,11,12,11,12,12,9,10,12,9,9,11,11,8,9,9,8,7,8,8,8,8,8,8,8,8,8,9,9,11,11,11,11,13,11,12,13,12,14,13,13,14,13,13,13,14,13,14,14,14,13,14,13,13,14,13,14,13,13,13,13,13,12,13,12,11,11,9,10,9,8,10,10,9,10,12,11,9,10,12,11,10,12,12,11,10,12,12,12,12,11,11,12,11,12,12,13,12,12,14,14,12,14,15,13,13,14,15,14,13,15,15,13,14,14,14,13,14,15,14,15,13,13,13,13,12,14,13,12,13,13,12,13,13,13,13,12,13,12,11,10,11,9,10,7,8,12,11,10,12,12,13,12,13,13,13,14,12,12,12,14,13,14,14,13,14,16,15,14,15,16,15,16,17,17,17,17,16,16,17,16,15,16,15,14,15,14,15,15,14,14,14,14,16,14,13,15,16,16,18,17,19,18,19,20,20,19,21,21,21,22,24,24,24,25,26,26,26,25,27,26,27,28,25,24,27,27,27,27,27,28,29,28,28,28,29,29,29,29,29,29,29,29,29,29,28,29,29,29,29,28,29,29,29,28,28,28,27,28,28,28,29,28,28,27,25,27,26,24,25,24,23,23,23,23,22,20,19,20,17,16,16,15,16,15,16,15,15,17,17,19,18,18,19,20,19,19,21,20,20,21,23,20,21,23,23,23,22,22,22,22,21,22,21,21,22,22,22,23,22,21,21,19,22,20,19,18,19,19,20,18,19,19,16,17,17,19,16,15,16,17,18,16,18,20,19,18,19,20,19,18,19,20,19,20,19,21,19,20,19,18,18,17,17,16,15,15,15,17,14,14,15,16,15,14,16,15,14,14,14,14,13,14,14,13,12,11,11,12,11,10,10,9,9,9,9,9,10,10,11,12,11,12,10,10,9,9,8,8,8,8,10,9,8,7,8,7,6,4,5,7,6,4,7,6,6,6,6,7,6,8,7,9,9,10,10,9,11,13,11,13,13,13,13,14,13,13,13,13,14,14,14,14,15,15,15,15,14,15,15,15,15,14,14,15,14,15,15,13,15,14,13,13,14,12,12,10,11,10,9,9,10,9,9,9,8,8,8,7,7,7,4,7,4,4,7,7,8,6,5,6,7,6,4,4,3,1,0,1,3,4,4,4,6,7,7,8,9,8,8,8,8,8,7,8,9,9,10,10,12,13,13,13,12,15,13,13,13,14,15,13,13,13,15,14,14,15,14,14,14,13,14,14,13,14,13,12,13,13,12,11,13,11,10,10,11,10,12,12,12,12,12,14,14,13,14,14,14,14,15,14,14,15,14,14,14,15,14,15,14,13,13,13,12,13,14,14,14,14,15,14,14,14,14,14,13,15,16,16,15,16,16,14,15,15,15,16,17,17,16,16,15,16,16,15,16,17,16,17,16,17,16,17,17,17,18,18,18,17,16,17,18,17,16,18,19,18,19,20,21,22,24,22,23,23,24,26,26,25,28,27,27,27,27,27,28,29,28,28,28,27,29,29,29,29,29,28,29,29,29,29,29,29,29,29,28,29,29,29,29,29,28,29,29,28,28,28,28],[29,29,28,29,29,30,29,29,29,28,28,28,28,28,28,27,28,28,27,27,27,26,26,27,26,27,27,26,27,27,25,27,28,28,26,27,26,26,26,25,27,25,25,25,25,24,23,24,23,22,22,22,21,21,21,21,19,20,20,18,17,15,13,11,12,11,10,9,10,11,10,12,11,10,11,9,9,9,8,7,8,8,7,7,7,8,7,6,5,6,6,6,7,6,6,9,8,7,8,8,10,9,9,10,11,9,10,11,11,10,10,9,9,10,10,10,10,11,11,12,11,12,12,12,11,13,13,11,11,11,13,11,12,12,11,13,11,11,11,10,10,11,10,10,11,10,9,10,10,9,9,10,9,9,8,7,7,7,7,7,8,7,8,8,8,10,9,9,11,11,10,12,13,11,11,12,12,12,11,12,11,13,11,11,13,12,11,11,12,11,12,12,12,12,11,12,11,12,12,12,12,10,11,11,10,10,9,9,9,9,9,10,9,8,10,10,9,9,10,11,10,10,10,13,10,10,11,11,11,10,11,12,10,12,11,12,12,11,12,12,12,12,13,13,14,13,13,13,14,14,12,13,14,12,12,13,14,13,13,13,13,13,14,13,12,13,13,12,14,12,11,11,13,12,12,13,12,11,11,10,10,10,10,9,9,10,12,11,11,11,12,12,12,12,12,13,13,13,13,14,13,13,13,15,15,14,17,16,16,16,18,18,17,18,18,17,19,18,18,19,17,16,15,14,14,13,14,14,14,13,12,14,13,13,14,14,14,14,17,15,16,17,18,18,17,18,20,19,19,22,23,21,24,24,25,25,27,26,26,27,26,27,26,25,27,26,27,28,27,27,28,28,29,28,29,28,29,28,28,28,28,28,28,28,28,28,29,28,29,28,29,28,28,28,28,27,27,28,28,28,28,27,27,26,25,26,26,23,24,23,22,22,21,20,19,18,19,18,18,16,17,15,17,18,17,18,18,19,21,19,20,20,20,20,20,21,22,20,20,20,21,21,20,23,23,21,22,22,22,20,21,21,22,21,22,22,21,21,22,22,21,20,20,19,20,20,21,21,20,21,20,18,19,18,21,19,21,18,19,18,17,20,18,18,20,19,19,19,19,18,18,20,19,20,19,19,19,18,19,17,19,17,17,17,15,15,15,16,14,16,15,16,15,16,14,14,14,13,13,13,13,11,12,12,11,10,12,10,11,10,9,9,8,9,9,9,11,10,11,12,11,10,10,10,11,9,9,7,8,8,8,8,7,7,6,6,6,3,6,6,5,5,6,5,5,6,8,6,6,8,8,7,9,10,10,10,11,12,12,12,11,12,12,13,14,13,13,15,15,15,16,15,16,17,16,17,18,15,15,16,15,14,15,13,14,14,13,12,14,12,11,11,11,10,10,11,11,9,10,9,9,9,9,9,9,8,6,5,5,5,4,5,4,4,5,6,6,5,5,6,6,5,4,5,3,2,1,0,1,3,2,3,3,4,6,7,7,7,7,7,7,9,9,8,9,10,11,11,10,10,11,11,12,14,13,13,13,14,14,14,14,15,16,13,16,16,15,14,14,13,13,13,12,13,12,11,11,12,11,11,11,10,10,10,11,12,11,12,11,13,12,14,13,13,13,14,13,14,15,16,14,15,16,13,15,15,15,14,16,14,12,13,14,13,14,15,13,13,16,15,14,14,17,16,16,18,17,18,17,16,17,14,16,16,16,17,15,17,16,16,14,15,16,17,16,16,17,16,15,17,18,18,16,18,19,16,17,19,19,16,17,17,19,17,17,17,18,20,22,21,21,21,21,22,21,23,24,23,26,24,26,24,26,25,26,27,25,26,27,26,27,27,27,26,27,26,27,27,26,28,27,27,27,27,27,28,27,27,28,27,27,27,27,27,26,26,27],[29,30,29,30,29,30,30,30,29,29,28,28,29,28,28,28,29,28,28,29,28,27,29,29,27,28,29,27,28,28,26,28,28,28,27,28,26,27,27,26,27,25,25,25,25,24,24,24,23,21,22,22,21,20,21,22,22,21,20,21,18,15,13,12,10,10,10,9,10,8,11,10,11,10,10,8,9,9,8,8,9,8,7,7,8,8,6,6,6,7,7,7,7,7,8,8,9,9,8,9,10,10,11,12,12,11,12,14,12,11,10,11,10,11,10,10,12,12,13,12,13,12,13,13,12,14,12,13,12,12,12,13,13,11,12,13,12,12,11,11,12,11,11,12,11,10,10,11,10,9,10,10,10,10,8,8,8,8,9,8,9,8,9,9,10,9,9,10,12,12,11,12,14,13,12,13,12,12,13,13,13,14,11,12,13,12,12,12,12,11,13,12,13,13,13,13,13,12,12,12,12,11,12,12,11,10,10,9,9,7,9,10,10,9,10,11,10,10,11,11,10,11,11,11,10,11,11,11,11,11,11,12,11,12,11,12,13,12,12,12,13,13,12,14,14,13,12,14,13,13,13,13,12,12,12,13,13,13,13,13,13,14,13,12,13,13,12,12,14,13,11,13,14,12,12,14,12,12,11,11,11,10,13,9,9,12,12,10,11,11,13,13,12,12,13,13,12,12,13,15,13,12,13,14,14,13,15,14,14,15,17,18,15,16,17,17,18,16,16,15,15,14,14,13,13,13,13,12,12,12,13,12,12,12,13,15,14,15,16,18,15,18,18,18,17,18,19,19,19,22,23,21,24,24,25,26,27,25,27,26,25,26,26,24,26,26,26,27,26,26,28,28,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,27,27,27,27,27,27,27,26,27,25,24,26,24,22,23,22,22,22,20,21,19,17,18,17,17,16,14,15,15,15,15,15,15,16,18,18,17,18,18,19,18,19,20,19,18,18,20,19,20,22,22,22,21,21,20,20,20,21,20,20,21,21,22,22,22,22,20,20,21,19,19,18,19,18,18,18,17,17,16,18,17,18,17,16,16,17,17,18,17,18,18,17,17,18,19,17,18,19,19,19,19,20,20,19,19,17,17,16,16,15,15,15,14,14,14,14,15,15,13,13,13,13,14,13,13,13,13,12,13,13,11,11,11,10,11,10,10,9,9,9,9,9,11,10,11,12,11,12,10,10,8,10,8,8,7,7,8,8,7,7,5,5,4,4,5,6,3,4,6,5,4,6,6,6,7,7,7,7,7,9,10,10,11,12,11,14,12,12,13,13,13,13,13,13,13,14,14,14,15,15,15,15,14,14,14,14,14,13,13,12,13,14,14,13,13,12,12,13,12,11,12,11,11,10,11,8,8,8,9,8,7,7,7,5,5,4,4,5,4,5,5,7,7,7,6,7,7,6,5,4,4,3,2,1,0,1,1,1,2,3,4,5,6,7,6,6,6,8,7,7,9,9,9,10,11,12,11,11,12,14,13,12,12,12,13,12,12,12,14,13,14,14,13,14,12,13,14,14,13,13,12,12,11,12,12,10,10,10,9,9,9,10,10,11,10,11,12,13,13,12,12,12,13,13,13,13,13,14,14,14,14,14,13,15,13,12,12,13,13,12,13,14,13,13,14,13,13,13,15,14,13,15,15,15,15,14,15,14,14,14,15,16,16,16,15,16,15,14,14,15,15,16,16,14,13,15,15,17,16,16,17,15,16,17,16,16,17,16,17,17,18,17,18,19,22,21,22,21,23,23,23,24,25,24,26,25,28,26,26,25,27,27,27,27,28,28,28,28,28,27,27,27,28,28,28,29,28,28,28,29,28,28,28,28,28,28,27,28,27,28,28,27,27],[29,29,28,29,29,29,29,28,29,28,27,28,28,27,28,28,28,28,28,28,27,26,27,28,25,27,28,26,28,27,25,27,28,28,27,28,26,27,27,26,27,25,25,25,26,24,22,23,23,22,22,22,21,20,21,22,19,19,21,21,18,16,13,12,11,10,10,10,9,10,11,12,14,12,12,9,9,11,9,8,10,9,8,8,10,9,7,6,7,9,8,8,10,10,9,10,12,12,11,12,12,12,12,13,12,12,13,16,13,13,13,13,12,12,12,13,13,14,15,16,16,14,15,16,13,14,15,15,13,15,14,14,15,14,15,15,14,14,13,12,14,13,13,14,14,13,12,13,13,13,12,13,13,12,11,11,10,10,10,10,10,10,11,10,12,11,11,12,13,13,12,14,16,13,13,14,14,15,15,15,14,15,13,14,14,15,14,14,14,14,13,14,15,13,13,14,14,13,13,13,11,12,13,12,11,11,10,11,9,10,11,12,13,11,12,13,12,12,13,14,11,13,13,13,12,12,14,13,12,13,12,12,12,13,14,14,14,13,15,15,13,14,15,16,15,15,15,15,15,16,15,15,16,15,15,15,15,15,15,16,16,15,15,15,15,15,14,15,15,15,13,14,15,14,13,13,13,13,12,13,12,11,12,9,11,13,14,12,13,14,13,13,14,14,15,14,15,15,14,14,14,14,14,16,15,14,18,17,17,18,19,19,19,20,20,19,20,19,18,18,16,16,15,14,14,13,14,13,13,14,14,13,12,13,13,14,14,15,16,17,17,18,19,19,19,19,21,20,19,22,24,21,23,25,25,25,27,25,27,27,26,27,26,24,26,26,26,26,27,26,28,28,29,27,28,28,28,28,28,28,28,28,28,28,27,28,28,28,27,27,28,28,28,28,27,27,27,28,27,27,27,27,28,26,25,26,25,22,22,21,21,22,20,21,20,18,18,17,17,18,18,15,15,17,17,18,18,19,20,20,19,19,19,21,19,20,21,21,19,20,22,22,21,22,23,22,22,22,22,20,21,22,21,22,23,22,23,23,21,23,22,21,21,18,19,18,21,21,18,19,20,19,17,19,20,20,20,20,19,21,20,21,21,21,21,21,21,21,21,19,21,21,21,20,20,21,20,21,21,19,22,19,19,18,17,17,18,18,17,18,19,18,16,17,16,16,16,14,15,14,15,15,14,14,14,12,13,13,14,11,11,11,9,9,11,10,12,11,12,12,11,12,10,11,10,11,11,9,9,8,9,9,9,7,6,5,6,5,4,5,6,5,6,6,6,6,8,9,7,8,9,8,9,11,11,11,13,14,14,13,14,15,14,14,15,15,15,15,16,17,17,17,18,19,18,18,18,18,17,16,16,16,15,14,15,15,15,14,15,14,14,13,12,13,12,12,12,11,11,10,10,9,9,9,8,7,7,5,6,5,4,6,6,5,6,8,9,7,7,9,9,8,8,7,6,4,3,2,1,0,1,1,2,3,4,5,6,7,7,7,8,9,8,8,9,11,10,10,12,12,14,13,13,15,15,14,14,15,15,15,16,16,15,15,16,16,17,15,14,15,14,14,14,14,14,14,12,14,14,11,12,13,10,9,10,10,13,13,12,14,13,15,14,14,14,16,15,16,15,16,15,16,16,15,15,16,17,15,15,16,14,14,16,16,14,15,15,15,16,16,15,15,16,15,15,17,17,17,17,17,17,15,16,16,16,17,16,18,16,17,15,16,17,17,17,18,18,18,17,19,20,19,18,20,20,18,19,21,18,18,20,19,20,18,19,18,18,21,21,22,22,23,23,24,24,25,25,26,27,26,27,26,27,26,26,27,26,27,28,26,28,27,28,27,28,27,28,28,27,29,28,28,28,28,28,28,28,27,28,28,27,28,28,26,27,28,27],[30,30,29,30,29,30,30,29,29,29,29,28,29,28,28,28,29,29,28,29,28,28,28,29,27,28,28,27,28,28,26,28,28,28,27,28,27,27,27,27,27,26,26,26,26,25,24,24,24,21,23,23,22,20,21,23,20,20,21,21,20,17,14,13,12,11,10,10,9,10,10,11,12,11,9,9,7,9,7,7,10,7,6,7,8,6,6,6,7,7,7,8,8,7,8,10,9,9,9,11,13,10,13,14,14,13,14,15,14,13,13,13,11,14,12,13,14,14,14,14,15,13,14,15,14,14,14,15,14,13,15,14,13,13,14,14,14,14,13,13,12,13,13,13,12,11,12,12,11,10,13,12,11,11,10,9,10,10,9,8,8,8,10,10,9,10,11,12,12,12,13,13,14,14,14,13,13,15,14,14,13,12,13,14,13,13,13,14,13,13,13,12,13,14,13,13,14,13,13,13,13,12,13,13,12,12,11,11,10,10,10,11,11,10,11,12,12,10,11,13,12,12,12,13,11,12,13,11,11,13,13,12,12,12,13,14,14,14,14,15,14,13,15,15,13,14,14,14,13,15,14,12,14,15,15,14,15,14,14,14,13,12,12,14,14,12,13,13,13,12,12,13,13,12,12,14,13,11,13,12,11,10,13,10,10,11,14,11,11,12,14,11,12,13,13,14,12,13,14,14,13,14,14,13,15,15,16,15,16,17,19,19,17,18,18,18,18,19,17,17,16,16,15,14,13,14,15,14,13,14,14,12,13,14,14,16,16,16,17,18,17,18,18,19,18,18,21,21,20,21,24,24,24,24,27,26,27,25,27,26,25,27,25,25,27,27,27,26,26,27,28,28,29,28,29,29,28,28,29,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,27,27,28,27,28,28,27,28,26,25,27,26,23,24,22,23,23,21,21,21,18,19,18,17,16,16,14,16,16,16,17,17,18,19,19,18,19,19,20,19,20,21,20,19,21,22,20,22,23,23,22,22,22,22,21,20,21,20,21,21,23,22,23,22,23,22,21,21,20,19,19,21,20,19,19,19,18,17,18,20,19,19,18,17,18,19,20,20,20,20,19,18,19,20,19,20,20,20,21,20,21,20,19,19,18,19,18,18,16,16,15,16,16,14,16,16,16,13,16,15,14,15,15,14,13,13,13,12,11,12,12,11,12,12,12,9,10,9,10,11,11,12,11,13,13,11,11,10,10,11,11,10,8,8,9,8,9,8,8,7,6,6,5,5,6,5,6,6,7,5,5,8,7,6,7,7,8,8,9,10,11,10,13,13,11,11,13,13,12,13,14,13,14,14,15,15,15,17,17,17,16,16,16,16,15,14,15,14,12,15,14,13,13,11,12,13,11,11,12,13,12,12,11,11,10,9,9,9,8,7,7,7,5,6,6,4,5,4,5,5,6,8,6,6,7,7,6,6,6,5,4,3,2,2,1,0,1,2,3,4,5,6,6,7,7,7,7,7,7,9,10,9,10,11,11,11,12,12,12,13,12,13,14,15,14,14,15,16,15,16,16,16,15,13,15,15,14,13,12,13,13,11,12,12,12,11,11,10,9,10,9,11,12,13,12,12,12,12,13,13,13,14,15,15,15,15,16,16,15,15,15,15,15,16,14,14,13,14,14,14,16,14,13,15,15,14,14,15,15,15,17,17,16,16,15,17,15,15,16,15,17,17,16,16,17,16,17,16,17,18,17,17,16,17,18,19,19,17,18,18,17,18,20,17,18,19,18,18,18,18,18,20,20,23,21,22,22,23,24,25,26,26,25,28,27,27,27,28,27,28,28,28,28,29,27,28,28,29,28,29,27,29,29,28,30,29,29,29,29,29,29,29,29,29,29,28,28,28,27,28,28,28],[30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,29,28,29,28,27,29,29,27,29,29,27,29,28,27,28,29,29,28,28,27,28,28,27,28,27,26,26,26,26,25,25,25,24,23,24,24,23,22,24,23,22,21,22,19,17,15,13,11,11,11,9,9,9,11,11,12,12,11,8,8,9,8,8,9,8,6,7,9,7,6,5,6,6,6,7,8,8,8,9,11,9,10,12,13,11,13,14,14,13,14,15,14,14,12,13,11,14,12,12,13,13,14,14,14,13,14,14,14,15,14,15,15,13,14,14,15,13,14,14,14,15,13,13,14,14,13,13,14,12,12,13,12,11,12,13,12,12,10,10,9,10,11,9,11,8,11,10,11,11,11,10,13,13,13,12,15,14,14,15,14,15,14,15,14,14,14,14,16,14,15,16,15,14,16,14,15,15,15,15,14,15,13,14,14,13,13,13,11,11,9,11,9,9,9,11,10,10,13,13,10,12,13,13,12,13,13,14,13,13,14,13,12,13,13,12,12,13,13,14,14,13,14,15,14,14,15,15,14,15,15,16,14,15,16,15,14,14,15,14,15,15,14,15,14,15,14,14,15,14,14,14,15,13,13,14,14,13,12,14,13,12,11,12,11,10,12,9,10,13,12,11,12,14,15,13,13,14,14,15,13,13,14,16,14,14,15,14,15,16,16,15,16,17,17,18,16,17,16,16,17,16,16,17,15,16,15,14,13,14,14,14,13,13,14,13,13,12,14,16,15,16,17,18,18,19,18,21,19,20,21,21,21,23,23,24,25,25,26,26,27,26,28,26,26,27,25,24,27,27,26,27,27,27,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,28,27,28,26,25,26,25,23,24,23,23,22,21,22,22,18,19,18,17,15,15,15,17,16,16,15,16,17,18,17,18,18,18,19,19,19,20,19,18,19,22,20,20,21,23,23,22,21,21,21,19,21,19,20,22,21,22,23,22,21,20,19,20,19,17,18,19,18,17,18,17,16,16,16,18,17,18,17,16,17,18,19,17,17,18,19,18,18,17,18,18,19,18,20,19,19,19,19,19,17,18,17,17,17,17,15,17,17,16,15,16,17,15,15,16,15,15,14,14,14,13,14,15,13,13,13,12,12,12,10,8,8,9,9,8,9,11,10,11,11,12,12,10,9,9,10,8,8,7,7,8,8,8,7,7,7,6,3,7,7,4,6,9,7,6,6,6,7,5,7,9,7,9,10,9,9,10,13,11,12,13,14,14,14,13,13,14,15,14,15,15,15,17,17,16,16,15,16,16,15,14,16,15,15,13,15,15,13,14,13,12,12,13,12,11,10,10,10,9,9,9,8,8,7,8,6,6,4,6,4,3,4,4,4,5,7,9,8,6,7,8,7,6,5,6,5,5,3,4,2,1,0,1,2,4,5,6,6,7,6,5,7,7,7,8,9,9,10,11,12,12,12,12,14,14,13,13,15,14,14,14,15,16,16,15,16,17,15,14,14,15,14,12,12,12,12,11,12,11,11,11,11,10,9,9,10,12,12,12,12,12,13,13,12,12,14,15,13,15,13,15,16,15,14,16,15,15,14,14,13,13,13,12,13,13,15,13,14,14,14,13,14,14,15,15,17,16,15,15,15,16,15,15,15,15,16,17,17,15,17,16,17,16,15,16,15,16,16,16,16,17,17,16,17,17,18,18,18,17,17,18,17,17,18,18,18,18,19,21,21,23,21,23,24,25,26,27,25,28,27,27,28,28,28,28,29,28,28,29,28,29,29,29,29,29,29,30,29,29,30,29,29,29,28,29,29,29,29,29,29,29,29,29,28,28,28,28],[30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,30,29,29,30,29,28,29,29,27,29,29,28,29,29,27,29,29,29,28,29,27,28,28,28,28,27,26,27,27,25,23,24,24,23,21,22,22,21,21,22,22,21,21,22,20,17,15,14,12,11,11,10,10,12,13,14,16,16,13,12,11,13,11,10,13,12,10,9,12,10,9,8,8,10,9,9,10,12,10,11,14,13,11,15,16,13,15,17,16,14,18,19,17,17,15,16,14,16,16,15,17,17,19,18,19,16,19,18,16,18,18,19,17,18,18,18,17,17,17,18,17,17,15,16,17,15,15,16,16,15,15,16,16,14,15,17,15,16,13,14,12,12,15,11,13,14,13,14,15,16,16,14,17,17,15,16,19,17,16,17,17,18,17,19,17,17,17,17,17,18,17,16,17,17,17,16,17,18,16,17,17,16,16,17,15,15,16,15,13,14,13,13,11,12,12,13,13,11,14,16,15,16,15,16,14,15,15,17,17,16,16,17,16,16,16,17,16,17,16,17,17,15,17,17,17,18,19,19,18,19,18,19,18,20,19,18,19,18,19,18,18,17,17,19,19,18,18,18,17,17,17,17,17,17,17,16,17,16,16,17,17,15,15,14,15,13,14,14,13,16,15,16,16,17,19,17,17,18,19,19,18,18,19,20,18,18,18,19,19,18,20,19,20,20,21,22,20,21,21,20,22,21,20,20,19,19,19,17,16,17,17,16,16,15,16,13,14,15,14,16,17,17,16,19,18,19,20,21,19,21,23,22,21,23,25,23,24,26,26,27,28,26,28,27,27,28,26,25,27,28,27,27,28,28,29,28,29,28,29,29,29,28,29,29,29,29,29,29,28,29,29,29,29,28,29,29,29,29,28,28,28,29,28,28,28,27,28,26,25,26,25,24,23,23,22,23,21,21,22,19,20,20,18,18,18,16,18,19,19,20,19,20,22,21,21,22,21,21,21,21,21,22,21,20,22,22,21,23,23,23,23,22,22,22,23,22,22,22,24,22,23,25,22,24,23,22,22,21,20,20,21,21,20,21,20,20,20,19,23,22,22,22,21,23,22,23,22,22,23,23,23,22,22,21,22,22,21,21,21,21,22,22,22,20,23,21,22,22,21,20,22,21,18,20,21,21,17,20,20,18,19,19,18,18,17,18,17,17,18,16,15,13,13,13,13,13,12,13,13,13,15,12,13,16,14,15,13,13,11,12,12,10,10,9,10,9,10,9,8,7,7,5,7,8,5,6,8,9,7,8,10,9,9,11,10,10,11,13,12,13,14,15,15,17,17,18,18,19,17,18,18,19,18,19,21,20,20,22,21,20,20,21,20,19,19,19,18,18,18,18,19,18,18,18,17,15,15,16,13,14,12,12,13,11,11,10,8,9,9,7,8,5,7,7,6,7,6,6,7,9,12,9,8,12,12,10,8,6,7,5,4,3,3,4,2,1,0,2,3,5,6,7,8,8,8,11,11,9,10,14,13,14,13,14,13,15,16,18,18,18,16,18,19,18,20,19,20,19,19,20,20,18,17,19,19,17,18,18,18,16,14,17,15,12,13,14,10,12,11,14,15,15,15,14,16,17,15,17,16,18,19,17,18,20,19,18,20,18,19,19,19,20,17,16,17,16,17,16,17,18,17,17,18,18,17,17,18,18,19,20,18,19,19,18,20,17,18,19,19,20,20,21,19,20,18,21,19,19,20,21,22,21,20,20,22,21,20,20,22,21,21,22,21,20,21,21,22,21,20,20,20,21,23,23,23,23,24,25,26,26,27,26,28,28,28,27,27,28,28,29,29,28,29,29,29,29,29,28,30,28,29,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28],[30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,29,29,29,29,28,29,29,28,28,29,28,29,28,27,29,29,29,28,29,27,28,28,27,28,26,26,26,27,26,25,24,25,24,23,24,23,23,22,23,22,22,21,22,21,18,16,16,13,14,13,11,10,10,14,15,17,18,16,11,11,15,12,12,15,13,12,11,15,12,12,11,11,14,11,14,16,15,16,17,18,17,18,19,20,20,22,22,22,21,22,22,22,21,20,22,19,20,19,21,21,21,22,23,23,21,23,23,22,22,24,23,20,23,22,23,21,21,22,21,23,22,21,22,22,20,21,22,21,20,20,20,19,18,21,21,18,19,18,17,17,18,19,16,15,12,16,18,16,17,19,20,20,20,21,20,21,21,21,20,21,22,22,23,21,21,22,22,20,22,22,22,20,20,21,20,22,21,21,21,21,20,20,21,20,19,20,19,19,18,16,17,15,16,17,18,20,17,20,19,20,19,19,20,18,20,20,19,19,20,21,18,18,21,20,19,20,19,20,21,20,20,22,22,20,22,22,23,21,23,23,22,22,23,23,21,23,22,22,21,22,22,22,23,22,21,21,22,21,20,21,21,20,20,19,21,19,20,18,21,19,20,20,18,19,18,19,16,18,19,20,16,19,19,20,19,20,21,19,21,20,20,21,20,21,20,21,22,21,22,23,23,23,23,25,26,24,25,25,24,25,24,23,23,22,22,21,19,19,19,20,19,18,19,20,15,16,18,16,16,18,19,17,21,20,20,20,22,21,22,22,23,22,24,26,25,25,26,28,27,28,26,28,27,26,28,26,26,28,28,28,28,28,28,30,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,28,28,28,27,25,27,26,24,25,24,23,24,22,23,23,20,22,20,20,20,21,19,21,21,23,23,23,24,26,24,24,25,24,24,25,25,25,25,23,24,26,26,24,25,26,26,27,26,26,25,26,26,25,25,26,25,26,26,25,25,26,24,24,25,24,24,25,24,24,24,25,24,23,23,25,25,25,24,24,25,26,26,25,25,26,26,25,25,25,24,24,26,24,25,25,26,25,25,25,24,26,25,24,24,24,23,25,24,21,23,24,24,22,24,22,21,23,21,21,21,21,20,20,21,20,18,19,18,18,18,17,18,13,17,17,15,16,16,17,18,17,17,16,18,15,17,16,12,15,13,14,14,15,10,12,11,10,8,10,10,8,9,10,10,9,10,13,11,10,13,15,14,12,17,18,16,18,19,18,19,20,20,20,20,20,21,20,22,22,22,23,22,23,24,24,24,23,23,23,22,22,22,22,19,21,21,21,19,20,20,19,18,19,19,18,16,17,17,18,15,16,14,13,14,12,10,10,7,8,8,7,9,9,10,10,12,14,12,13,13,14,14,13,11,10,9,8,6,7,5,4,4,1,0,2,4,6,7,10,9,10,10,11,11,12,13,15,16,16,17,17,17,18,19,19,19,20,20,21,21,21,23,23,22,23,21,23,21,19,20,20,20,19,19,19,19,16,18,19,17,17,16,14,13,13,13,17,16,17,16,18,19,18,20,18,20,21,19,20,21,20,21,22,20,21,22,20,21,21,19,21,19,20,18,20,21,19,20,20,20,20,20,20,20,21,24,22,21,22,21,22,21,20,21,20,22,22,22,22,22,21,23,21,23,24,23,24,24,22,23,24,26,23,24,25,23,24,25,24,23,24,25,25,24,23,23,24,25,26,25,25,26,26,27,28,28,28,27,29,28,29,28,28,28,29,30,29,29,30,29,30,30,30,29,30,29,30,30,29,30,29,30,29,30,29,30,30,29,30,30,29,30,29,30,29,29,29],[30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,30,29,28,29,29,28,29,29,29,28,29,28,28,28,28,28,27,26,26,26,26,25,25,25,24,24,25,24,23,23,24,24,23,23,24,22,20,19,17,15,14,12,13,11,14,14,16,16,20,17,15,14,18,15,13,17,17,12,14,17,16,15,12,18,18,16,18,19,17,19,19,20,20,19,22,23,22,24,25,24,22,24,24,23,22,22,22,21,23,22,22,22,22,23,24,23,22,24,25,23,23,25,25,23,24,25,24,23,24,23,23,24,23,22,23,24,23,22,24,23,23,23,23,22,21,22,21,21,23,20,20,20,20,20,18,18,17,18,20,18,19,20,21,21,22,21,22,22,22,22,22,22,23,24,25,23,23,24,24,24,24,25,24,23,24,25,22,23,25,23,23,24,23,23,24,23,22,23,23,23,23,21,22,19,18,20,22,21,21,23,23,23,22,23,22,22,22,22,22,22,21,21,21,21,21,21,20,20,20,19,22,22,21,22,23,21,21,24,23,22,22,24,23,21,24,24,22,23,24,24,23,24,23,24,24,23,23,22,24,23,23,23,24,23,23,22,23,24,22,22,24,24,23,23,22,23,20,20,17,20,22,20,18,21,22,23,22,22,23,22,22,21,22,22,22,22,21,22,22,22,21,23,22,22,24,25,25,24,25,25,24,25,25,23,23,22,22,22,20,21,20,21,20,18,19,20,16,15,19,18,18,19,21,21,22,23,21,23,24,23,23,24,24,22,25,27,26,27,27,28,27,29,28,29,28,27,29,28,27,29,29,29,29,28,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,29,29,29,28,29,28,28,28,27,28,26,25,26,26,24,24,24,23,23,22,23,22,21,22,22,21,21,21,21,22,22,23,24,22,25,24,25,24,24,25,25,25,26,25,25,25,24,27,26,25,26,27,26,28,27,26,25,25,26,25,26,26,26,27,27,26,26,26,24,26,25,23,24,26,24,24,24,25,24,24,24,24,25,24,24,24,26,26,26,25,25,26,26,25,26,25,25,25,26,25,25,25,25,25,25,26,25,26,25,25,24,23,23,25,25,22,24,25,25,22,24,24,23,24,24,23,23,23,24,22,22,22,22,22,19,21,19,17,17,16,19,18,20,18,20,22,22,21,22,21,19,18,21,19,16,17,17,19,18,18,15,16,15,13,11,15,16,11,12,15,13,10,13,17,13,11,17,18,13,15,19,19,18,18,20,18,20,22,22,22,21,22,23,22,23,23,23,23,23,25,24,25,24,23,24,24,23,23,24,24,22,23,24,23,22,23,23,23,22,23,23,21,17,17,19,21,18,17,15,13,14,12,10,11,8,9,9,9,9,11,12,12,17,18,14,14,16,17,16,17,13,12,13,10,9,9,8,6,6,4,2,0,2,4,5,7,10,10,12,11,12,13,17,18,18,16,19,19,19,20,22,23,21,22,23,23,23,22,24,25,23,23,24,25,23,22,24,24,23,23,22,23,23,21,21,21,19,18,19,15,15,12,14,15,18,15,18,21,20,21,22,21,21,24,22,23,24,24,24,24,22,25,25,23,23,22,22,21,21,22,19,23,23,21,20,22,22,20,21,22,22,23,23,22,23,23,24,23,22,23,23,23,24,23,25,23,24,21,24,24,23,24,24,25,23,24,25,24,25,25,25,24,25,25,25,24,25,26,24,25,25,25,24,25,25,27,27,27,27,28,28,28,28,29,28,30,30,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29],[30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,29,30,29,28,29,29,28,29,29,28,29,29,27,29,29,29,28,29,28,28,28,28,28,27,26,26,27,25,24,24,24,23,23,22,23,23,21,22,22,22,21,21,19,17,15,14,12,11,10,10,10,12,14,15,16,17,15,14,13,16,13,13,16,15,13,13,16,14,13,11,13,16,14,15,16,15,17,18,19,19,19,21,22,21,22,23,22,22,23,24,23,22,22,22,21,22,21,22,23,24,24,24,24,22,23,24,22,23,24,24,22,23,24,22,22,23,23,23,23,22,21,22,22,21,22,24,21,21,22,22,20,19,21,19,17,18,19,16,18,19,17,17,17,15,18,18,16,18,19,20,18,19,22,20,20,22,23,22,22,24,24,24,22,22,23,23,23,23,24,23,22,23,23,20,21,23,21,22,23,20,20,22,20,19,22,21,22,20,19,19,17,17,19,20,19,19,21,20,20,21,20,19,18,20,20,20,19,21,19,18,19,21,19,17,20,18,19,20,22,22,23,23,22,21,24,22,22,23,24,22,22,24,24,22,23,23,22,22,22,22,23,23,22,21,22,23,21,22,21,22,21,22,21,21,21,21,21,21,22,21,20,20,20,17,17,15,17,18,17,17,18,19,20,19,20,21,20,21,21,21,22,19,19,20,22,21,23,23,23,23,24,24,24,24,24,25,25,25,24,25,24,23,22,22,22,18,18,18,20,17,16,17,18,15,13,17,16,16,17,19,19,19,20,20,20,23,22,21,23,23,23,24,26,25,26,26,28,27,28,27,29,28,27,28,26,25,28,28,28,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,29,29,28,29,28,27,29,27,28,28,27,28,25,25,27,24,23,24,22,22,24,22,23,22,20,22,20,21,22,21,20,18,21,23,21,23,25,24,25,25,24,24,25,25,25,25,24,24,23,26,25,24,26,26,26,26,24,26,25,26,25,25,25,25,25,26,27,25,25,26,23,24,24,22,22,24,25,23,24,25,25,23,24,25,25,24,24,23,25,26,25,25,25,25,25,25,24,25,24,24,25,23,24,24,24,24,24,25,24,26,25,25,24,24,23,25,25,22,23,25,24,21,24,23,22,23,22,22,21,20,22,20,20,21,20,18,17,19,17,15,16,13,16,16,18,18,18,19,19,19,19,17,16,16,18,17,13,16,16,19,18,17,13,15,15,13,11,13,12,10,11,12,11,10,12,13,11,11,13,14,14,14,16,15,15,17,18,16,16,19,20,19,20,20,22,22,22,21,22,23,22,23,23,24,24,22,23,24,21,21,23,22,20,22,23,21,20,20,21,19,19,18,20,18,16,16,17,16,14,13,11,11,12,10,8,10,6,10,9,8,8,10,10,11,13,14,12,11,15,14,13,14,10,11,13,9,10,9,8,7,7,7,4,2,0,1,3,6,9,10,12,12,11,11,13,14,12,14,16,17,16,17,18,19,20,20,20,20,22,22,21,22,22,21,22,23,21,20,22,22,20,19,19,19,18,18,18,19,17,14,16,14,12,12,12,13,14,13,15,18,16,18,20,19,20,20,20,22,21,21,22,22,20,21,22,20,19,20,20,19,19,20,17,19,21,19,17,21,20,20,18,20,21,20,22,22,22,22,22,20,20,21,22,21,23,22,23,22,23,21,23,22,23,24,23,24,23,24,24,24,24,23,24,24,24,25,25,24,24,24,24,24,24,24,22,23,23,26,25,26,26,27,27,28,27,29,27,29,28,29,28,29,28,29,29,29,29,30,29,29,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,29,30,29],[30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,29,30,29,29,29,28,29,29,28,28,29,27,29,29,27,29,29,29,28,29,28,28,28,28,28,27,27,26,27,26,25,25,25,24,24,25,24,22,21,24,22,21,22,21,20,17,15,12,11,9,10,8,8,10,11,13,12,17,12,13,13,14,13,12,15,12,12,13,14,14,13,12,14,15,14,14,15,15,14,17,17,16,18,19,20,20,21,21,22,22,23,23,22,22,21,22,19,20,18,21,21,22,21,24,23,21,23,23,21,20,24,25,20,21,23,23,20,21,23,22,23,22,21,24,22,21,21,22,20,20,19,19,17,17,18,17,17,17,16,15,15,16,17,15,15,13,15,16,15,14,18,19,18,19,20,19,19,19,19,20,20,21,22,22,20,19,21,21,20,21,22,21,19,21,22,20,21,21,20,21,22,20,21,21,21,19,20,22,20,19,18,20,16,16,18,19,19,18,19,19,18,17,18,19,17,19,20,18,18,19,19,17,17,20,18,16,17,18,17,19,19,20,20,20,19,21,21,21,21,21,20,21,20,21,20,20,22,22,21,20,23,20,21,22,20,20,19,22,20,19,19,20,20,21,20,20,20,20,20,20,20,20,20,20,19,17,20,16,18,18,17,16,18,17,18,19,19,19,17,19,18,19,19,17,16,16,19,19,19,21,21,20,22,22,22,22,22,24,23,23,23,22,22,21,19,19,18,16,14,16,17,14,13,14,15,12,11,15,14,14,17,18,18,20,20,20,21,22,20,21,22,23,21,23,25,24,25,26,27,26,27,27,29,27,26,27,26,26,28,27,29,28,28,29,29,29,30,29,29,29,29,29,30,30,29,29,29,29,29,29,30,29,29,29,29,29,29,28,29,27,28,28,27,29,27,26,28,25,23,25,23,22,24,22,21,22,21,22,21,19,19,18,18,19,18,16,14,20,20,20,21,23,23,24,22,22,23,24,23,23,24,24,23,23,25,24,23,25,26,25,26,23,25,24,25,24,24,25,24,24,25,25,23,24,25,24,23,24,23,22,24,25,22,23,23,23,21,22,23,24,23,23,21,23,24,25,23,24,25,25,24,24,25,24,24,24,24,24,23,24,23,24,25,23,25,22,24,22,21,21,23,23,20,22,24,23,21,22,21,20,21,20,21,21,20,21,19,18,19,18,19,16,17,16,15,14,12,15,15,16,15,18,18,19,17,19,17,17,16,17,17,15,16,14,17,17,17,14,17,14,14,10,14,13,12,11,13,12,11,12,12,12,12,13,13,12,12,15,14,14,15,17,16,16,18,19,16,18,18,19,18,20,20,20,21,21,22,22,23,22,21,20,22,21,20,21,20,18,20,20,19,19,19,19,18,18,16,17,17,14,14,16,16,13,11,11,12,12,8,7,8,6,9,9,8,9,8,11,11,13,12,10,12,14,12,11,13,12,11,12,9,11,10,9,8,9,8,5,5,1,0,2,3,5,8,8,10,9,9,12,12,13,11,17,15,14,16,18,17,17,19,19,18,19,20,20,21,20,21,20,22,20,18,18,19,19,19,17,17,18,15,15,18,16,13,14,11,9,10,9,9,12,10,13,14,14,14,15,17,18,18,18,19,20,19,19,20,18,19,20,19,19,18,19,19,18,20,14,15,19,16,13,17,18,15,13,17,18,18,20,20,20,19,20,20,19,21,19,20,19,19,22,20,22,20,21,20,22,22,22,23,22,23,23,24,24,22,23,24,23,24,25,23,22,24,24,25,22,23,22,24,24,25,25,25,26,26,26,28,27,28,28,28,28,29,28,29,27,29,29,29,29,30,29,29,29,30,29,30,29,30,29,29,30,29,29,30,30,29,29,29,29,29,29,29,30,29,30,29,29,29],[30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,30,29,29,30,29,28,29,29,28,29,29,28,29,29,27,29,29,29,28,29,28,29,28,28,28,27,27,27,27,26,25,24,25,24,23,23,23,22,21,22,21,21,20,20,18,15,13,10,9,8,8,7,7,7,9,9,11,12,10,9,9,12,10,10,10,11,11,10,11,11,10,11,11,11,11,12,13,12,12,15,16,14,15,15,18,16,17,17,17,17,17,18,17,15,15,16,15,18,16,16,16,16,18,17,18,17,18,17,16,17,18,19,17,17,19,17,16,17,17,16,17,18,16,17,18,17,17,18,16,18,16,17,15,16,16,14,14,13,13,13,13,13,12,11,11,12,13,12,10,13,12,15,13,13,16,16,14,15,16,16,17,18,17,18,17,17,17,17,17,16,18,17,17,17,17,16,16,18,17,16,18,16,16,17,16,14,16,17,17,16,16,16,16,14,16,15,16,17,16,15,15,15,15,15,13,16,16,14,13,15,13,10,12,14,11,11,12,13,12,13,14,16,15,16,15,17,17,17,16,17,17,17,16,17,17,16,17,17,15,15,16,16,17,16,16,16,15,16,15,15,15,16,16,14,14,16,15,15,15,16,16,15,16,15,16,13,14,11,12,13,12,12,13,13,11,12,14,14,13,13,14,14,14,13,11,14,14,14,13,17,18,16,18,18,18,18,20,19,18,19,18,17,17,15,14,13,13,11,10,13,12,10,11,11,11,10,10,12,11,10,15,16,16,18,17,17,17,20,19,18,19,21,20,20,23,23,23,24,25,25,26,25,27,26,24,25,25,23,25,26,26,26,26,27,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28,27,27,26,27,27,26,26,26,25,27,24,23,24,22,21,22,20,20,21,20,20,20,18,18,16,16,15,14,13,12,13,17,14,17,17,16,19,18,17,18,19,17,17,19,18,17,17,20,18,19,20,20,20,20,18,19,18,19,19,18,18,19,18,19,21,18,20,19,17,17,18,17,17,19,18,17,16,17,18,16,16,19,19,17,19,16,19,20,19,18,19,20,19,19,19,19,18,18,18,18,18,18,17,18,18,18,18,18,18,19,19,18,16,18,19,16,17,18,18,15,16,18,15,16,15,16,16,15,15,14,13,15,14,13,12,13,13,10,8,9,10,11,12,12,14,15,16,14,15,15,13,14,14,12,11,13,13,14,13,15,11,12,12,10,10,11,10,9,9,10,9,10,10,10,9,10,10,9,8,12,11,10,12,12,10,11,11,11,13,12,13,13,14,14,15,14,15,17,18,16,17,16,18,16,15,16,16,15,16,14,13,14,15,14,14,14,15,13,14,13,13,12,8,7,11,11,11,7,6,7,7,6,4,7,5,8,7,8,6,7,8,8,11,10,8,9,9,11,9,9,9,9,10,8,10,8,9,7,7,7,6,5,6,1,0,1,3,5,8,9,7,8,8,9,7,9,10,11,9,10,12,13,13,15,14,13,15,15,15,15,15,14,15,15,14,12,12,13,14,12,13,13,12,12,11,12,10,9,8,8,8,7,8,9,8,7,10,11,10,9,12,12,12,12,13,14,14,15,14,14,12,14,15,13,14,13,12,12,11,14,11,11,13,12,10,12,12,12,11,11,14,14,16,15,16,17,15,15,14,15,15,14,15,14,17,16,17,14,17,17,15,17,16,19,15,18,18,17,17,17,18,17,18,18,19,16,17,19,18,18,18,18,17,17,18,20,21,21,20,21,23,23,25,26,25,26,26,27,26,27,26,27,28,27,28,28,28,28,29,29,28,29,29,29,29,29,29,28,29,29,28,29,28,29,28,29,28,28,28,29,28,28,28,28],[29,29,28,28,28,29,29,29,28,28,28,28,28,28,27,28,28,28,28,29,28,28,29,28,27,28,28,27,28,28,26,28,29,29,28,29,28,28,28,27,28,27,26,26,26,26,25,24,24,23,22,23,23,21,20,21,20,20,19,18,15,13,11,9,7,6,8,5,6,6,7,7,9,9,8,7,7,8,7,8,8,8,8,6,9,9,8,8,9,10,9,9,11,9,9,10,11,11,10,12,12,11,13,13,12,12,14,14,13,13,12,12,11,12,11,11,12,13,13,13,14,12,14,14,13,12,14,15,12,14,13,13,12,12,12,12,12,13,12,12,14,12,12,13,13,11,11,12,12,12,11,11,10,10,10,9,10,9,9,9,9,7,10,8,9,9,9,10,11,10,11,11,12,11,11,12,12,12,12,13,11,11,12,12,12,12,13,12,11,12,13,11,12,12,13,12,12,12,12,13,12,11,12,13,12,12,12,11,11,10,11,12,12,12,11,12,10,11,11,11,10,11,11,11,10,11,11,9,9,11,9,9,10,10,10,11,11,11,12,11,11,12,12,12,12,13,12,12,11,12,11,11,12,12,11,12,13,12,11,12,12,11,11,12,12,11,10,11,12,10,11,11,12,10,11,11,12,12,11,10,11,10,9,9,9,9,9,9,10,10,10,9,11,10,11,11,11,11,11,10,8,11,10,11,10,11,12,12,14,13,13,13,14,14,14,14,14,15,14,13,12,9,10,8,9,9,8,7,9,8,9,9,8,10,11,12,12,13,15,15,16,15,17,20,16,17,20,20,18,20,21,21,22,22,23,25,25,25,26,25,25,26,23,24,25,25,26,25,25,27,28,27,28,27,28,28,28,28,28,28,28,29,29,29,28,29,28,29,28,28,28,28,28,27,27,25,26,27,25,26,25,25,26,24,22,25,23,20,22,21,21,20,20,19,19,16,15,14,12,11,10,9,9,10,12,11,13,13,13,15,14,14,14,15,15,14,15,14,14,15,16,15,15,16,16,16,16,15,16,14,14,15,15,15,16,16,17,16,17,17,16,15,15,14,15,14,15,15,14,14,14,15,13,13,14,14,13,13,12,14,15,15,14,16,16,15,15,15,15,14,14,14,14,15,15,15,14,14,15,14,15,14,14,14,13,11,13,13,12,12,13,13,11,12,12,11,11,10,10,11,9,10,10,8,9,9,8,7,8,8,7,6,6,7,8,9,10,11,11,11,10,11,10,9,9,10,9,9,10,10,11,10,11,9,10,10,8,9,9,9,8,8,9,7,7,6,7,6,6,6,6,5,8,7,7,7,8,8,8,9,8,8,9,9,10,10,10,11,11,11,12,12,12,13,13,13,11,12,12,11,10,11,10,8,10,10,10,9,9,9,8,7,8,8,7,5,6,7,7,6,5,5,5,5,2,3,4,3,6,6,6,7,7,8,7,8,7,7,9,8,8,8,9,9,7,9,7,8,8,7,7,7,6,5,6,4,2,1,0,1,3,4,5,4,4,6,5,6,5,7,7,7,8,8,8,8,10,10,10,10,11,11,11,11,10,10,12,11,8,9,10,8,9,8,8,7,7,6,7,7,6,7,7,5,7,6,7,6,6,7,8,8,7,8,8,8,9,9,11,10,10,12,11,9,12,13,12,10,10,11,9,8,10,8,8,10,8,7,9,11,8,8,9,11,11,12,13,13,12,13,11,11,13,12,12,13,13,14,12,12,10,13,13,11,12,14,14,11,13,14,12,13,14,14,12,13,14,14,13,13,14,14,14,12,14,14,15,15,18,17,18,18,18,19,22,22,22,22,24,23,25,24,24,23,24,26,25,25,27,25,27,26,27,26,27,26,27,27,28,28,27,27,27,27,27,26,26,25,26,27,26,27,27,26,26,26,26],[29,29,28,28,29,29,29,28,29,27,27,27,28,27,28,27,27,27,27,27,27,26,27,27,26,27,28,27,28,27,26,27,28,28,28,28,27,28,27,27,28,26,26,26,26,25,24,23,24,23,21,21,21,20,18,19,19,18,17,17,14,12,10,7,7,5,4,3,2,2,3,3,3,3,3,2,3,4,3,3,3,4,3,3,3,4,3,4,4,4,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,8,7,8,9,8,8,8,7,7,8,8,8,8,8,8,8,7,7,7,7,7,7,8,7,7,7,7,7,7,8,8,7,7,6,7,6,6,6,7,6,5,6,6,5,6,6,5,5,6,6,6,5,6,6,6,6,5,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,5,5,6,6,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,6,6,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,5,4,4,5,5,4,5,6,6,7,7,6,7,7,7,7,7,7,6,6,6,6,6,6,6,6,5,6,6,6,7,7,7,7,6,6,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,6,6,5,5,5,4,4,3,3,4,3,3,4,4,4,4,4,4,5,4,5,5,5,5,4,5,5,5,5,6,5,6,6,7,6,6,7,8,7,7,7,7,7,7,6,6,6,5,5,5,5,4,4,5,4,5,5,6,7,10,10,10,14,15,14,13,15,17,15,15,18,19,17,19,20,20,20,21,22,22,24,23,24,23,22,25,22,23,24,24,26,23,24,25,26,26,27,26,26,27,27,27,27,27,27,27,27,28,27,27,27,27,27,27,28,27,28,27,27,25,26,26,25,25,24,24,25,22,21,22,22,20,20,19,18,19,18,17,17,15,14,13,10,9,7,6,7,6,6,6,7,7,8,9,8,9,9,9,9,10,10,9,9,11,11,10,10,11,11,11,11,11,11,10,10,10,11,10,11,12,11,12,12,11,10,11,11,9,9,10,9,9,8,9,8,8,7,8,8,7,6,7,7,8,7,6,7,8,8,7,8,9,8,8,8,9,9,10,10,10,10,9,8,8,7,7,7,7,6,5,6,6,5,6,6,5,5,6,6,5,6,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,5,5,6,7,7,8,8,6,5,5,5,5,5,4,4,5,5,5,6,6,6,6,6,6,6,5,5,5,4,4,4,4,3,4,3,3,3,3,2,3,3,3,3,3,3,4,4,3,4,4,4,4,5,4,5,5,5,5,5,6,6,6,5,5,5,6,5,5,5,5,4,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,3,4,3,3,3,2,2,2,2,2,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,5,6,5,5,5,5,5,5,6,4,3,2,1,0,1,1,2,2,2,2,2,3,3,3,4,4,4,6,5,5,4,5,5,5,6,6,6,6,5,6,7,5,5,6,6,5,5,5,5,5,5,5,5,4,5,4,3,3,3,3,4,4,3,5,5,5,5,5,5,5,5,5,5,5,6,6,7,6,7,7,7,7,6,6,6,6,6,5,5,6,5,5,5,6,5,5,5,5,6,7,8,8,7,7,7,7,7,8,7,8,8,8,8,8,8,9,8,7,7,7,8,7,7,7,7,6,7,7,7,7,7,7,6,7,7,7,7,7,9,10,11,12,13,14,14,14,15,16,17,19,20,19,22,20,23,20,22,21,21,23,22,23,25,23,26,25,26,24,25,25,26,25,25,26,25,25,25,23,25,25,25,23,26,25,23,25,26,24,23,24,25],[28,29,29,29,29,29,29,29,29,28,28,28,28,27,28,27,28,28,28,28,29,27,29,29,27,28,29,27,29,28,27,29,29,29,29,29,28,29,29,28,29,28,27,27,27,26,25,24,24,23,23,22,23,20,19,20,18,18,18,18,15,13,10,7,6,5,3,3,3,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,3,3,4,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,6,5,5,5,6,6,6,6,6,6,5,5,6,6,5,5,6,5,5,6,6,5,6,6,7,6,6,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,4,4,5,4,4,5,5,4,5,5,5,4,5,5,6,6,6,5,6,6,6,6,6,6,6,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,4,4,4,5,5,5,6,6,5,5,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,5,5,6,7,9,9,11,13,13,13,14,14,16,16,15,17,18,17,18,20,20,21,22,23,23,25,24,26,23,23,25,22,22,25,24,25,23,23,25,27,25,27,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,26,27,26,25,27,25,25,26,22,23,24,23,21,21,19,19,19,18,17,16,15,14,11,10,7,6,5,5,5,5,5,5,6,5,6,6,6,7,7,7,8,9,8,8,9,9,9,9,10,11,10,10,9,10,9,8,9,8,9,10,10,11,11,10,10,9,9,9,8,8,8,8,7,7,6,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,6,6,7,8,8,9,9,8,8,8,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,4,3,3,4,3,3,3,4,4,5,7,7,7,6,6,5,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,4,4,4,3,3,4,3,3,3,3,3,2,3,2,2,2,3,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,3,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,5,4,4,4,5,5,5,3,2,1,1,0,1,1,1,1,1,2,2,2,2,2,3,2,3,3,3,3,4,4,4,4,4,4,5,3,4,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,2,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,5,6,6,6,5,5,5,5,6,5,6,6,6,5,6,5,7,6,5,6,6,5,5,5,5,5,5,6,5,5,5,6,5,5,6,6,5,5,6,7,8,9,10,11,13,13,12,14,15,16,18,18,20,21,20,21,19,21,21,20,24,21,23,24,23,25,27,24,24,25,25,26,25,26,26,25,26,25,24,25,25,25,24,26,24,24,26,26,24,22,24,24],[28,28,28,28,28,29,28,28,28,27,27,28,27,27,27,27,27,27,27,27,27,27,27,28,26,27,28,27,28,27,26,28,27,28,28,27,27,28,28,27,28,27,26,26,26,25,23,22,23,23,21,21,21,20,18,20,17,17,17,17,14,12,10,6,6,4,3,3,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,4,4,4,4,4,4,4,3,3,4,3,3,4,4,3,3,4,4,3,4,4,5,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,5,4,6,8,8,12,11,14,13,13,15,15,14,14,16,16,16,17,19,19,20,19,21,21,22,22,23,21,21,21,22,20,22,22,23,21,23,22,26,25,26,25,25,26,27,26,26,26,26,26,26,27,26,27,27,27,26,27,26,27,26,26,26,25,26,26,24,25,24,24,25,22,23,23,23,21,21,18,18,19,17,16,16,13,11,9,7,6,5,4,4,3,4,4,4,4,4,4,4,4,5,5,6,5,6,6,6,7,7,7,7,7,8,7,8,7,8,7,7,7,7,6,7,7,7,7,7,7,7,7,6,6,6,6,6,5,5,5,5,4,4,4,4,4,3,3,3,3,4,3,4,4,4,4,4,4,4,5,5,5,6,7,7,6,6,6,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,6,6,6,5,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,3,3,4,4,4,4,3,2,2,1,1,0,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,4,3,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,4,4,4,4,4,5,4,4,4,5,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,3,3,4,4,4,4,4,6,7,8,9,10,11,10,10,12,13,14,15,17,17,19,19,19,18,19,19,19,21,19,21,23,21,23,24,23,22,23,23,24,22,24,25,23,23,23,22,23,24,23,23,23,22,22,24,22,21,21,22,22],[28,28,28,28,28,29,28,28,28,27,28,27,28,27,27,26,27,28,27,27,27,26,27,28,26,27,28,26,28,28,26,27,28,28,28,28,28,28,28,28,28,27,27,27,27,26,25,24,25,22,23,23,22,19,19,20,18,19,18,17,14,13,10,8,7,5,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,5,4,4,4,5,5,5,5,5,5,4,4,5,5,4,5,5,4,4,5,5,4,5,5,6,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,5,5,5,5,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,6,6,7,9,9,10,12,14,15,14,13,16,16,15,17,18,17,18,19,19,21,22,23,24,24,24,25,23,23,24,22,22,24,23,24,24,24,24,27,25,27,26,26,27,27,27,27,27,27,28,28,27,27,27,27,27,27,27,28,27,27,27,27,26,26,27,26,26,26,26,26,24,24,24,23,22,22,19,19,20,18,16,15,13,12,10,7,6,5,5,4,4,4,4,4,5,4,5,5,5,6,6,6,6,7,6,7,7,7,7,8,8,8,8,8,8,8,7,7,7,7,7,8,8,8,8,8,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,7,6,7,7,6,5,5,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,3,4,6,7,7,6,5,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,4,4,5,4,4,4,5,6,5,4,3,2,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,3,2,2,3,2,3,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,3,3,4,4,4,3,4,4,4,3,4,4,3,3,4,3,3,4,3,3,3,4,4,4,5,5,4,4,4,4,5,5,5,4,5,5,4,4,4,5,5,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,5,5,4,4,5,6,7,8,8,9,12,11,11,12,13,15,15,17,17,20,20,20,18,20,20,19,23,20,22,22,21,26,24,24,23,24,23,25,24,24,24,23,24,25,23,23,25,25,23,25,24,24,25,25,24,21,25,25],[29,28,29,29,29,29,29,28,29,28,28,28,27,28,27,27,28,28,27,27,27,26,27,27,25,28,28,27,28,28,25,28,28,29,28,28,28,29,28,28,28,27,27,27,27,26,24,24,24,23,23,23,22,20,19,20,18,17,18,17,14,12,9,6,5,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,2,3,3,3,3,3,5,5,6,8,8,11,12,12,11,12,15,14,13,16,16,15,16,18,19,20,20,20,22,24,23,24,23,23,23,23,22,22,23,24,23,23,23,26,25,27,25,26,26,26,26,26,26,26,26,26,26,27,27,26,26,27,27,27,27,27,26,26,26,26,27,26,25,25,24,26,24,23,23,23,22,22,19,19,19,18,17,15,14,11,10,7,5,4,4,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,7,7,7,7,7,7,7,6,6,6,6,6,7,6,7,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,6,6,7,5,4,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,2,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,3,3,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,3,3,3,4,4,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,5,6,7,8,9,10,10,10,11,12,13,14,16,17,19,19,19,17,19,18,19,22,19,22,21,22,24,24,23,23,24,23,24,24,24,24,23,24,24,21,22,24,25,23,24,23,24,23,25,24,21,24,26],[28,28,28,28,28,29,28,28,28,27,27,28,27,27,26,27,26,27,27,26,27,27,26,27,27,27,27,26,28,27,26,27,28,28,28,28,28,28,28,27,28,27,27,27,26,26,24,23,24,23,22,21,22,21,19,19,19,18,18,17,13,11,8,6,6,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,2,3,2,3,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,2,2,3,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,5,8,9,8,11,12,12,11,13,14,14,14,17,17,17,18,19,19,21,20,22,22,23,23,24,23,22,23,21,23,23,23,25,23,24,23,26,24,26,26,26,26,26,26,27,27,27,26,27,27,27,27,27,27,27,27,28,27,27,27,26,26,26,26,25,26,24,25,26,22,23,24,23,22,23,19,20,20,17,16,15,13,10,9,7,6,5,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,6,6,6,6,7,7,7,7,7,6,6,6,6,5,6,6,7,7,7,7,6,6,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,6,6,5,4,4,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,5,5,5,4,3,3,3,2,2,3,3,2,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,3,4,3,3,4,4,4,3,3,3,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,2,3,3,3,4,3,4,3,3,4,4,4,3,4,4,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,5,6,7,8,9,10,10,10,11,12,13,14,16,17,18,17,18,17,18,18,20,21,19,22,21,22,25,24,22,22,24,23,23,24,24,23,22,23,23,22,22,23,23,23,23,23,23,22,24,23,20,23,24],[28,28,28,28,28,28,28,27,28,27,27,27,27,26,26,26,26,27,26,26,27,26,26,27,26,26,27,26,27,26,25,27,27,27,26,27,27,27,27,27,27,26,26,26,25,25,24,23,23,22,22,21,20,20,18,19,17,17,17,16,13,11,9,6,5,3,2,2,2,2,2,1,2,1,2,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,4,5,8,7,10,10,13,13,12,13,14,14,13,15,16,16,16,18,19,19,20,21,20,22,22,22,21,21,21,20,20,21,21,23,21,22,22,25,23,26,25,24,25,25,26,25,26,26,25,25,26,25,26,26,26,25,26,26,26,26,25,25,25,25,25,25,25,23,23,25,22,23,22,23,23,22,19,19,19,18,14,14,13,10,9,6,5,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,6,5,5,5,5,5,5,4,5,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,5,5,5,5,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,3,5,5,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,5,6,7,8,9,9,8,10,11,12,13,15,16,18,18,17,16,17,18,17,20,18,21,20,20,24,24,23,22,23,23,23,22,23,23,22,21,24,20,21,23,23,21,23,21,21,22,24,21,20,23,22],[28,28,29,29,29,29,28,28,29,27,27,27,27,26,26,25,26,28,26,27,27,25,27,28,26,27,28,26,28,27,26,28,28,28,28,28,27,28,28,27,28,27,27,27,26,26,24,24,24,22,22,21,21,19,18,20,17,17,17,17,15,12,10,7,6,4,3,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,4,3,3,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,6,7,7,10,11,13,13,12,13,14,14,13,15,16,16,16,18,19,20,20,21,22,23,22,24,22,22,23,21,21,22,23,25,22,23,24,25,25,26,25,26,26,26,27,27,27,26,26,26,26,26,27,27,27,26,27,27,26,27,26,27,26,25,26,25,26,25,24,25,23,23,23,23,23,22,19,19,19,16,15,14,12,10,9,7,5,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,2,2,3,3,3,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,1,2,2,2,3,3,6,6,7,5,3,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,3,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,5,6,6,7,8,10,10,9,10,11,13,14,15,16,18,18,17,16,17,18,18,20,18,20,20,21,23,23,22,21,23,22,22,22,22,22,21,22,23,20,22,23,23,22,23,22,21,23,25,22,20,24,24],[28,28,28,28,28,28,27,27,28,27,27,27,27,27,26,26,26,27,26,26,27,26,27,27,25,28,28,25,28,28,26,28,28,28,28,28,28,28,28,27,28,27,27,27,26,25,24,24,24,23,23,22,22,21,19,20,18,17,17,16,13,12,9,6,5,4,3,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,4,3,3,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,3,3,4,4,3,3,4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,3,3,3,5,6,8,7,11,13,12,10,11,13,13,12,15,15,16,17,17,18,20,19,20,21,22,22,23,22,22,22,20,21,22,22,24,23,22,23,25,25,26,25,25,26,26,25,26,26,26,26,26,26,26,27,26,26,26,26,27,26,27,26,26,25,25,26,24,24,24,23,25,22,22,23,22,22,21,19,19,18,17,15,14,12,10,9,6,5,4,3,3,2,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,6,6,6,6,6,6,6,6,5,5,5,4,5,6,5,6,6,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,3,3,5,5,6,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,3,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,6,6,7,8,10,10,9,10,13,13,14,16,16,18,17,17,16,18,16,18,20,19,21,20,21,24,23,21,22,24,22,23,23,23,22,22,23,22,21,23,23,22,21,23,21,23,23,24,23,20,24,24],[28,28,28,28,28,29,27,27,28,26,26,26,26,26,25,26,26,26,26,25,26,25,25,26,26,26,27,26,27,26,26,27,27,28,27,27,28,28,28,28,28,27,26,27,26,25,24,23,23,22,22,21,21,19,18,19,17,17,17,16,13,11,8,5,5,3,2,2,2,2,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,3,3,4,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,3,3,3,3,3,4,4,6,8,8,11,11,12,10,12,14,13,13,16,16,16,16,17,18,20,19,19,21,22,22,23,21,22,22,20,21,21,21,24,22,22,22,25,24,26,26,25,26,26,26,26,27,27,26,27,27,26,26,26,26,27,27,27,27,27,27,26,26,25,26,26,25,24,25,25,23,23,23,23,22,22,19,19,18,16,14,13,13,9,10,6,5,4,3,3,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,6,6,6,5,5,5,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,3,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4,4,4,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,1,2,2,3,3,3,4,4,5,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,2,2,2,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,4,5,6,6,7,9,9,8,10,11,11,13,14,15,17,18,17,15,17,16,19,19,18,21,20,20,23,23,22,22,22,22,23,22,22,22,20,21,22,19,20,22,22,21,22,21,21,22,23,22,19,23,24],[29,28,28,28,28,29,28,27,28,27,27,27,26,26,27,26,26,27,26,26,27,26,25,27,27,27,27,27,28,27,26,27,27,27,27,27,27,27,27,27,27,26,26,26,25,25,25,23,23,23,23,22,21,20,18,19,18,17,18,17,14,12,9,6,4,4,3,2,2,1,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,3,3,3,4,5,6,8,9,11,13,13,11,11,13,13,14,15,15,16,17,17,18,20,19,20,21,22,22,23,22,22,22,22,19,22,22,23,22,22,22,24,24,27,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,25,26,26,25,24,24,25,23,23,22,23,23,21,20,18,19,17,14,14,11,10,8,6,4,4,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,5,5,5,5,4,4,4,4,4,5,5,5,5,4,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,2,1,2,2,3,3,3,5,5,6,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,2,2,1,2,2,1,1,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,4,5,5,5,6,8,8,8,8,11,12,12,15,16,17,18,16,15,17,17,17,19,18,20,20,21,22,24,22,22,22,23,24,22,22,22,21,22,22,20,21,23,23,22,23,22,21,21,24,21,20,23,23],[28,28,28,28,28,29,28,28,27,27,27,27,27,25,26,24,26,26,24,26,26,25,26,27,25,27,27,25,27,27,25,26,27,27,27,27,27,27,27,27,27,26,26,26,25,25,24,23,24,23,23,22,21,20,18,19,17,17,18,16,14,11,8,6,5,4,3,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,4,4,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,2,3,3,3,2,2,3,3,2,3,3,3,3,4,3,4,6,7,7,10,11,12,11,11,13,12,12,14,14,14,16,16,17,19,20,20,21,22,21,23,21,21,22,20,22,21,22,23,22,23,22,24,24,27,25,25,25,25,25,25,25,25,25,26,26,25,26,26,26,26,26,27,26,27,25,25,25,24,26,24,25,24,23,24,23,21,21,21,21,20,18,18,17,15,14,12,11,8,8,6,4,4,3,3,2,3,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,5,4,5,5,4,5,5,4,4,4,4,3,3,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,2,1,2,2,3,3,3,5,5,6,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,2,2,1,2,2,2,2,1,1,1,1,1,1,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,3,3,2,2,2,2,3,2,3,2,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,6,7,9,9,9,10,12,13,14,17,16,18,17,18,16,17,17,19,20,19,22,20,21,24,23,22,23,23,23,23,24,22,22,23,23,22,21,21,24,23,23,23,22,22,22,25,22,21,23,24],[28,28,28,28,28,29,27,27,27,26,27,27,26,25,26,24,25,27,25,25,26,25,25,27,26,27,28,26,28,27,26,27,28,28,27,27,27,28,28,27,28,27,26,27,26,25,25,24,24,23,23,22,21,20,19,19,17,17,18,16,13,11,8,5,5,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,3,3,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,4,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,3,3,3,3,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,2,3,2,2,2,3,3,2,3,3,3,5,5,6,7,12,12,11,9,10,13,12,12,14,14,15,16,17,18,19,18,20,21,21,22,23,22,21,22,21,21,21,22,23,22,22,23,25,25,26,26,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,26,27,26,26,25,25,26,25,25,24,24,25,23,23,22,22,21,20,19,18,18,16,14,13,12,9,8,6,4,4,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,5,4,5,5,4,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,2,2,2,2,3,3,3,5,5,5,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,4,3,4,3,3,3,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,2,2,1,1,2,2,1,2,2,2,2,1,1,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,3,2,2,2,2,2,2,3,2,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,4,5,5,6,7,9,8,8,10,12,12,14,16,16,18,16,17,16,16,17,19,20,18,21,20,20,23,23,22,22,23,22,22,23,22,21,21,22,22,20,21,23,22,23,23,22,22,21,24,22,19,23,23],[28,27,28,28,28,28,27,27,28,26,27,27,26,25,26,25,26,27,26,26,26,25,25,26,26,25,26,26,27,26,25,26,27,27,27,27,27,27,28,26,27,26,26,26,25,24,23,22,23,22,21,21,20,19,18,19,17,16,17,16,14,11,8,6,4,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,4,3,3,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,4,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,3,3,3,2,2,2,2,2,3,3,2,3,3,3,4,7,8,8,11,12,12,10,10,13,12,12,14,14,14,15,16,17,17,18,18,19,21,21,22,20,20,21,20,19,20,20,22,21,20,22,24,22,25,24,24,25,26,26,27,26,26,26,26,26,26,26,26,26,26,26,27,26,26,25,24,24,24,26,24,25,24,24,24,24,22,23,22,23,22,20,20,18,17,14,13,13,10,9,6,5,4,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,4,4,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,3,3,3,4,4,5,4,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,1,2,2,2,2,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,4,4,3,4,3,4,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,2,2,1,1,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,6,8,7,8,9,10,11,13,15,15,16,18,16,14,16,17,17,19,17,21,20,20,23,22,22,21,23,22,22,22,22,21,19,23,22,19,19,23,22,21,21,20,20,21,23,21,19,22,22],[29,29,29,29,29,28,28,28,27,27,27,26,27,24,26,24,26,26,25,26,27,26,25,27,26,26,27,26,27,27,26,27,27,27,27,27,27,27,27,27,27,27,26,26,26,25,25,24,24,23,23,22,21,20,19,19,18,17,17,16,13,11,8,5,4,3,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,3,3,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,4,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,4,3,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,3,3,2,3,3,3,4,5,6,7,10,12,12,10,11,13,12,12,14,15,15,15,17,18,19,19,19,21,22,21,23,21,21,21,21,21,21,21,23,21,21,21,25,25,27,26,25,25,26,25,26,25,25,25,25,25,26,26,25,25,26,26,26,25,26,25,25,25,25,25,25,25,24,24,25,23,23,22,23,23,21,19,19,18,16,14,12,12,9,8,6,4,4,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,5,4,5,5,4,4,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,5,5,6,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,4,4,4,4,3,4,3,4,3,3,3,3,4,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,1,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,3,3,2,2,2,2,2,3,3,2,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,4,5,5,6,8,8,9,10,13,12,14,16,16,18,19,17,16,17,17,18,22,18,20,20,20,24,22,21,23,23,21,23,23,21,21,22,23,21,20,21,22,22,21,21,21,22,22,23,21,20,23,22],[29,28,28,28,28,28,27,27,27,27,27,26,27,25,26,24,26,26,26,26,26,26,26,27,25,27,28,26,28,27,26,27,28,27,27,27,26,27,28,27,27,26,26,26,26,26,25,24,25,23,23,22,22,20,19,20,19,18,18,17,14,12,8,6,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,3,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,2,2,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,3,3,3,3,3,4,4,6,6,7,10,12,12,11,11,13,12,12,14,14,15,16,16,18,20,19,21,22,23,22,23,22,21,22,21,21,21,22,23,22,22,22,25,25,27,25,26,26,25,25,25,25,26,25,26,26,25,26,25,26,25,25,27,26,26,25,26,25,25,26,24,25,24,23,25,23,22,22,22,22,21,18,19,17,16,15,12,12,9,8,6,4,4,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,5,5,5,5,5,4,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,3,3,4,6,6,6,4,3,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,3,2,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,4,5,6,6,7,9,9,9,10,13,13,14,17,16,19,18,19,17,18,18,19,21,20,21,21,21,24,23,23,23,24,23,24,24,23,23,23,24,23,21,22,23,23,23,22,23,22,23,24,21,21,24,23],[28,28,28,28,28,28,27,27,27,26,26,27,26,24,26,25,26,26,26,26,25,25,25,26,25,26,27,26,27,27,26,28,27,27,27,27,27,27,28,27,27,27,27,27,26,25,25,24,24,23,23,22,21,21,19,20,19,18,17,17,14,13,9,6,4,4,3,3,3,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,6,6,6,5,4,5,5,5,5,5,5,5,4,4,5,5,4,5,5,4,4,5,4,4,5,5,5,5,4,4,5,4,4,4,4,3,3,4,4,3,4,4,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,3,4,4,4,4,3,3,3,4,3,3,3,3,3,3,4,3,3,3,4,4,5,4,4,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,4,4,5,6,8,9,12,13,13,12,11,14,13,14,16,17,15,17,17,19,21,20,21,21,23,22,23,22,20,22,20,19,20,22,22,20,20,23,25,24,27,25,26,26,26,26,27,27,26,26,27,27,27,27,27,28,26,26,27,26,27,25,26,26,25,27,25,26,25,24,26,24,24,24,23,24,22,21,20,19,17,14,14,12,11,9,7,5,4,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,4,5,6,6,6,5,5,5,4,4,4,4,5,4,6,6,4,5,5,4,4,4,4,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,5,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,6,5,6,4,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,5,5,4,5,4,5,4,4,4,4,4,4,4,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,4,5,7,6,8,9,8,9,9,12,13,14,16,17,20,20,18,17,18,18,19,22,20,22,21,20,24,25,22,23,24,23,24,24,24,22,22,22,23,19,21,24,22,23,22,22,21,21,24,21,21,23,23],[28,28,28,28,28,28,27,27,27,26,26,26,26,25,26,24,25,26,25,25,25,25,25,25,25,25,26,26,26,26,26,26,27,27,26,27,26,26,27,26,26,25,25,26,25,25,23,23,23,23,22,22,20,19,17,18,17,15,16,16,12,10,8,5,4,4,3,2,3,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,5,6,6,5,5,4,4,5,5,5,5,5,5,4,4,5,4,4,4,5,4,4,5,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,3,4,4,3,4,4,4,3,4,4,4,3,3,3,4,3,3,3,4,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,2,3,2,2,2,2,2,2,3,2,2,3,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,5,6,6,7,9,11,11,10,11,13,12,12,14,16,15,13,16,18,19,19,19,20,21,21,22,21,19,20,21,20,20,20,22,20,21,21,24,24,26,25,25,25,26,26,26,26,26,26,26,26,26,27,27,26,26,27,26,26,26,25,25,25,25,25,25,25,24,23,24,23,23,22,22,22,20,19,20,19,17,15,13,13,10,9,7,5,4,3,3,2,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,5,6,5,5,5,4,4,4,4,5,4,6,6,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,5,4,5,4,4,4,4,4,4,4,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,6,7,8,8,8,9,12,12,14,15,16,19,19,17,15,17,18,17,20,17,20,19,20,23,23,24,22,22,22,23,22,21,23,21,23,21,19,20,22,23,20,22,20,22,22,22,20,19,22,20],[29,29,29,29,29,28,28,28,28,28,28,27,28,25,27,25,27,27,27,28,27,27,27,28,26,27,28,27,28,28,26,27,28,27,27,28,27,27,28,28,28,27,27,27,26,26,26,24,25,24,23,22,23,20,19,19,18,17,17,17,13,11,8,6,5,4,3,3,3,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,7,6,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,4,5,5,4,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,3,3,3,4,4,4,5,4,5,4,3,4,4,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,3,3,4,3,3,4,4,3,3,3,4,3,4,4,4,5,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,6,7,8,10,12,12,11,12,13,13,12,14,15,16,16,17,18,21,20,21,22,22,22,24,21,21,22,21,22,21,21,24,22,22,22,24,25,28,26,26,25,26,25,26,26,26,26,26,26,26,26,26,26,26,26,27,26,27,27,26,26,26,27,26,26,25,25,25,23,24,23,23,22,21,19,20,18,17,15,13,12,10,9,7,5,4,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,6,6,6,5,5,5,5,4,4,4,5,5,6,6,5,5,5,4,4,5,4,4,4,4,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,6,6,6,4,3,3,3,3,3,3,3,3,3,4,4,5,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,3,3,3,4,4,4,4,4,5,5,5,6,5,5,5,5,5,4,5,5,5,4,4,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,6,7,9,9,10,11,14,14,15,17,16,20,19,18,17,18,18,19,22,20,22,21,22,25,23,23,22,22,22,25,23,23,23,22,23,23,21,22,23,22,22,22,22,21,22,23,20,21,23,23],[28,28,28,28,28,28,28,28,27,27,27,26,27,24,26,24,26,26,26,27,27,27,27,27,27,27,28,27,28,28,27,27,28,28,28,28,27,28,28,28,27,27,27,27,27,26,25,24,24,23,22,22,22,21,19,20,19,18,17,17,15,13,9,7,6,5,4,4,4,3,3,2,3,2,3,3,3,4,4,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,8,8,7,6,6,6,7,6,6,6,6,6,6,6,6,6,5,6,6,6,5,6,5,5,6,6,6,6,6,5,6,6,5,5,5,4,5,5,5,4,5,5,4,4,4,5,5,5,6,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,5,4,4,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,5,5,5,5,5,5,5,5,5,6,5,5,5,4,5,4,5,4,4,4,4,3,4,4,4,3,4,4,3,3,3,4,3,3,4,3,3,4,4,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,3,3,4,3,3,4,4,4,5,4,4,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,2,3,3,2,2,2,3,2,2,3,3,2,3,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,4,4,3,3,4,4,4,4,5,6,6,7,9,9,11,13,13,12,12,14,13,13,15,15,14,15,16,18,19,19,21,21,22,22,23,21,21,22,21,20,21,22,24,21,22,23,25,26,28,27,27,26,27,27,27,27,27,26,26,27,27,27,26,27,26,27,27,27,27,26,27,25,25,27,25,26,25,25,26,24,22,24,23,23,21,20,20,19,18,16,14,13,11,11,8,6,5,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,6,6,5,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,3,2,2,3,3,3,3,3,3,4,4,4,5,5,5,6,5,5,4,4,3,4,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,4,4,5,7,7,7,5,4,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,1,1,2,2,1,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,5,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,4,4,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,2,2,3,3,3,3,3,2,3,3,3,3,3,4,4,3,3,3,4,3,3,3,3,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,5,6,7,7,8,9,9,11,10,14,14,15,17,17,19,17,18,17,18,18,18,21,19,20,20,22,23,23,23,22,22,22,24,22,22,22,22,22,23,20,22,22,22,21,22,21,21,22,23,20,20,23,21],[28,27,28,27,28,28,27,27,28,26,26,26,26,24,26,24,26,26,25,26,26,26,26,26,26,26,27,26,27,27,26,27,27,27,27,27,26,27,27,27,27,26,26,26,26,26,25,24,24,24,22,22,22,21,19,21,19,18,17,17,15,13,10,8,7,6,5,5,5,4,4,4,4,3,4,4,5,5,5,5,4,5,5,4,4,5,5,5,5,5,6,7,6,6,7,7,6,7,8,7,7,8,8,8,8,9,9,9,9,10,10,9,8,7,8,8,8,8,8,8,8,7,7,8,8,7,7,8,7,7,8,7,6,7,8,8,8,7,7,8,7,7,7,7,6,6,7,7,6,7,7,6,5,6,7,6,7,7,7,8,7,6,6,7,6,6,6,6,6,6,6,6,5,6,7,6,6,6,6,6,6,5,5,6,5,5,5,6,5,5,6,5,5,5,6,7,7,7,6,7,7,7,7,7,7,7,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,4,5,5,4,4,5,5,5,5,5,5,6,6,6,7,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,3,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,3,4,4,4,4,4,4,5,5,6,7,7,8,9,10,12,14,15,12,14,15,15,15,17,17,16,18,19,18,20,20,22,22,24,22,24,22,20,22,20,20,20,22,23,19,20,23,24,25,27,25,26,25,25,27,27,27,27,27,26,26,27,27,27,27,27,27,26,27,27,26,26,25,25,26,25,26,25,25,26,23,24,24,24,23,22,22,21,20,18,17,16,14,14,12,9,7,5,4,4,4,4,3,3,3,3,4,3,3,4,5,4,4,5,5,5,6,6,7,6,7,7,7,7,7,7,6,5,6,5,6,6,6,8,7,6,7,6,6,6,5,5,5,5,5,5,4,4,4,4,3,3,3,2,3,3,3,3,3,3,3,4,3,3,4,4,4,5,6,6,6,7,7,6,6,5,5,5,5,5,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,6,6,5,5,4,4,4,4,5,4,5,5,6,6,7,7,7,7,7,7,7,6,6,5,5,5,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,3,3,4,4,4,4,4,5,5,6,6,5,6,6,6,6,7,7,7,7,7,8,7,7,8,7,7,7,6,6,7,6,6,6,5,5,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,1,2,2,1,1,0,1,1,1,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,4,4,4,5,4,4,4,4,4,4,4,4,4,4,3,3,4,3,2,2,3,3,3,3,3,3,3,4,4,3,4,3,4,4,4,4,4,5,4,3,3,3,2,2,3,3,2,3,4,3,3,4,4,4,4,4,4,4,4,5,6,7,8,8,9,10,10,10,10,14,14,16,17,18,21,20,19,17,19,20,19,22,19,22,21,21,25,24,24,24,25,24,25,25,24,24,23,24,23,21,23,25,23,21,23,22,21,23,24,20,20,22,20],[27,27,27,28,28,27,28,27,27,27,26,26,27,24,27,24,27,26,26,27,26,25,27,27,26,27,27,27,27,28,27,28,28,28,27,28,28,28,28,28,28,27,27,28,27,26,26,25,25,25,23,23,23,22,21,21,19,19,17,18,16,13,11,9,7,7,6,5,5,5,5,4,5,4,5,5,5,6,6,5,5,7,6,5,6,7,7,7,8,8,8,9,9,9,10,10,9,10,11,10,11,11,11,10,12,12,12,12,12,13,13,12,11,11,11,11,11,12,11,11,11,10,10,11,11,10,10,11,10,10,11,10,9,10,10,10,10,10,10,10,10,9,10,10,9,9,9,9,8,9,9,8,8,8,9,9,9,10,9,10,9,8,8,9,8,7,9,9,8,7,8,9,8,8,9,9,8,9,8,8,9,7,8,8,8,8,8,8,8,8,8,7,7,8,9,10,10,10,9,10,10,10,10,10,9,9,9,8,8,8,8,9,8,8,8,8,7,8,8,7,7,8,7,6,7,7,6,5,6,7,5,6,7,7,8,9,8,9,9,8,8,8,8,8,7,7,8,7,6,7,7,6,6,7,8,7,8,8,8,7,7,6,6,6,6,6,6,7,6,6,6,7,6,6,6,7,8,7,7,7,7,6,6,5,6,6,5,5,5,6,5,5,6,5,5,5,6,5,5,4,4,5,5,5,4,5,5,4,5,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,4,5,4,4,5,6,6,6,6,7,7,9,10,10,13,14,14,14,14,16,15,15,16,18,17,17,19,21,20,21,23,22,24,22,24,21,20,22,21,19,21,21,21,20,21,22,25,26,26,24,25,25,25,26,27,26,26,26,26,26,26,27,26,27,26,27,26,27,27,26,26,25,26,26,25,26,25,25,26,24,25,26,24,24,24,22,23,22,19,17,17,16,14,12,10,8,7,6,5,5,5,5,4,4,4,4,4,5,4,5,5,5,7,6,7,7,7,8,7,8,9,9,8,8,8,7,7,8,7,7,9,8,9,9,7,9,8,7,7,8,6,6,5,7,6,5,6,5,5,4,4,4,3,4,4,3,4,4,3,4,5,4,4,6,6,5,6,7,7,9,9,8,8,8,7,7,6,6,7,6,6,5,6,6,6,5,6,6,6,6,6,6,5,5,5,6,5,6,6,5,4,5,6,5,6,6,5,5,5,6,6,7,8,9,9,7,7,6,7,6,7,7,6,7,8,8,9,9,9,9,10,10,9,9,8,9,8,8,8,7,7,7,7,6,5,6,5,5,5,6,5,5,5,5,4,5,5,6,4,4,6,4,4,5,5,4,4,5,4,4,4,5,4,3,4,5,3,3,5,5,4,4,4,4,4,5,5,4,5,5,5,4,4,6,5,5,5,5,5,5,4,5,5,6,6,6,7,7,8,8,7,8,8,8,9,9,9,10,10,10,10,10,10,10,10,10,10,9,9,9,8,8,8,7,6,5,5,5,5,5,4,4,4,4,3,4,5,3,3,3,3,2,2,3,2,1,0,1,2,2,2,2,3,3,4,5,5,4,5,4,4,5,4,4,5,5,5,4,5,4,5,4,4,4,4,4,3,3,3,3,2,3,3,3,3,4,4,4,4,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,3,5,4,5,5,5,4,6,5,6,5,6,5,7,6,5,4,4,5,4,4,4,3,3,3,4,3,3,4,4,4,4,5,5,5,6,6,6,6,6,7,8,9,10,10,10,12,10,12,12,15,15,18,20,19,22,22,21,20,22,23,19,23,20,22,24,22,25,24,24,25,24,25,27,25,24,24,23,23,22,21,22,24,24,22,24,22,22,24,24,21,19,23,22],[29,29,29,29,29,28,28,29,27,27,27,27,28,25,27,25,26,26,26,27,27,26,26,27,26,26,28,27,27,28,27,28,28,28,27,28,28,28,29,28,27,27,27,27,27,26,26,24,25,24,23,23,23,21,19,20,19,17,18,18,14,12,10,8,7,6,6,5,5,5,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,6,6,6,6,7,7,7,7,7,7,8,7,8,8,9,8,9,9,8,9,10,9,10,10,11,11,10,8,9,8,9,8,9,8,8,9,8,8,9,9,8,8,8,8,7,8,8,7,8,8,9,8,8,8,8,8,7,8,8,7,7,8,7,7,8,7,7,6,6,8,7,8,8,8,8,8,7,7,7,7,6,7,7,6,6,7,7,6,7,7,7,6,7,7,7,7,6,6,7,6,6,6,7,6,6,6,6,6,6,7,8,8,7,7,7,8,7,7,8,7,7,7,7,6,7,7,6,7,7,7,6,6,6,6,5,5,6,6,5,5,6,5,5,6,5,5,5,6,6,7,6,6,7,7,7,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,6,6,6,6,5,5,5,5,4,5,5,4,5,5,4,4,5,5,5,5,5,5,6,6,5,6,5,5,5,5,5,5,5,5,4,4,4,5,4,4,5,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,5,6,6,6,9,10,9,12,13,13,12,13,15,14,14,15,17,18,17,18,20,22,21,22,23,24,22,24,22,20,21,21,21,20,22,23,20,21,22,24,25,27,26,26,26,26,27,27,26,26,26,26,27,27,27,27,27,27,27,27,26,26,26,26,26,26,27,25,26,25,24,26,23,24,23,23,23,23,21,21,20,19,17,16,14,12,11,9,7,6,5,4,4,4,3,3,3,4,4,4,4,4,4,5,5,6,6,6,7,7,7,7,7,7,7,7,8,7,6,6,6,5,5,6,6,7,7,6,6,7,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,7,6,6,6,6,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,3,4,4,5,4,4,4,4,4,4,4,4,4,5,5,6,7,8,7,6,6,5,5,5,5,6,5,5,6,7,7,8,7,7,8,8,7,7,7,7,6,7,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,2,3,3,2,3,3,3,2,3,3,2,2,3,3,3,2,3,3,2,3,3,3,3,2,2,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,7,7,6,7,7,7,7,7,8,7,8,8,8,8,8,8,8,8,7,7,7,7,7,7,6,5,5,5,5,5,4,4,4,4,4,4,3,4,3,3,2,2,2,2,2,1,1,1,1,0,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,3,3,3,4,3,2,3,3,2,2,3,3,2,3,3,3,3,3,4,3,4,3,4,4,4,4,6,7,8,8,9,11,10,12,12,16,16,16,18,18,23,20,19,20,22,21,19,25,21,23,24,22,26,25,26,25,24,24,27,25,25,24,24,25,25,22,23,26,25,22,25,23,23,24,25,20,21,25,22],[29,28,28,28,28,28,28,27,27,27,26,26,26,24,26,25,26,25,25,27,25,26,26,26,26,26,27,26,27,27,26,27,28,28,27,28,27,28,28,28,28,27,27,27,27,26,26,25,25,24,24,23,23,22,20,21,19,18,17,16,14,12,10,8,7,6,5,5,5,5,5,4,4,4,4,5,5,6,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,9,8,9,9,9,10,10,10,11,10,10,9,9,8,9,9,9,9,9,9,8,7,8,9,8,7,9,8,7,8,8,7,7,8,8,8,7,8,8,7,7,7,7,7,7,7,7,7,8,7,6,6,6,7,8,8,8,7,8,7,7,7,7,7,7,7,7,7,6,7,7,6,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,6,6,6,7,6,6,6,6,6,6,6,6,6,5,6,6,6,5,6,6,5,5,5,5,4,5,6,6,7,7,7,7,7,7,7,6,6,6,6,6,5,6,5,5,5,5,4,5,5,5,6,6,5,5,4,5,4,4,5,4,4,4,5,4,4,4,5,4,4,5,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,7,9,8,9,12,12,13,11,11,14,14,13,14,16,16,17,18,20,21,20,22,22,24,23,24,21,20,22,22,20,20,22,23,19,21,23,24,25,27,26,27,26,26,27,27,27,26,27,27,27,27,28,28,28,27,28,27,27,27,26,27,24,26,26,25,26,26,25,27,24,24,25,23,23,22,22,21,20,20,17,15,14,11,10,8,7,5,4,4,4,4,3,3,3,3,4,3,3,4,4,4,5,5,5,6,5,6,6,7,7,7,7,7,7,6,6,6,5,5,5,6,6,7,8,6,7,7,6,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,4,4,5,5,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,5,7,7,6,6,5,4,5,4,5,5,5,5,6,6,7,7,7,7,7,7,7,7,6,6,6,6,6,5,6,5,5,5,5,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,2,3,2,3,2,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,5,6,6,6,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,7,7,7,7,7,7,7,6,6,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,7,8,7,9,10,10,11,11,14,15,16,17,17,21,20,20,19,21,20,20,23,21,22,24,22,25,23,25,25,24,23,25,24,24,25,24,24,23,21,23,24,24,21,24,23,22,24,24,21,21,24,23],[29,28,28,28,28,28,28,27,27,26,27,26,26,24,26,25,26,26,25,26,25,25,27,26,25,26,27,26,27,26,25,27,28,28,27,27,27,28,28,28,28,27,26,27,27,26,26,24,25,24,22,22,22,22,20,21,20,20,18,17,15,13,10,8,7,6,5,5,5,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,5,5,5,6,5,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,9,9,9,9,10,10,9,8,8,8,9,8,9,8,8,8,8,7,8,8,7,7,8,7,7,7,7,6,7,7,8,7,7,7,7,7,6,7,7,7,6,7,7,6,7,7,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,7,7,7,7,7,6,6,6,7,6,6,6,6,6,6,5,5,6,5,5,5,5,5,6,6,7,7,6,6,7,7,6,6,7,6,6,6,6,6,6,6,5,5,6,6,5,5,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,6,6,7,7,7,7,7,7,7,7,6,6,6,5,5,6,5,5,5,5,5,5,5,5,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,4,4,5,5,5,6,5,6,7,9,8,9,11,12,13,12,12,13,14,14,13,16,18,16,17,20,21,20,21,22,23,22,23,23,20,22,21,20,20,22,22,20,21,24,24,24,26,26,26,26,26,27,27,27,27,27,27,27,28,28,28,28,27,27,26,27,27,26,27,24,26,26,26,27,26,26,26,24,24,24,24,23,23,22,22,20,21,17,17,14,12,10,8,7,5,5,5,4,4,4,3,3,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,7,7,7,6,6,6,6,5,5,5,6,6,7,7,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,6,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,7,6,5,5,4,4,4,4,5,5,5,5,6,7,7,6,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,6,6,6,6,6,6,6,7,7,7,7,7,8,8,7,8,7,7,7,8,7,7,7,7,7,6,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,4,3,3,3,3,3,3,4,4,3,3,3,3,4,4,3,3,4,4,3,3,3,4,3,3,3,2,2,2,2,3,3,2,3,3,3,3,4,4,4,4,4,4,4,4,6,7,8,8,10,11,11,12,12,15,16,15,18,17,20,20,18,20,20,20,20,25,20,24,23,23,26,24,24,26,25,24,26,26,24,25,25,26,23,24,24,25,26,22,26,24,23,25,25,21,23,26,24],[29,29,29,29,29,29,28,28,28,28,28,26,28,24,27,25,27,27,26,28,27,26,27,27,26,27,28,26,28,28,26,28,28,29,27,28,28,28,28,28,28,28,27,27,27,26,26,24,25,24,23,23,23,22,19,21,20,18,18,19,14,11,9,7,6,5,4,4,4,3,3,3,3,3,4,3,4,4,4,4,4,4,4,3,4,4,4,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,7,6,7,7,7,7,7,8,8,7,7,6,6,7,7,7,7,7,7,6,6,7,7,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,5,6,6,5,5,6,6,5,6,6,5,5,5,6,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,6,5,5,5,6,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,6,6,6,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,5,5,6,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,5,5,5,4,4,4,4,3,3,4,3,3,3,4,3,3,3,4,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,4,4,4,4,4,5,7,8,8,11,14,14,12,11,14,14,13,14,17,18,16,18,20,22,21,22,24,24,23,24,22,20,22,21,21,21,21,22,22,21,23,24,24,27,26,26,26,26,27,27,27,27,28,28,27,28,28,28,28,28,28,28,28,28,27,28,26,26,28,26,28,27,26,27,25,24,24,24,24,25,21,21,21,20,18,16,15,12,9,7,6,5,4,4,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,5,7,6,6,5,4,3,4,3,4,5,4,4,4,5,5,6,5,5,6,6,5,6,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,5,5,5,4,5,5,5,5,6,6,6,6,6,6,7,6,6,6,7,6,6,5,6,6,5,5,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,1,2,2,1,1,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,2,3,3,3,3,4,3,3,3,3,4,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,6,7,7,8,10,10,11,12,14,17,16,18,19,20,20,18,19,22,20,20,24,21,24,24,22,26,24,25,26,26,24,26,25,25,24,25,26,25,24,24,26,25,22,25,23,24,25,26,22,23,26,24],[29,29,29,29,29,29,28,28,28,27,28,27,27,25,26,25,26,26,26,27,27,27,26,28,27,26,28,27,28,27,27,28,28,29,28,28,28,28,29,29,29,28,29,28,28,27,27,26,26,24,25,23,23,22,20,20,19,18,18,17,14,12,9,7,6,5,4,4,4,3,4,3,3,3,4,4,4,5,5,4,4,4,4,4,4,5,4,5,5,5,5,5,5,6,6,6,6,6,7,6,6,7,7,7,7,8,8,8,8,9,9,8,7,7,7,8,7,7,7,7,8,6,6,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,5,6,6,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,6,6,5,5,6,5,5,5,5,5,5,4,5,5,4,4,5,5,4,5,5,6,6,6,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,5,6,8,7,10,12,13,11,11,14,13,12,14,17,15,15,17,19,20,19,22,22,23,23,24,23,21,22,21,21,22,23,23,22,23,24,26,27,29,28,28,28,28,28,29,28,28,28,28,28,29,29,29,28,28,29,28,28,28,27,28,27,26,27,26,26,27,26,27,25,24,24,24,24,23,23,20,20,19,16,16,15,11,10,8,6,5,4,4,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,6,5,5,6,6,6,6,6,6,5,5,5,5,5,6,6,6,6,5,6,6,5,5,5,4,4,4,5,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,4,5,6,6,6,5,4,4,4,3,4,4,4,4,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,7,6,7,6,6,6,6,6,6,6,6,6,5,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,3,3,2,2,3,3,3,2,3,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,6,7,7,9,9,9,10,11,14,14,16,18,18,21,20,20,19,21,20,20,23,21,23,24,22,24,25,24,25,25,24,25,24,24,25,24,24,24,22,23,25,25,22,24,24,24,24,25,22,22,25,24],[29,28,28,28,28,28,28,27,27,27,26,27,26,24,26,25,26,26,26,26,26,26,27,27,26,27,27,26,28,26,26,27,27,28,27,28,27,28,27,27,28,27,27,27,27,26,25,24,24,23,23,21,21,21,19,18,19,18,16,16,13,11,9,7,6,5,5,5,4,4,4,4,4,3,4,4,5,5,5,5,4,5,5,4,4,5,5,6,5,5,5,6,6,6,7,6,6,7,7,7,7,7,7,7,8,8,8,8,9,9,9,8,8,7,7,8,8,7,7,8,8,7,7,8,7,7,7,8,7,6,7,7,6,6,7,7,7,6,6,7,7,6,7,7,6,6,7,6,6,7,6,6,6,6,6,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,6,5,5,5,5,5,5,5,6,6,6,5,6,6,6,5,6,6,6,6,5,6,6,6,5,5,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,5,5,5,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,5,5,6,7,7,8,11,10,12,11,9,11,12,12,12,13,15,15,15,19,20,19,20,22,22,22,23,21,22,22,21,18,20,22,21,20,20,23,24,23,26,26,27,27,26,27,27,27,27,27,27,27,28,28,27,27,27,28,27,27,27,26,26,25,25,26,25,25,26,25,26,23,24,25,24,24,23,22,22,20,20,17,15,13,11,9,8,6,5,4,4,3,4,4,3,3,3,3,3,3,4,4,4,4,5,5,4,5,6,6,6,6,7,7,7,6,7,6,6,5,5,6,6,6,7,7,6,6,6,6,5,5,5,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,5,5,5,5,5,4,4,4,4,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,6,5,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,4,5,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,5,6,6,6,6,6,6,6,7,6,6,7,7,7,6,6,6,7,6,6,6,6,6,6,5,6,5,5,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,6,8,7,9,10,9,10,12,14,15,17,19,19,21,20,20,19,21,20,20,23,21,23,24,23,26,24,25,24,24,23,26,26,23,25,25,24,23,23,25,25,25,22,25,25,23,24,26,22,22,25,24],[29,28,28,28,29,28,28,27,27,27,26,25,27,23,25,23,26,25,25,26,25,24,26,27,25,27,27,25,27,27,25,27,27,27,26,27,26,27,27,27,27,27,27,27,27,26,24,23,24,23,23,22,21,21,19,19,20,18,17,16,14,12,9,7,6,5,4,4,4,4,4,3,3,3,4,4,4,4,5,4,4,4,4,4,4,5,4,5,5,5,5,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,7,6,7,7,7,7,7,7,8,6,6,7,7,6,6,7,6,6,7,6,6,6,7,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,5,5,6,6,6,6,6,7,6,5,6,6,6,6,6,6,6,6,6,6,5,6,6,5,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,6,6,6,5,6,6,5,5,6,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,5,4,4,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,5,4,4,4,5,5,5,6,6,5,4,5,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,4,4,4,4,3,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,7,7,9,11,12,12,12,11,13,12,13,13,14,16,15,15,18,21,19,20,22,22,21,23,21,21,21,19,19,21,21,22,21,20,21,25,23,26,25,26,25,25,26,26,26,26,26,26,26,27,27,27,27,27,27,27,26,27,26,27,24,25,25,25,26,26,25,26,25,24,25,23,24,24,20,21,21,19,17,15,14,12,9,8,6,5,4,4,4,4,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,5,5,6,6,6,7,7,6,6,6,5,5,5,5,4,4,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,6,5,5,5,4,5,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,2,3,3,3,3,3,4,5,7,7,6,5,3,3,4,3,4,4,4,4,4,5,5,5,5,5,6,6,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,2,3,3,3,3,3,3,2,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,6,7,7,9,10,10,10,11,14,15,17,19,19,21,20,19,20,20,21,20,23,21,24,24,22,26,24,25,24,26,23,26,25,25,25,25,25,24,23,25,26,25,24,25,25,25,24,25,23,23,25,25],[29,29,29,29,29,29,28,28,28,27,27,27,27,25,26,25,26,26,26,27,26,26,27,28,26,28,28,26,28,28,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,25,26,25,25,23,23,23,21,21,19,20,20,17,14,12,8,6,5,5,4,4,4,3,4,3,3,3,4,4,4,4,5,4,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,9,9,8,7,7,7,7,7,7,7,7,7,6,6,7,7,6,6,7,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,5,5,6,6,5,6,6,5,5,5,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,6,5,5,5,6,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,4,4,4,5,4,4,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,5,5,4,4,4,3,3,4,3,3,3,4,3,3,4,3,3,3,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,4,3,3,4,4,3,3,3,3,4,4,3,3,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,5,5,7,7,8,11,14,12,11,11,12,12,12,14,15,14,15,15,18,19,19,21,22,23,23,24,22,23,23,21,19,22,22,23,21,22,24,24,25,28,26,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28,28,26,27,28,26,27,27,26,26,25,24,24,24,24,23,21,20,20,19,16,15,13,11,10,7,6,5,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,6,6,7,6,5,6,6,5,5,5,5,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,5,5,6,6,5,6,5,4,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,4,4,7,6,5,4,4,3,4,3,4,4,4,4,4,5,5,6,5,5,6,6,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,6,6,6,6,5,6,6,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,2,2,2,3,3,3,3,3,2,2,3,3,3,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,5,6,7,7,8,10,9,10,11,14,14,16,18,17,21,21,19,18,20,20,21,24,21,24,22,23,26,25,24,24,25,24,25,26,25,25,23,25,25,23,23,25,25,24,25,24,25,24,26,23,22,24,25],[28,28,27,28,27,27,27,26,27,26,25,26,25,24,24,25,25,25,26,26,25,25,26,25,25,26,26,25,26,25,24,26,27,27,26,26,25,26,26,26,27,26,26,26,26,26,26,23,23,23,23,20,20,21,19,19,18,18,16,15,13,11,8,6,6,5,4,4,4,3,4,3,3,3,4,4,4,5,5,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,6,6,7,7,7,7,8,8,8,8,9,9,8,7,7,7,7,7,7,7,7,8,6,6,7,7,6,7,7,7,6,7,7,6,6,7,7,7,6,6,7,6,6,6,6,6,6,6,6,5,6,6,5,6,5,6,6,6,7,6,7,6,6,6,6,6,5,6,6,6,5,6,6,5,6,6,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,6,6,6,5,6,5,6,5,5,5,5,6,5,5,6,5,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,4,5,5,6,6,6,6,6,6,6,6,5,5,6,5,5,5,5,4,4,5,4,4,4,5,5,6,5,5,4,4,4,3,3,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,5,4,4,3,4,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,5,6,6,7,10,9,10,10,10,11,12,10,11,13,13,12,13,16,16,17,19,19,21,19,22,20,20,21,18,18,18,20,20,18,20,23,24,23,26,25,26,26,26,27,27,27,27,27,28,28,28,28,28,28,28,28,27,27,28,27,26,26,26,26,25,25,25,25,26,24,23,23,23,22,21,20,20,19,18,15,13,13,10,9,7,6,5,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,5,6,6,5,6,6,6,6,6,6,6,5,5,5,6,6,6,7,7,6,6,6,5,5,5,5,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,6,5,5,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,7,6,6,5,4,3,4,4,4,5,4,4,5,5,6,5,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,6,6,5,6,6,5,5,5,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,2,2,2,3,3,2,3,3,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,6,7,7,8,10,9,10,11,14,14,16,17,17,20,20,20,17,19,18,19,22,20,22,22,22,24,23,23,23,25,22,25,25,24,24,23,23,24,21,22,24,24,22,24,23,23,24,25,22,21,24,23],[28,27,27,27,27,27,27,26,25,26,24,24,24,22,24,24,25,23,24,24,22,23,24,23,22,24,24,23,25,24,23,25,25,26,25,25,24,25,25,25,26,24,24,24,25,25,24,22,22,22,22,20,20,21,20,19,18,18,16,16,13,11,9,7,6,6,5,5,5,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,7,6,6,7,7,7,7,7,8,8,8,8,9,8,7,7,7,8,8,8,7,8,8,7,6,8,7,7,7,7,7,6,7,7,6,6,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,6,6,6,7,7,6,6,6,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,4,5,5,5,6,6,6,8,10,10,11,11,10,10,12,11,11,13,13,13,13,16,17,16,18,20,21,19,21,21,18,20,18,16,18,21,20,18,20,23,22,22,25,23,26,26,25,26,26,26,25,25,26,25,26,26,26,26,26,26,25,26,27,25,25,23,23,24,22,25,24,24,25,23,22,22,20,21,21,20,19,18,17,16,14,12,11,9,8,7,5,4,4,4,4,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,6,5,6,6,7,6,6,6,6,6,6,5,5,6,7,6,7,7,6,6,6,5,5,6,5,4,5,5,5,4,4,4,4,4,4,4,3,4,3,3,4,4,3,4,4,4,4,4,4,4,5,5,6,6,7,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,7,6,4,4,4,4,4,4,5,4,4,5,5,6,6,5,5,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,4,4,5,5,5,6,6,5,6,6,6,6,7,6,6,7,7,7,7,6,6,6,6,6,5,6,6,6,6,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,6,7,8,8,9,10,10,10,11,13,13,16,17,17,20,19,19,16,19,18,19,23,20,22,22,21,25,23,23,23,24,22,24,25,23,23,23,24,23,21,22,23,24,22,24,24,23,24,25,22,21,23,23],[27,28,27,27,27,27,28,27,26,26,25,24,26,23,25,24,25,24,23,25,22,21,25,24,22,25,25,24,26,25,23,26,26,26,25,27,25,26,26,25,27,25,24,25,26,26,25,22,24,24,23,22,22,21,20,20,19,19,19,17,15,12,9,7,6,5,4,4,4,4,4,3,4,4,4,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,8,8,7,6,7,6,7,7,7,7,7,7,6,6,7,7,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,5,5,6,5,5,6,6,6,5,5,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,5,4,5,4,4,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,6,6,8,11,11,12,11,11,13,13,12,13,15,14,14,16,17,18,19,20,20,22,21,22,21,20,21,20,18,20,21,21,20,21,22,23,23,27,25,25,25,25,26,26,26,26,26,26,26,26,26,27,26,26,26,25,26,26,26,26,24,25,25,25,26,25,24,25,22,23,23,22,22,22,18,20,20,18,17,15,13,12,9,8,6,5,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,7,6,7,6,7,5,5,6,6,6,7,7,7,7,6,6,6,6,5,6,5,5,5,5,5,4,4,4,4,4,4,4,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,7,7,8,5,4,3,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,6,6,5,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,7,8,8,9,10,10,10,11,14,15,16,18,17,20,19,19,18,20,19,20,23,20,22,23,21,25,25,24,24,26,24,24,26,25,24,24,25,24,22,22,26,26,24,25,23,25,24,26,25,22,24,25],[27,27,27,27,27,26,26,26,25,25,24,24,25,23,24,23,24,23,23,24,22,21,24,23,21,24,25,22,25,23,22,25,25,25,25,26,24,26,26,26,26,25,23,25,25,25,25,21,23,23,21,18,21,20,18,19,19,18,17,16,13,11,7,5,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,4,5,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,6,7,7,7,7,7,8,8,8,8,9,8,8,7,7,7,7,8,8,8,8,8,7,7,8,7,7,7,7,7,7,7,7,6,7,7,7,7,7,6,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,6,5,6,6,6,6,6,5,6,6,6,5,6,6,5,5,5,5,5,6,5,5,6,6,5,5,6,6,5,5,5,5,5,5,6,5,5,5,5,5,5,5,6,7,6,6,6,7,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,6,6,6,6,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,5,4,5,5,5,4,4,4,4,4,4,5,4,4,4,5,4,4,5,5,5,5,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,3,4,4,4,4,4,4,4,5,5,6,7,8,10,11,9,10,11,10,11,11,12,12,12,16,16,16,19,19,20,20,20,19,18,19,19,18,18,20,20,18,20,22,20,22,25,23,24,24,24,24,25,25,25,25,25,25,25,26,26,26,24,26,25,26,24,25,25,22,25,24,23,24,23,22,24,21,22,22,19,20,19,17,18,16,16,14,13,12,10,8,7,6,5,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,5,5,7,6,6,6,7,6,6,6,7,6,6,6,6,7,7,7,8,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,6,6,7,7,7,7,6,6,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,6,5,4,3,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,5,5,4,5,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,3,3,3,4,3,3,3,3,2,3,3,3,2,3,3,2,2,3,2,2,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,1,2,2,2,2,2,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,3,3,3,3,4,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,5,5,5,5,6,6,7,8,8,10,9,11,11,13,12,15,16,16,20,17,20,16,18,17,18,20,18,20,21,19,22,23,22,22,22,21,24,23,22,23,22,22,21,21,21,23,22,21,21,21,22,22,24,21,19,22,23],[29,29,29,29,29,29,28,28,28,28,27,27,28,26,26,26,26,26,26,27,25,26,27,26,25,27,27,25,27,27,25,27,28,27,27,28,27,28,27,27,28,27,27,27,27,26,26,24,25,24,24,22,23,22,20,21,20,19,19,19,16,13,9,6,5,5,3,3,4,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,6,7,7,7,7,8,8,8,8,8,9,8,7,7,6,7,7,7,8,7,8,6,7,7,7,6,6,7,6,6,6,6,6,6,7,7,6,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,6,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,5,4,4,4,4,3,3,4,4,3,3,4,4,3,3,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,5,6,7,8,9,12,13,12,11,13,13,11,12,14,13,14,16,17,17,19,19,20,22,21,22,22,20,22,19,19,20,21,21,20,21,24,24,25,26,25,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,25,26,26,26,26,25,24,26,23,23,24,23,23,22,19,20,19,18,16,15,13,11,9,7,6,5,4,4,3,4,4,3,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,7,7,7,6,6,6,6,6,5,6,6,6,7,7,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,7,7,7,7,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,7,7,5,4,3,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,5,4,5,5,5,5,6,6,5,6,6,6,6,6,6,5,6,5,5,5,5,5,5,4,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,5,7,8,8,9,9,11,11,11,12,14,15,15,17,17,21,20,19,18,19,19,20,23,21,23,23,22,26,26,23,25,24,22,25,25,24,24,24,25,24,22,23,25,25,24,25,22,25,24,26,25,22,24,25],[29,29,29,29,29,29,28,28,28,27,28,28,28,27,26,27,26,26,26,25,26,26,25,26,26,26,27,26,27,27,26,27,27,28,27,27,27,28,27,27,27,27,27,27,26,26,26,24,23,23,24,23,22,22,22,21,20,21,20,18,15,14,9,5,5,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,8,8,9,9,7,7,6,6,7,7,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,5,5,6,6,5,5,6,5,5,5,5,5,5,5,5,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,6,6,6,5,5,6,5,5,6,5,5,5,4,4,5,5,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,4,4,4,5,5,5,6,5,5,4,4,4,4,3,4,4,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,4,3,3,3,4,3,4,4,4,4,3,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,3,3,4,5,6,7,10,12,13,10,10,13,12,12,12,13,13,13,14,17,17,17,20,21,22,21,23,19,19,21,19,18,19,21,21,19,21,22,23,24,26,24,26,26,26,27,27,28,27,28,28,28,28,28,28,28,28,28,28,27,27,27,27,25,26,26,25,26,25,25,26,23,23,24,22,22,21,20,21,19,18,16,14,13,11,9,7,6,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,5,5,5,5,5,4,5,5,4,4,4,4,4,4,3,4,3,4,3,3,4,4,3,4,4,4,4,4,4,5,5,5,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,3,3,3,4,6,6,6,5,4,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,5,5,6,5,5,5,5,5,5,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,6,7,8,8,9,11,10,11,11,13,14,15,17,17,21,19,19,18,20,18,19,23,20,22,22,21,25,24,23,23,24,22,24,24,23,23,23,23,23,22,22,25,23,23,24,23,23,22,25,23,21,24,24],[28,29,28,28,28,28,28,28,27,26,26,25,27,25,25,26,25,25,26,25,25,25,25,25,25,26,26,24,26,25,24,26,26,26,26,27,26,27,26,26,26,26,25,25,25,25,25,22,23,23,21,21,21,21,19,19,20,19,18,17,14,12,9,6,5,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,4,4,3,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,7,6,5,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,6,5,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,6,6,5,5,5,5,5,5,5,5,4,4,4,4,5,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,4,4,4,6,7,8,10,10,12,10,11,12,13,12,12,14,12,13,14,17,16,17,19,21,22,20,23,21,19,20,19,18,18,21,21,19,20,22,22,23,25,24,25,25,25,26,26,27,26,26,26,26,26,27,27,27,26,27,27,27,26,25,26,25,26,25,23,26,23,24,26,22,22,23,21,22,20,18,20,17,17,15,13,13,11,8,7,5,4,4,3,3,3,3,3,3,4,4,4,3,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,5,5,6,5,6,6,6,6,6,5,5,6,5,5,5,5,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,6,6,6,6,6,6,5,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,2,3,2,2,3,2,2,3,3,3,4,6,5,5,4,4,3,3,3,3,4,4,3,4,4,5,5,4,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,5,4,5,5,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,6,6,7,8,9,10,9,10,10,12,12,14,15,15,19,18,17,16,17,17,17,21,18,19,20,19,22,22,21,22,23,21,23,23,22,21,22,22,22,19,21,23,23,22,22,22,21,22,23,22,20,23,22],[27,29,28,28,29,29,28,28,28,27,27,26,27,25,26,25,26,25,24,26,25,24,25,25,24,26,27,24,27,26,24,27,27,27,26,28,26,27,27,26,27,26,26,26,26,26,24,23,24,23,21,21,22,21,19,20,20,18,19,19,16,13,10,6,5,4,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,6,6,5,5,6,6,6,6,6,6,5,5,6,5,5,5,6,5,5,6,5,5,5,6,6,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,3,3,4,4,3,3,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,6,7,8,9,12,12,10,12,12,13,12,13,13,14,15,16,17,18,19,19,20,22,22,22,21,21,21,20,19,20,20,22,21,21,22,24,24,26,25,26,25,26,27,27,27,27,27,27,27,27,27,27,27,26,27,26,27,26,26,26,24,26,25,25,26,24,24,26,22,22,23,22,22,21,19,20,19,17,16,15,13,11,9,7,5,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,5,5,7,6,6,6,6,5,5,6,5,6,7,6,7,6,6,6,6,5,5,5,5,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,5,5,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,3,2,2,3,3,3,4,6,6,7,5,4,3,3,3,3,4,4,3,4,4,4,4,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,4,5,5,5,4,4,4,4,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,1,1,2,1,1,1,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,6,7,8,8,9,10,10,10,11,13,14,15,16,17,21,18,19,18,20,18,20,22,19,22,22,21,24,24,24,24,24,23,25,25,24,24,23,25,23,23,23,26,26,23,25,24,24,25,25,24,22,25,25],[29,29,29,29,29,30,29,29,29,28,28,28,28,27,27,26,26,27,26,26,27,27,26,28,26,27,28,26,28,27,26,27,28,28,27,28,27,27,27,27,27,27,26,26,25,25,24,23,23,23,24,22,21,21,20,20,20,21,21,19,16,13,9,6,5,4,3,3,3,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,6,6,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,4,5,4,4,5,5,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,5,5,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,7,9,11,14,10,11,15,12,12,14,14,14,14,16,17,17,18,20,21,21,22,23,22,21,22,21,21,20,21,22,21,22,24,25,25,27,26,26,26,27,27,27,27,27,27,27,28,28,28,28,28,27,28,28,28,27,27,27,25,26,27,25,26,25,24,26,23,23,24,22,23,22,20,20,19,18,15,14,13,11,9,7,5,4,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,6,5,5,6,5,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,6,6,6,7,6,6,5,5,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,6,5,5,4,4,3,3,3,3,4,4,3,4,4,5,5,4,4,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,4,4,4,4,5,5,4,5,5,5,5,5,5,4,5,5,4,4,4,5,4,4,3,3,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,6,7,8,8,9,11,10,11,12,13,15,15,18,17,20,19,19,18,20,19,20,22,20,21,23,22,25,25,24,24,25,24,24,26,24,24,24,25,24,22,23,25,24,24,25,23,25,24,26,23,21,25,24],[28,28,28,29,28,29,28,28,28,27,27,27,27,27,26,27,26,27,26,25,26,26,25,26,25,26,27,25,27,26,25,27,27,27,27,27,27,27,27,26,27,26,25,26,25,24,24,23,23,22,22,21,21,22,20,20,20,20,18,18,14,13,8,5,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,5,5,5,6,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,8,8,7,6,6,6,6,6,7,7,7,7,6,6,6,7,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,5,5,5,6,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,3,3,3,4,3,4,4,4,4,4,3,3,4,4,3,3,4,4,4,4,4,4,4,5,4,4,4,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,6,7,7,10,9,11,9,8,12,10,10,12,14,12,12,14,16,16,16,20,21,22,21,22,21,20,20,19,19,18,19,21,19,20,23,23,23,26,26,26,25,26,26,27,27,27,27,27,27,27,27,27,27,26,27,27,27,27,25,26,24,26,25,23,25,24,22,25,21,22,22,21,21,21,18,20,19,17,16,14,13,11,9,7,6,4,4,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,7,6,6,6,6,6,7,7,7,7,6,6,6,6,5,6,5,4,5,5,5,4,5,4,4,4,4,4,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,7,7,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,4,5,5,6,5,4,3,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,4,4,4,5,4,4,3,3,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,6,7,8,8,9,10,10,10,11,13,14,14,16,16,19,18,19,17,18,17,18,20,19,21,22,20,24,23,23,23,24,23,23,24,24,23,23,24,22,21,22,24,23,22,23,22,23,22,24,22,21,22,23],[28,28,28,28,28,28,28,27,28,26,27,27,26,27,26,26,27,26,26,26,25,24,25,26,24,25,27,24,27,26,24,27,27,27,26,27,26,27,26,26,26,26,25,25,25,24,24,23,23,22,22,21,22,20,19,19,19,18,17,17,15,12,9,6,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,3,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,7,6,6,6,7,7,7,7,7,7,6,6,7,6,6,6,7,6,6,7,6,6,6,7,7,7,6,6,6,6,6,6,6,6,5,6,6,5,6,6,5,5,5,6,5,5,6,6,6,5,4,5,5,5,4,5,5,5,5,6,5,5,6,6,6,6,6,6,6,6,6,5,6,5,5,5,6,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,5,4,4,5,5,6,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,4,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,4,3,3,3,3,4,6,6,7,9,10,10,10,11,12,12,12,13,13,13,14,14,16,17,17,18,21,22,21,23,21,21,21,20,19,18,20,21,20,20,22,23,23,25,24,25,25,25,26,26,25,25,26,26,26,26,26,25,25,26,26,25,26,26,24,25,24,24,25,22,24,23,22,24,21,21,21,20,20,20,17,18,18,16,15,13,12,11,9,7,6,5,4,3,3,4,3,4,4,4,5,4,4,5,5,4,5,6,5,5,6,7,6,6,6,7,7,7,6,7,6,6,6,6,7,7,7,7,7,6,6,7,6,6,6,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,6,6,7,7,7,7,6,6,6,6,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,6,6,5,5,4,4,4,4,4,5,4,4,4,5,5,5,5,5,6,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,7,8,8,9,10,10,10,12,12,13,14,15,15,19,17,17,16,18,17,17,20,18,21,21,18,23,20,22,22,23,22,24,24,22,22,22,23,20,19,22,23,23,22,22,21,22,22,22,21,19,22,22],[28,28,28,28,28,29,28,28,28,27,28,28,27,27,26,27,26,27,26,27,27,26,27,27,26,27,27,26,27,26,25,27,28,28,27,28,26,28,27,27,27,26,26,26,25,25,23,24,23,22,24,22,21,21,20,20,19,19,18,17,14,13,9,6,5,4,3,3,3,2,3,2,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,8,8,8,8,8,7,6,6,7,7,7,7,7,7,7,6,6,7,7,6,6,7,6,6,6,6,6,6,7,7,7,6,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,6,5,6,6,6,6,5,4,4,5,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,5,5,6,5,5,5,6,5,5,6,5,5,6,6,6,7,7,6,6,6,6,6,6,6,5,5,5,5,5,6,5,5,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,4,5,4,4,5,5,5,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,4,5,5,6,6,6,6,6,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,4,4,3,3,4,4,3,3,4,3,3,3,4,4,3,4,4,4,4,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,4,5,7,7,9,11,12,10,12,13,12,12,12,14,14,14,16,17,18,19,20,20,22,21,23,21,21,21,21,21,20,21,22,21,21,23,25,24,26,25,26,26,26,26,26,26,26,26,26,26,27,27,26,27,26,26,27,26,27,25,26,25,25,25,24,25,24,23,25,22,21,23,21,21,20,18,19,18,17,15,14,13,11,10,8,6,5,4,3,3,3,4,3,4,4,5,4,5,4,5,5,5,6,6,6,6,7,6,6,7,8,7,8,7,7,7,6,6,6,6,7,7,7,7,6,7,7,6,5,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,7,7,7,7,7,6,6,5,5,5,5,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,6,6,6,5,4,4,4,4,4,4,4,4,4,5,5,6,5,5,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,5,5,6,5,5,5,5,5,4,5,4,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,7,8,9,9,10,11,11,11,11,14,14,15,17,17,20,19,19,18,18,19,19,22,20,22,22,20,24,24,22,23,24,23,24,24,24,24,24,24,24,21,23,25,25,23,25,22,24,24,26,23,21,25,25],[28,28,28,28,28,29,28,28,29,28,28,28,28,28,27,27,27,28,28,27,28,27,26,28,27,27,28,27,28,27,27,28,28,28,28,28,27,28,28,28,28,27,26,26,25,25,24,23,22,22,23,21,20,21,20,20,20,21,19,17,15,13,10,7,6,3,2,2,3,2,2,2,3,3,3,3,3,4,4,3,3,4,4,3,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,7,6,7,7,7,7,7,7,7,7,6,6,7,7,7,6,7,7,6,7,6,6,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,6,5,5,5,5,5,5,6,6,6,6,6,5,6,5,5,6,5,5,5,6,5,5,5,6,5,5,6,6,7,7,6,6,7,7,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,6,6,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,4,4,3,3,4,4,3,3,4,3,3,3,4,4,4,4,4,4,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,5,4,6,7,8,10,11,12,10,10,15,12,11,13,14,12,13,15,17,16,17,21,21,23,23,24,22,21,22,21,20,20,22,22,21,22,24,25,26,27,26,26,26,27,27,28,28,28,28,28,28,27,28,28,28,27,27,28,27,28,26,27,25,27,27,25,27,25,25,27,24,23,24,22,22,21,19,20,19,17,15,15,13,12,11,8,6,4,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,6,6,6,6,7,7,7,7,8,7,8,7,7,7,7,6,6,7,7,7,8,8,7,7,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,7,7,7,7,7,7,6,6,5,5,5,5,4,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,4,6,6,6,5,4,4,4,4,4,5,4,4,5,5,6,6,5,6,5,6,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,7,8,9,9,10,11,11,11,11,14,14,15,18,17,20,18,19,18,19,18,19,21,19,21,22,21,24,25,23,23,24,23,24,25,24,24,24,24,24,22,23,25,24,22,24,23,24,23,26,23,20,24,24],[28,27,27,27,27,28,27,27,27,27,26,26,26,26,26,27,26,27,26,26,27,26,26,27,26,26,27,25,27,27,25,27,28,27,26,27,26,27,27,26,26,26,25,25,24,24,23,22,22,21,22,21,21,21,19,18,19,18,16,16,14,11,9,7,7,4,3,2,3,3,3,3,3,4,4,4,4,5,4,4,4,5,4,4,5,5,5,5,6,6,6,7,6,7,7,7,7,8,7,7,8,8,8,8,8,8,8,9,9,9,9,8,7,8,8,8,8,8,8,8,8,8,7,8,8,8,8,8,8,8,8,8,8,7,8,9,8,8,7,8,8,7,7,7,7,7,7,7,6,7,7,7,6,6,7,7,7,7,7,7,6,5,6,6,6,5,6,7,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,7,7,8,8,8,7,8,8,7,7,7,8,7,7,6,6,7,7,7,7,7,6,6,6,6,6,5,6,6,6,5,6,6,6,5,6,6,5,5,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,7,6,6,6,7,7,7,7,6,6,6,5,6,6,6,5,5,6,5,5,5,6,5,5,6,6,6,6,6,6,6,5,5,5,5,5,4,5,5,4,5,5,5,5,6,5,5,5,5,4,4,5,5,4,5,5,5,5,6,5,6,6,6,6,6,6,6,6,5,5,4,5,4,4,4,4,3,4,4,4,3,3,4,5,6,7,7,8,11,10,10,11,12,11,12,13,12,12,13,14,16,17,17,19,20,22,20,23,21,21,21,20,20,20,21,22,20,21,22,24,25,26,25,24,25,25,25,26,26,26,26,26,26,26,26,26,26,25,26,26,26,25,24,26,23,24,25,22,24,23,22,25,21,21,23,20,20,20,18,18,17,16,15,14,13,11,11,8,6,5,4,4,4,4,4,4,5,5,6,5,5,6,6,6,6,7,7,7,7,8,7,7,8,9,8,8,8,8,7,8,8,8,8,8,9,9,8,8,8,8,7,7,7,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,7,7,7,7,7,8,8,9,9,8,8,7,7,7,7,6,6,6,5,6,6,6,5,6,6,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,6,6,7,6,5,5,5,5,5,6,5,5,6,6,7,7,6,7,7,7,6,6,6,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,5,5,5,6,6,5,6,7,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,3,2,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,4,4,4,4,4,4,3,4,4,4,4,4,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,8,8,9,10,11,12,12,12,13,13,14,16,17,17,19,18,18,18,18,17,18,20,19,20,21,20,23,22,22,22,23,22,24,24,22,23,22,23,21,21,21,22,23,21,22,21,22,22,23,21,19,22,23],[28,28,28,27,28,29,28,28,28,27,27,27,27,27,27,27,27,28,27,27,27,26,27,27,26,27,28,26,28,27,26,28,28,28,28,28,28,28,28,27,28,27,26,26,26,25,24,23,23,23,22,21,21,20,19,19,18,18,17,15,13,11,9,7,6,3,3,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,7,6,6,6,7,7,7,7,7,7,6,6,7,7,7,6,7,6,6,6,7,6,7,7,7,7,6,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,6,6,6,6,6,5,5,4,5,5,4,4,5,5,5,5,5,6,6,5,5,5,6,6,6,6,6,5,5,6,5,6,6,6,5,5,6,6,6,6,6,7,7,7,6,7,7,7,6,7,6,6,6,6,5,6,6,5,6,5,5,5,4,5,5,4,5,5,4,4,4,4,4,4,4,5,4,4,5,5,6,6,6,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,6,7,6,6,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,5,6,7,9,12,11,10,11,12,12,12,13,14,13,15,17,17,17,19,20,21,22,20,23,21,21,22,21,20,21,22,23,21,22,23,25,24,26,25,26,26,27,26,26,27,26,27,27,27,27,26,26,27,26,26,26,27,26,26,26,24,25,25,24,25,23,23,25,22,21,23,20,21,20,18,18,19,16,15,15,14,12,11,8,7,5,4,4,3,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,8,8,7,8,8,8,8,8,8,7,7,7,7,7,8,8,8,8,8,7,7,6,6,6,6,5,6,6,5,5,5,5,4,5,4,4,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,7,7,7,8,8,8,7,6,6,6,5,5,5,5,5,5,5,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,4,5,6,6,7,6,5,4,4,4,4,5,5,4,5,5,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,4,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,5,5,5,5,5,5,5,5,5,5,4,4,3,2,2,3,3,2,2,2,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,0,1,1,1,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,2,3,2,2,3,3,2,2,3,3,2,2,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,6,5,5,5,6,7,8,9,10,10,11,12,12,12,14,14,16,17,17,20,19,19,18,18,19,19,21,20,21,21,22,24,24,23,23,23,23,25,24,24,24,22,24,24,22,23,24,24,24,25,24,24,24,26,24,20,24,24],[27,27,28,27,28,28,28,28,28,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,26,27,28,26,27,28,26,28,28,28,28,28,28,28,28,27,28,27,27,26,26,25,24,23,23,22,22,21,21,21,19,20,19,18,17,16,12,12,9,6,5,4,6,5,3,4,3,3,4,4,5,4,5,5,5,6,5,6,5,5,6,7,6,6,6,7,8,8,8,9,8,8,9,9,9,9,9,9,9,9,10,10,10,11,10,11,10,10,9,10,9,9,9,9,9,9,10,9,9,10,10,10,9,10,10,9,9,9,9,9,9,10,9,10,9,9,10,9,9,9,9,8,9,9,8,9,8,8,8,8,8,8,7,8,8,8,7,6,6,7,7,6,8,8,8,8,7,8,9,7,8,8,8,8,8,8,8,9,8,8,9,8,8,8,9,8,8,8,9,8,8,9,9,10,9,9,9,10,10,10,9,9,8,8,8,8,8,8,8,8,8,8,7,8,8,7,7,7,8,7,7,7,7,5,6,7,5,5,6,6,7,7,8,8,8,8,8,8,8,8,8,8,8,8,7,8,7,8,7,8,8,8,8,8,8,8,8,8,7,7,8,8,7,7,8,7,7,7,8,7,7,7,7,8,7,8,8,7,6,5,6,6,5,5,7,6,6,5,7,6,6,7,7,7,5,5,4,5,5,5,5,5,6,6,5,6,7,7,7,7,7,7,7,6,6,6,5,5,4,4,4,4,4,3,3,4,4,5,5,6,5,6,8,7,9,10,10,10,10,12,12,12,14,15,14,16,17,18,18,19,21,21,23,21,24,22,21,22,21,21,22,23,23,22,23,24,26,26,26,26,26,27,27,27,28,28,27,28,28,28,28,27,27,28,27,27,27,27,27,25,27,24,26,26,22,26,23,24,26,22,22,24,21,21,22,20,20,20,17,17,16,14,13,12,9,7,6,4,5,4,5,4,6,6,7,7,7,8,8,8,9,9,9,9,10,9,10,9,9,10,10,10,10,11,10,9,9,9,10,9,10,10,10,10,10,9,9,9,9,9,8,8,8,8,7,7,7,7,6,6,6,7,6,7,6,7,7,7,8,7,8,8,8,9,9,9,8,9,9,9,10,11,9,9,9,8,9,8,8,8,8,7,7,8,8,8,8,8,7,8,7,7,8,7,6,7,6,6,6,6,5,5,6,5,5,5,5,4,4,4,5,6,7,7,8,7,7,7,6,6,6,7,7,6,7,8,8,8,8,8,8,8,7,7,7,6,6,6,6,5,5,6,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,7,8,7,7,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,2,2,3,3,3,3,3,4,4,5,5,5,6,6,6,7,7,6,7,7,8,7,7,8,7,7,7,7,6,6,6,5,6,5,6,5,6,5,4,5,3,3,4,3,3,3,3,3,3,4,4,4,3,4,5,5,5,6,6,5,5,6,6,5,5,6,6,6,5,5,6,5,5,4,4,3,3,3,3,2,2,2,1,1,0,1,2,2,2,2,2,3,3,3,4,4,4,4,5,5,5,5,6,5,6,6,5,5,4,4,5,4,4,3,5,5,4,3,4,4,4,3,4,4,4,5,6,6,6,6,6,5,6,6,6,6,6,7,7,7,6,8,7,7,7,7,8,6,7,7,8,7,8,8,8,7,8,8,8,8,8,8,9,8,9,10,11,11,13,14,14,14,15,16,16,18,19,20,21,19,23,20,21,19,21,23,23,23,24,24,24,24,26,23,25,25,27,25,25,27,24,26,24,24,24,25,25,23,25,24,25,26,25,24,22,24,25],[28,28,28,28,29,29,29,29,29,28,28,27,28,27,28,27,28,28,27,28,28,27,27,28,27,28,28,27,28,28,27,28,28,29,28,28,28,28,28,28,28,27,27,27,27,26,25,24,24,23,23,22,22,20,19,19,18,17,16,15,12,11,8,7,6,4,4,3,3,2,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,7,7,7,8,8,8,8,8,8,8,8,7,7,7,7,8,7,7,7,7,7,7,8,7,7,7,7,7,7,7,7,7,7,8,8,8,7,7,7,7,6,6,7,7,6,7,6,6,6,6,6,5,5,6,6,6,6,6,6,6,5,6,5,5,5,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,8,8,7,7,8,8,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,6,7,6,6,6,6,6,6,6,6,5,5,6,6,5,5,5,5,5,6,6,7,7,7,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,3,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,5,4,4,5,8,8,10,12,12,10,10,15,12,12,15,16,14,16,19,19,18,21,21,21,24,21,24,22,20,24,22,22,23,24,25,23,24,25,27,26,28,26,26,27,28,27,28,28,27,27,27,28,28,28,27,28,27,27,28,27,27,26,27,26,26,26,23,26,23,23,25,22,23,23,22,22,22,19,19,19,16,15,14,12,11,9,8,6,4,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,6,6,7,7,8,8,8,8,10,8,9,8,9,7,7,7,6,7,9,7,9,9,7,8,7,7,6,6,6,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,7,7,8,8,8,8,7,6,6,6,6,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,5,6,6,6,6,6,5,5,4,5,6,5,5,5,6,7,6,6,6,7,6,6,6,6,5,5,5,5,4,4,4,4,4,4,3,3,4,4,4,4,3,4,4,3,3,3,3,3,3,4,4,3,4,4,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,5,6,6,6,6,6,6,5,6,5,5,5,5,5,5,4,4,3,2,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,3,3,4,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,8,8,10,10,11,12,12,12,13,15,16,17,18,19,22,20,20,18,20,20,21,23,22,23,25,23,25,26,26,25,25,24,25,25,26,26,23,24,25,24,24,25,26,25,25,25,25,25,26,24,21,24,23],[28,28,28,28,28,29,28,28,29,27,27,27,27,27,27,27,27,27,27,27,28,27,27,28,27,27,28,27,28,27,26,28,28,28,27,28,27,28,28,27,28,27,26,26,27,26,25,24,24,23,23,22,22,21,19,20,19,18,19,17,14,11,8,6,6,3,3,2,3,2,3,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,6,6,6,7,7,7,8,7,7,8,8,8,9,9,9,9,9,8,7,8,8,7,7,7,8,8,8,7,7,7,8,7,7,8,7,7,7,7,7,7,8,8,8,8,7,7,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,7,6,6,5,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,8,8,8,7,7,8,8,8,7,8,7,7,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,4,5,5,4,4,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,6,6,7,6,6,5,5,5,5,5,5,5,4,5,5,4,5,5,6,5,5,6,6,6,6,5,6,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,5,4,4,4,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,5,5,7,8,8,9,12,13,9,10,16,13,11,16,15,15,16,18,18,18,21,20,21,23,21,24,22,21,22,21,20,22,22,24,22,23,24,26,26,26,26,26,27,27,28,28,28,28,28,28,28,28,28,28,27,26,27,27,27,27,26,26,26,26,26,24,25,24,24,25,23,23,24,22,22,22,20,20,19,17,17,16,15,12,11,8,6,5,4,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,6,7,7,7,7,8,8,8,9,8,8,7,7,7,6,7,7,8,8,9,7,7,7,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,7,7,8,8,8,8,7,6,6,6,6,5,5,5,4,4,5,5,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,6,7,7,8,7,6,5,5,5,5,6,5,5,6,6,7,7,7,6,7,6,6,6,6,5,5,5,5,5,4,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,4,4,4,5,5,5,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,3,3,4,4,3,3,3,3,4,4,4,4,5,5,4,5,4,5,5,4,5,5,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,6,6,8,9,10,10,11,12,12,11,13,15,15,16,18,18,20,20,20,18,20,19,19,23,21,22,22,21,24,24,24,24,24,23,25,24,24,25,24,24,23,22,24,25,25,22,25,23,24,24,25,23,21,24,23],[29,28,28,28,28,28,28,28,28,28,27,27,28,26,27,26,27,27,26,28,27,27,28,28,27,27,27,27,27,28,26,28,28,28,27,28,27,27,28,27,28,27,27,27,27,26,24,25,25,24,24,23,22,22,20,20,19,18,18,18,15,12,9,6,6,3,3,3,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,7,7,6,6,6,6,7,7,7,7,6,6,6,6,7,6,6,7,6,6,6,6,6,6,7,7,7,6,6,6,6,5,6,6,5,5,6,5,5,6,5,5,4,5,5,5,5,6,5,5,5,4,5,5,4,4,5,5,5,4,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,6,6,7,6,6,6,6,6,6,7,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,3,4,4,3,4,4,5,5,6,5,5,6,5,5,5,5,5,4,5,5,5,4,4,4,4,4,5,5,5,6,6,5,5,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,5,5,4,5,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,4,3,3,3,2,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,5,7,8,8,10,12,13,11,13,14,14,13,15,15,17,16,19,20,19,21,22,21,23,22,24,21,20,22,22,20,22,23,24,23,22,23,25,25,27,25,26,26,26,27,27,26,26,27,27,27,27,27,27,26,26,27,27,27,27,25,26,25,26,25,24,25,23,23,25,23,23,23,22,23,22,20,19,18,17,15,15,15,11,10,8,6,4,3,3,2,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,7,7,6,7,8,7,8,7,8,7,6,6,6,6,7,7,7,8,7,6,6,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,7,7,7,7,6,5,5,5,5,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,6,6,6,6,5,4,4,4,4,5,4,4,5,5,5,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,2,3,3,2,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,6,8,8,8,9,11,11,10,12,14,14,15,17,17,20,20,19,17,18,19,18,20,19,21,23,21,24,23,23,23,23,24,24,24,24,24,24,23,25,21,23,25,24,22,25,22,24,24,25,21,21,24,24],[28,28,29,28,28,29,28,28,29,27,28,28,28,27,27,26,26,28,27,26,28,27,27,28,26,28,29,27,29,28,26,28,29,29,28,28,28,28,28,28,28,27,27,27,27,26,25,24,24,23,23,22,22,21,19,19,18,19,19,16,13,12,9,7,6,4,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,7,6,7,7,7,7,7,7,7,6,6,5,6,6,6,6,6,6,5,5,6,6,5,6,6,6,6,6,6,5,6,7,7,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,4,4,5,5,5,6,5,5,4,4,4,4,4,4,4,5,4,4,5,5,4,4,5,5,4,5,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,5,5,4,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,5,5,6,5,5,5,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,2,2,2,3,2,3,5,5,5,6,7,8,10,13,13,10,12,13,13,12,14,15,14,14,17,18,18,18,20,20,22,21,23,20,20,21,20,21,21,21,23,22,22,22,25,25,27,25,26,26,26,26,27,26,26,26,26,27,27,27,27,27,26,26,27,26,27,25,26,25,25,26,23,25,24,23,25,23,23,23,22,22,21,19,19,18,16,15,14,15,11,10,8,6,5,3,3,2,3,3,3,3,4,4,4,4,4,5,4,5,5,5,5,6,6,6,7,7,7,7,8,7,7,6,6,6,6,6,7,6,7,8,6,6,6,6,5,5,5,4,5,5,4,4,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,7,7,7,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,6,6,6,5,5,4,4,3,4,5,4,4,4,5,6,6,5,6,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,4,4,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,4,3,4,4,4,4,4,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,5,5,4,4,5,6,7,8,8,10,11,11,11,12,13,15,16,18,17,20,19,20,17,19,19,19,22,20,23,23,21,25,24,24,24,25,24,25,25,24,24,24,25,25,22,23,25,24,24,25,24,24,24,26,23,22,24,24],[29,28,28,28,28,29,28,28,29,27,28,28,28,27,27,27,27,28,27,27,28,27,27,28,27,28,29,27,28,28,27,28,29,29,28,29,29,29,29,28,29,28,28,28,27,27,26,24,25,24,24,23,23,21,21,21,19,19,19,17,14,13,9,7,6,3,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,7,7,6,7,7,6,6,5,5,6,6,6,6,6,6,5,5,6,6,5,6,6,5,6,6,5,5,5,6,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,4,5,5,4,4,5,5,4,4,5,4,5,5,5,6,6,6,5,6,6,5,5,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,5,5,4,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,3,2,4,4,6,6,8,8,9,10,11,10,11,12,11,11,16,15,14,16,18,19,18,19,21,21,24,23,24,21,20,22,20,20,22,22,23,22,22,24,26,26,27,26,27,27,27,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28,26,27,26,27,27,24,26,25,24,27,25,24,24,23,24,22,21,20,19,17,16,15,15,12,11,8,5,3,3,2,2,2,2,2,2,3,3,3,3,4,4,3,4,5,4,4,5,6,6,5,5,7,6,7,6,6,6,5,5,5,5,6,5,6,6,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,6,6,7,6,6,5,5,4,4,4,4,4,3,3,4,3,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,3,4,5,5,6,5,4,4,4,3,3,4,4,3,4,4,5,5,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,4,5,4,5,4,4,4,4,4,4,4,3,3,2,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,3,3,2,2,2,2,3,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,6,7,8,8,10,11,11,10,11,13,13,15,17,17,19,17,20,17,18,17,18,21,20,21,22,20,23,24,24,22,24,23,24,24,24,23,24,24,23,20,23,24,24,21,23,22,24,23,25,22,21,24,23],[28,28,28,28,28,29,28,28,29,27,27,27,27,27,27,27,27,28,27,26,27,27,26,28,27,27,28,27,28,27,26,27,28,28,27,27,28,27,28,27,28,27,27,26,26,26,24,24,24,23,23,22,21,21,19,19,18,19,18,17,14,12,8,6,5,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,4,5,5,5,4,5,5,6,5,5,5,5,5,4,4,5,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,4,4,4,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,3,3,3,3,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,5,6,7,9,12,12,9,10,15,12,11,15,14,13,13,17,17,16,18,20,20,22,21,23,21,19,21,20,19,20,21,21,21,21,23,25,25,27,25,26,26,27,27,27,26,26,26,26,27,27,27,27,27,26,27,28,27,27,25,26,24,25,26,25,25,24,23,25,23,22,22,21,21,21,19,18,18,15,14,13,13,10,9,7,5,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,5,6,5,5,5,5,4,4,4,5,5,5,5,4,5,5,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,5,5,5,6,6,5,5,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,4,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,2,2,3,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,5,6,7,7,8,10,9,9,10,12,12,14,17,16,18,18,17,15,17,17,18,21,19,21,20,20,24,23,22,22,23,22,23,22,23,22,20,22,22,18,21,23,22,21,23,21,22,21,24,21,19,22,22],[28,28,29,28,29,29,28,28,29,27,28,28,27,27,26,27,26,28,27,26,28,27,26,28,27,27,27,27,27,27,27,27,28,28,27,27,27,27,28,27,28,27,27,27,26,26,25,24,24,24,23,23,22,21,20,20,19,19,20,18,15,13,10,6,6,4,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,4,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,5,4,4,4,4,3,4,4,3,3,3,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,3,4,4,5,5,5,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,4,4,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,7,8,12,12,13,11,11,14,13,13,15,15,14,14,17,17,18,19,20,20,22,21,23,20,20,21,21,19,20,21,23,21,22,22,24,24,27,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,27,26,26,24,25,26,25,25,24,24,25,23,23,22,22,22,21,20,19,18,16,15,13,13,11,9,7,5,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,5,5,4,5,5,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,4,4,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,2,2,3,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,5,6,7,7,8,10,9,9,10,11,12,13,16,15,19,19,16,16,18,17,18,21,18,21,21,19,24,24,22,22,23,22,23,24,22,21,22,23,21,19,20,24,23,21,23,22,22,23,25,22,20,24,23],[28,28,29,28,29,29,28,28,29,27,28,28,28,27,26,26,26,27,27,26,27,26,26,27,26,27,28,26,28,28,26,28,28,28,28,28,28,28,28,28,28,27,27,27,26,25,25,24,24,24,23,22,21,21,21,20,19,20,19,19,14,14,9,6,5,3,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,5,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,5,4,4,5,4,4,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,3,3,4,3,3,4,3,3,3,4,3,3,4,4,5,5,4,4,5,5,4,4,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,6,8,7,9,12,13,10,12,12,10,10,12,12,12,13,15,16,16,17,19,20,21,21,22,21,20,21,19,21,21,21,22,20,21,22,24,24,27,25,25,25,26,26,26,26,26,26,26,26,27,26,26,26,26,27,27,26,26,26,26,25,25,25,24,25,24,23,25,22,22,22,21,21,20,19,19,18,16,15,14,13,10,9,7,4,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,4,4,4,5,5,4,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,4,4,3,3,3,3,3,2,2,3,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,3,4,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,5,6,7,7,8,10,9,9,10,12,13,14,16,15,18,16,18,16,18,16,19,20,19,22,21,21,24,24,23,23,23,22,24,23,23,23,22,23,23,20,23,24,24,21,24,21,23,23,26,22,20,24,24],[28,28,28,28,28,29,28,28,28,26,27,28,27,26,26,26,25,27,26,25,26,26,25,27,26,26,27,26,27,27,26,27,28,28,27,27,27,27,28,27,28,27,27,27,26,25,25,24,24,23,23,22,22,21,19,20,18,20,19,17,13,12,8,5,4,3,3,2,3,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,5,5,4,4,5,5,5,5,5,5,4,4,5,5,4,5,5,4,5,5,4,4,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,3,4,4,3,3,3,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,4,3,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,3,4,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,3,3,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,4,4,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,5,7,6,8,10,9,8,9,10,10,9,11,12,12,12,15,16,16,17,19,19,22,20,22,20,18,21,20,18,19,20,21,20,21,23,24,25,27,25,26,26,26,26,26,26,27,26,27,27,27,27,27,27,27,27,27,27,27,26,26,25,26,26,24,26,24,23,26,22,22,22,21,21,20,19,19,17,16,14,13,13,9,9,6,4,3,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,5,4,4,4,4,4,4,4,5,5,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,4,4,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,5,6,7,7,8,10,9,9,10,11,13,14,16,16,19,17,17,16,17,16,18,20,20,21,20,20,23,24,22,22,23,23,23,24,23,22,21,23,22,21,21,23,24,23,24,22,23,22,24,21,19,23,22],[28,28,28,28,28,29,27,28,28,27,27,27,27,26,26,26,26,27,26,25,26,26,25,27,26,26,27,26,26,26,25,27,27,27,26,27,27,27,27,26,27,26,26,26,25,25,25,23,24,23,22,22,20,20,18,19,18,18,18,17,14,13,9,5,4,4,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,7,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,6,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,4,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,4,5,6,8,10,11,13,9,10,13,11,10,13,14,13,12,15,17,16,17,18,20,21,19,22,20,18,20,18,19,18,20,21,19,19,22,23,24,27,24,26,25,26,26,26,26,26,26,26,26,26,27,27,27,26,26,26,26,26,24,25,25,25,26,23,25,24,23,25,23,22,22,22,22,21,19,19,18,16,14,13,13,11,9,6,4,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,5,6,7,7,7,9,8,9,9,11,12,13,14,14,18,18,17,15,17,16,16,21,17,20,19,19,23,23,22,22,23,21,23,22,23,20,20,22,21,18,19,23,22,19,22,20,21,21,23,19,19,22,21],[28,28,29,28,28,29,28,28,28,27,28,27,27,25,26,24,26,26,26,26,26,26,26,27,26,27,28,25,28,27,25,27,28,27,27,28,27,28,28,27,27,27,27,27,26,26,26,24,24,24,24,22,22,21,20,20,18,19,20,18,15,13,9,5,4,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,6,6,6,5,6,7,6,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,4,5,5,4,5,5,6,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,3,4,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,3,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,4,4,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,3,2,4,5,5,9,9,11,12,9,10,12,11,11,12,12,12,13,14,15,16,17,18,19,20,20,21,19,19,20,19,20,19,20,22,20,22,22,24,24,27,25,26,25,25,26,26,25,25,26,26,26,26,26,26,26,25,26,27,26,26,25,26,24,25,26,24,25,23,23,25,22,22,21,22,22,20,18,19,17,16,14,12,12,9,8,6,4,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,5,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,4,4,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,5,6,6,7,7,9,9,9,10,12,13,13,16,15,18,17,17,16,16,16,17,21,18,20,20,20,24,23,21,22,22,21,22,23,21,20,20,22,21,19,20,22,22,21,22,21,21,21,23,21,20,23,22],[28,28,28,28,28,29,28,28,28,26,28,27,27,26,26,26,26,26,26,26,26,26,26,26,25,26,28,26,28,27,26,27,28,28,27,28,27,28,28,27,28,27,27,27,26,26,25,24,24,24,24,23,22,22,21,21,20,20,20,17,14,13,9,5,5,4,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,7,7,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,6,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,3,4,4,5,5,5,4,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,4,5,5,5,4,4,4,4,3,3,4,3,3,3,4,3,3,4,4,4,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,2,2,3,3,4,5,5,6,8,10,11,9,9,11,10,10,11,12,12,12,14,16,16,17,19,20,22,21,24,20,21,21,20,20,19,21,22,20,21,23,24,25,27,24,25,25,26,26,26,27,27,27,27,27,27,27,27,27,27,27,28,27,27,26,27,26,26,27,23,26,24,24,25,23,23,23,21,22,21,19,19,18,17,15,14,13,10,10,6,4,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,5,4,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,5,4,4,3,3,3,3,3,3,3,3,4,4,5,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,5,6,7,7,8,10,9,9,11,12,13,14,17,16,19,17,18,17,18,17,18,20,19,20,21,20,24,24,21,23,24,23,23,24,22,22,22,24,22,21,22,23,23,23,23,22,23,22,25,22,20,23,23],[28,28,28,28,28,28,27,27,27,26,27,26,27,25,25,25,25,26,25,25,26,25,24,26,25,25,26,25,26,25,25,26,27,27,26,27,26,26,27,26,26,26,25,26,25,25,24,23,23,23,22,21,20,20,18,19,18,18,18,16,14,12,9,5,4,4,3,2,3,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,5,5,5,5,6,5,5,6,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,6,5,5,6,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,5,4,4,5,5,4,5,5,5,5,5,4,4,5,4,4,5,4,4,4,4,4,4,4,5,5,6,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,3,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,2,4,6,6,8,10,11,12,8,9,12,11,9,11,13,12,12,14,16,15,16,18,18,20,19,22,19,17,19,18,18,17,19,21,18,19,22,22,25,27,23,25,26,26,26,26,27,27,27,27,27,26,27,27,27,26,27,27,26,26,25,26,25,25,26,24,25,23,23,25,23,22,22,22,21,21,19,19,18,16,14,14,12,10,9,7,5,3,3,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,3,4,4,4,4,4,5,4,5,5,5,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,6,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,3,4,5,5,5,4,4,3,3,3,3,4,4,3,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,7,7,8,10,9,10,10,12,12,14,14,15,19,18,18,16,17,17,17,20,18,20,20,20,24,23,22,22,24,22,23,23,23,21,21,22,20,18,19,23,22,19,21,20,21,21,23,19,18,22,20],[28,28,28,28,28,28,27,28,27,27,26,26,26,24,26,25,26,25,26,26,25,25,25,26,25,26,27,25,26,26,25,26,27,27,26,27,26,26,27,27,27,26,26,26,26,25,25,24,23,22,21,21,21,20,19,19,18,18,17,16,14,13,9,7,5,4,4,3,4,3,3,3,3,3,4,4,4,5,4,4,4,5,5,4,4,5,5,5,5,6,6,7,6,6,7,7,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,9,7,7,7,8,8,8,8,8,8,7,7,8,8,7,8,8,7,7,8,7,7,7,8,8,8,7,7,7,7,7,7,7,6,6,7,7,6,7,7,6,6,6,7,6,7,7,6,7,6,6,6,6,6,5,6,6,6,5,6,6,6,6,7,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,7,7,7,7,7,7,7,7,8,7,7,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,5,5,6,5,6,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,5,7,7,9,10,11,12,11,11,13,12,11,12,14,12,13,16,17,16,17,19,19,20,19,21,19,18,19,18,19,18,19,20,18,19,21,23,24,26,24,25,25,26,26,26,26,26,26,26,26,27,27,26,26,25,26,25,25,26,24,24,23,24,25,23,24,23,23,24,22,22,22,21,21,20,20,19,17,16,15,13,13,11,10,7,5,4,3,3,2,3,3,3,3,3,4,4,3,4,5,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,6,5,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,6,6,6,7,7,6,6,5,5,5,5,5,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,4,3,4,4,4,3,4,4,4,3,4,4,4,5,6,7,7,5,5,4,5,4,5,6,5,5,6,6,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,6,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,6,6,6,6,5,5,5,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,3,3,3,2,2,2,2,3,2,2,2,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,3,4,4,4,4,5,5,4,5,5,6,7,8,8,9,10,10,11,11,13,14,15,16,16,19,19,18,17,18,19,17,21,18,21,21,20,23,23,22,23,23,22,23,24,22,22,23,23,21,19,21,23,22,19,22,21,21,23,23,20,20,22,20],[28,28,28,28,29,28,28,28,28,27,28,27,27,25,27,25,26,26,26,26,26,26,27,27,26,27,28,26,28,28,26,28,29,28,28,29,27,28,28,28,28,28,28,28,27,27,26,25,25,26,25,22,24,22,22,21,21,20,20,18,15,13,9,6,5,5,4,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,6,6,7,6,6,7,7,7,7,7,8,8,7,8,9,9,9,9,9,8,7,7,7,8,8,8,8,8,8,7,7,8,8,7,7,8,7,7,7,7,7,7,7,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,6,5,6,6,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,5,6,6,5,5,6,6,5,6,6,7,7,7,7,7,6,7,7,7,7,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,5,4,5,5,6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,4,4,4,5,4,5,6,6,8,10,10,12,10,10,12,11,10,11,14,12,14,15,17,18,17,19,20,22,22,22,20,21,21,21,20,21,22,22,20,20,23,23,25,26,25,26,26,26,27,27,27,27,27,27,28,28,28,27,28,27,27,27,27,26,26,26,25,25,26,24,25,24,24,26,24,23,22,23,23,22,20,20,19,18,16,14,14,11,10,7,6,4,4,3,2,3,3,3,3,3,3,4,3,4,4,4,4,5,5,4,5,6,5,5,6,6,6,6,6,6,6,5,5,5,5,6,5,6,6,6,5,6,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,6,6,6,6,6,6,6,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,6,6,5,5,4,5,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4,3,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,7,7,6,6,6,6,6,5,5,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,2,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,6,7,8,8,9,10,11,11,11,13,14,15,16,16,20,18,18,17,19,17,18,21,20,21,23,21,24,24,24,22,23,22,23,24,23,23,23,23,23,20,22,24,23,21,23,22,22,22,24,21,20,24,23],[28,28,28,28,28,28,28,27,28,26,27,27,27,25,26,26,26,26,26,26,25,26,25,26,27,26,27,26,27,27,26,27,28,28,27,28,27,28,28,28,28,27,27,28,27,26,26,25,24,24,24,22,21,21,21,20,19,20,19,17,15,14,9,7,6,5,5,5,5,4,4,4,4,4,4,4,5,5,6,5,5,6,5,5,5,6,6,6,6,6,6,7,7,7,8,8,7,8,8,8,9,9,9,9,9,10,10,10,10,11,11,10,9,9,9,9,9,9,9,9,10,8,8,9,9,9,8,9,9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,8,8,7,8,8,7,7,7,8,8,8,8,7,8,7,7,7,7,7,7,7,7,6,6,7,7,7,7,7,7,7,7,7,7,7,6,6,7,7,6,6,7,6,6,6,6,6,6,7,7,8,8,7,7,8,7,7,7,7,7,7,7,6,7,7,7,6,7,6,6,6,7,6,6,6,6,6,5,6,6,5,5,6,6,5,5,6,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,5,6,6,6,5,6,6,7,7,7,6,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,5,5,5,6,5,6,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,7,7,8,9,11,12,12,10,10,12,11,11,11,14,14,13,15,17,17,17,19,20,22,20,22,19,19,21,20,19,21,21,21,19,20,23,23,25,27,24,26,26,27,27,27,28,27,27,27,28,28,28,28,28,27,27,27,27,27,27,27,25,27,27,25,26,25,24,26,24,23,23,23,23,21,21,19,19,19,16,15,14,12,11,8,6,4,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,6,6,6,6,7,7,6,6,6,6,6,6,6,7,7,6,6,6,5,5,6,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,7,7,7,7,7,6,6,5,5,5,5,5,4,4,5,5,4,5,5,4,4,5,4,4,4,4,4,3,4,4,4,3,3,4,3,3,4,4,3,4,4,4,5,6,7,7,5,5,5,5,4,5,6,6,6,6,7,7,7,8,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,4,3,3,4,3,3,3,4,4,3,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,7,8,8,8,8,7,7,7,7,7,6,6,5,5,4,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,2,2,2,2,2,2,1,2,1,1,1,0,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,2,3,3,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,7,8,9,9,10,12,10,12,12,13,14,15,18,17,20,19,19,18,20,19,19,22,20,21,22,20,24,23,23,23,24,23,24,25,23,24,23,23,23,20,22,24,23,22,23,22,22,22,24,22,20,24,23],[28,28,28,28,28,28,27,27,27,26,26,26,26,25,25,25,25,25,25,25,24,24,24,25,25,25,26,26,26,26,25,26,27,27,26,26,25,26,27,26,27,26,26,26,25,25,25,23,23,22,23,22,20,20,19,19,18,18,17,16,14,13,10,8,7,6,6,6,6,5,5,5,5,5,6,6,6,7,7,6,6,7,7,6,7,8,8,8,8,8,8,9,9,9,10,10,9,10,11,10,10,11,11,11,11,12,12,12,12,13,13,12,11,11,11,12,11,12,11,11,11,10,10,11,11,10,10,11,10,10,10,10,9,11,10,11,11,10,10,10,10,10,10,10,9,9,10,10,9,10,10,8,9,9,10,9,10,10,10,10,9,8,8,9,9,8,8,9,8,8,9,9,8,9,9,9,9,9,9,9,9,8,9,9,8,8,9,9,8,8,8,8,8,9,9,10,10,10,9,10,9,9,10,10,9,9,9,9,8,9,9,9,8,9,9,8,8,8,8,8,8,8,8,7,7,7,7,7,7,8,6,7,7,8,8,9,8,9,9,9,9,9,9,8,8,9,8,8,7,8,8,8,7,8,8,8,8,9,9,8,8,7,6,7,8,7,7,7,7,7,7,7,7,6,7,7,7,8,8,8,8,7,7,6,6,7,6,6,7,6,6,6,7,6,6,6,7,6,6,6,5,6,6,6,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,8,8,8,9,11,12,13,12,10,14,13,11,12,14,14,12,14,17,17,17,18,19,20,20,22,19,18,19,20,18,19,20,20,19,21,22,22,24,26,24,25,25,26,26,27,27,27,27,27,28,27,27,27,27,26,27,26,27,26,25,26,24,25,25,24,25,24,24,25,23,23,22,22,23,21,21,20,19,18,15,14,13,11,11,8,7,5,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,6,6,5,6,7,6,6,7,8,8,7,7,8,7,7,7,6,7,8,7,8,8,7,7,7,6,5,6,6,5,5,6,6,5,5,5,5,5,4,5,5,5,5,5,5,6,5,5,6,6,6,7,6,7,7,8,7,9,8,9,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,5,5,6,6,6,5,5,6,5,5,6,6,5,5,6,6,7,8,8,8,7,7,7,7,7,7,8,7,8,9,9,10,9,10,9,9,10,9,9,9,8,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,7,6,8,7,8,8,8,8,8,8,9,9,9,9,10,10,9,10,10,10,9,9,8,9,9,8,8,7,7,6,6,6,6,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,0,1,1,2,2,3,2,2,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,2,3,2,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,9,10,10,11,11,11,12,12,13,15,16,16,17,19,19,19,18,20,18,18,23,19,21,21,21,24,24,23,23,24,23,24,25,24,22,23,24,22,21,22,24,23,20,22,21,22,22,24,20,20,22,21],[29,29,29,29,29,29,28,28,28,27,27,26,27,25,27,26,27,26,25,26,26,25,26,27,26,27,28,26,27,27,26,28,28,28,27,28,27,28,28,28,28,28,27,28,27,27,26,25,25,25,24,23,23,22,21,20,20,19,19,18,16,13,10,8,7,6,5,5,5,5,4,4,4,4,5,5,5,6,5,6,5,6,6,5,6,6,6,6,7,7,7,7,7,7,8,8,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,10,9,9,9,10,10,10,9,9,10,9,9,9,9,9,8,9,8,8,8,8,8,8,8,9,9,8,8,8,8,8,8,8,7,7,8,8,7,8,8,7,7,7,8,8,8,9,8,8,7,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,7,7,7,7,7,7,7,7,7,6,7,6,7,7,7,7,8,8,8,8,8,7,8,8,8,8,7,7,7,7,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,8,7,8,7,7,7,7,7,7,6,6,6,6,6,6,6,6,7,7,7,7,7,6,6,6,6,5,6,5,5,5,5,5,5,5,6,5,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,5,4,4,5,6,5,7,8,8,9,11,13,13,12,11,13,13,13,13,14,14,15,15,17,17,18,19,19,22,20,22,20,18,21,20,18,20,20,20,18,20,21,22,23,26,24,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,26,27,27,25,25,25,25,26,25,25,24,24,25,22,23,23,23,22,22,21,21,19,18,16,15,13,11,10,7,6,5,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,6,6,6,6,6,6,5,6,6,6,6,7,6,6,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,5,5,5,5,6,6,7,7,8,7,7,7,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,7,7,7,6,6,5,6,5,6,6,6,6,7,7,8,7,7,7,7,7,7,7,6,7,7,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,6,6,6,6,7,7,7,6,7,7,7,8,7,8,8,8,8,8,8,8,8,7,7,7,8,7,7,7,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,4,4,3,3,4,4,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,7,8,9,9,10,11,11,11,12,13,14,14,17,15,20,18,18,18,19,18,19,22,19,22,23,21,25,23,24,24,24,22,25,25,23,23,23,25,22,21,22,24,24,22,24,23,21,24,24,22,20,23,23],[29,29,28,29,29,29,29,28,28,27,28,27,28,26,26,27,27,26,26,27,26,26,27,27,25,27,28,26,28,28,26,28,29,29,28,28,28,28,28,28,29,28,27,28,28,27,27,25,26,25,24,22,24,21,22,21,20,21,20,19,15,14,9,7,7,6,6,6,6,5,6,5,5,5,6,6,6,6,7,7,7,7,7,6,7,7,7,7,8,8,8,9,8,8,9,9,9,9,10,10,10,10,11,10,10,12,12,11,11,12,13,12,10,10,10,11,11,12,11,11,12,10,10,11,11,11,10,11,10,10,10,10,9,9,10,10,11,9,10,10,9,9,9,10,9,9,10,9,8,9,9,9,8,8,9,9,9,9,9,9,8,8,8,8,8,8,9,9,8,8,9,8,8,8,9,9,9,9,9,9,9,8,8,9,8,8,8,8,7,7,8,8,7,8,8,9,9,9,9,9,9,9,8,9,8,9,8,8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,7,7,7,7,7,7,7,7,6,7,7,8,9,9,8,9,9,9,8,8,8,8,8,8,8,7,7,7,7,7,6,7,7,7,8,8,7,7,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,6,6,6,6,5,6,6,6,5,5,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,8,8,9,12,12,14,13,10,14,13,12,14,15,14,16,17,18,18,19,20,21,22,21,22,21,21,21,20,20,21,21,21,19,21,23,23,23,25,24,25,25,27,26,27,27,27,27,27,28,27,28,28,28,27,28,27,27,27,27,27,25,27,26,26,27,26,26,27,24,24,24,24,23,23,21,21,20,20,17,15,14,12,10,8,7,6,5,4,4,4,4,4,4,3,4,4,4,4,5,4,5,6,6,5,6,6,7,7,7,8,8,7,7,7,7,6,7,6,7,7,7,8,8,7,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,5,4,4,4,4,4,5,5,5,5,5,6,5,6,7,7,8,8,9,8,8,7,7,6,6,6,6,6,5,5,6,6,5,6,6,6,6,6,5,5,4,5,5,5,4,5,5,4,4,5,4,4,5,5,4,5,5,5,6,7,7,7,7,7,6,6,6,6,8,7,7,7,8,8,9,8,9,9,8,8,8,7,8,7,7,7,7,6,7,6,5,6,6,5,5,6,6,5,5,6,5,4,5,5,4,4,5,5,4,4,5,4,4,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,4,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,5,5,6,6,7,7,8,8,8,8,8,8,8,9,8,8,8,9,9,9,9,8,9,9,8,8,8,8,8,8,7,7,6,6,5,6,5,5,4,4,5,5,4,4,4,4,3,3,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,0,1,1,2,2,2,2,2,2,2,3,2,3,3,3,2,3,3,3,3,3,3,3,4,3,3,3,2,2,3,3,2,2,2,3,3,3,3,4,4,3,4,4,3,3,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,8,9,10,10,11,13,12,12,14,15,15,17,19,19,23,20,20,20,22,20,21,24,21,23,24,22,26,25,25,25,26,25,26,26,25,25,25,26,25,24,24,26,26,24,25,23,25,24,26,23,20,24,24],[29,28,28,28,28,28,28,27,27,27,26,26,26,26,26,26,25,25,25,25,25,25,25,25,25,26,26,26,26,26,25,27,27,27,27,28,27,28,27,28,28,27,26,27,27,27,26,24,24,24,24,22,23,22,20,20,20,19,19,17,15,13,10,9,8,8,9,8,8,8,8,8,8,9,9,9,9,10,10,10,9,10,10,8,10,11,10,10,10,11,12,12,12,12,13,13,13,14,13,14,14,14,14,14,15,16,16,16,16,16,17,15,15,15,15,15,16,16,15,15,16,15,14,15,15,15,15,15,15,14,14,14,14,14,14,14,14,14,13,13,14,13,13,14,14,13,14,15,13,14,14,13,13,12,14,13,14,13,13,14,13,12,12,12,13,12,12,12,13,13,13,14,13,13,14,14,13,13,13,13,14,13,13,13,13,12,12,12,12,12,12,11,11,12,12,13,13,13,11,12,12,12,11,11,11,10,10,11,11,11,12,11,11,12,12,11,11,12,13,10,11,13,12,10,11,12,11,9,11,11,9,11,10,11,11,11,12,12,12,13,13,12,12,13,12,12,12,11,10,12,11,11,9,11,10,11,12,12,11,10,10,10,10,10,10,10,8,10,10,8,8,9,9,8,9,9,10,11,9,10,10,10,8,8,9,10,8,8,10,9,8,8,10,8,8,9,9,9,9,9,8,8,8,9,9,9,9,9,9,9,9,10,9,9,9,10,9,9,9,9,8,8,8,8,8,8,8,7,7,7,7,8,8,6,7,9,7,8,12,13,12,12,11,12,13,11,13,14,15,15,16,18,19,19,19,20,23,20,23,19,19,22,20,19,20,20,20,20,21,23,22,23,25,23,24,25,24,26,26,26,26,26,26,26,27,27,27,27,26,27,26,26,27,25,26,25,26,25,24,26,25,24,26,23,23,23,23,23,23,22,21,20,19,17,16,14,13,11,10,8,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,8,8,7,8,7,9,8,7,8,9,9,8,9,9,8,9,9,9,10,9,9,10,10,8,8,8,7,7,8,7,7,8,8,7,7,8,8,8,8,8,8,7,8,7,7,9,8,7,8,8,8,8,9,9,9,9,10,10,10,11,11,11,11,10,10,10,10,10,10,9,9,9,10,9,8,9,10,8,9,9,8,8,7,7,8,7,7,7,7,5,7,8,6,6,7,7,6,6,6,6,7,8,8,8,8,8,8,9,8,8,10,9,9,10,11,11,11,11,10,11,12,11,11,11,9,10,10,10,9,10,10,9,8,9,9,8,7,8,8,7,7,8,8,6,7,8,6,6,7,7,6,7,8,7,6,8,8,9,7,8,7,7,6,7,7,6,5,6,5,5,5,6,6,5,4,5,5,5,4,5,5,5,5,6,6,5,7,7,7,7,8,8,8,9,9,10,10,11,10,10,11,11,11,12,12,12,13,12,13,11,11,11,12,11,11,11,10,9,10,9,9,9,9,8,8,8,8,7,8,7,7,7,6,6,7,5,4,6,5,4,5,5,4,4,4,4,4,4,4,3,4,3,3,3,2,3,4,3,3,3,4,4,4,4,5,4,4,5,5,6,6,6,6,5,5,5,5,4,4,5,3,3,4,4,2,3,3,2,1,0,1,1,1,2,2,3,3,3,3,4,3,3,4,4,4,4,5,5,6,6,6,6,7,5,4,5,4,4,4,4,3,4,4,4,4,4,5,5,4,5,6,5,5,5,6,6,5,7,8,7,7,8,9,8,9,9,9,9,9,11,11,11,12,13,12,12,13,15,15,15,18,19,20,22,20,23,19,21,21,20,25,20,22,23,20,26,23,23,24,24,24,25,26,23,23,24,24,22,21,22,25,24,22,24,22,21,23,24,20,20,22,22],[29,28,28,28,28,28,28,28,27,27,27,26,27,25,26,27,26,25,25,25,25,24,25,25,25,25,27,26,26,27,25,26,27,27,26,27,26,27,28,27,28,27,27,27,26,26,26,25,25,23,23,24,22,22,22,21,20,20,20,17,15,14,10,8,8,7,6,7,6,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,9,10,9,9,9,10,10,11,10,11,12,11,11,11,13,12,13,13,13,13,13,14,15,15,14,16,15,14,13,13,14,14,13,14,14,14,14,12,13,14,14,13,12,14,13,13,13,13,12,13,12,13,13,12,13,13,12,11,12,12,11,11,12,12,11,12,12,11,10,9,11,11,12,11,11,12,10,10,10,10,10,10,11,11,10,10,11,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,10,11,10,10,10,9,10,10,10,12,12,11,10,11,11,10,10,11,10,9,9,9,9,10,11,10,9,11,10,10,10,10,11,9,9,10,10,9,10,9,9,8,9,10,9,9,9,9,11,10,10,11,12,12,10,10,12,11,10,11,11,10,9,11,10,10,9,10,10,10,11,10,10,9,8,9,8,8,9,9,8,8,9,8,8,8,9,7,7,8,8,9,8,9,9,8,8,7,8,8,8,8,8,8,7,7,8,8,8,8,9,8,8,7,6,7,8,7,7,8,8,7,7,8,7,8,8,8,7,8,8,7,7,7,7,6,7,7,7,6,6,5,6,6,5,7,6,5,7,8,8,8,11,13,13,11,11,14,13,12,13,14,14,16,16,18,17,18,20,20,21,20,21,21,19,19,18,16,16,17,17,15,18,21,20,21,24,24,25,25,25,26,27,27,27,28,28,28,27,28,28,27,26,27,26,27,25,26,27,24,26,26,25,26,25,25,27,23,24,24,23,23,23,22,22,20,19,18,16,14,13,11,8,7,6,5,5,5,5,5,5,5,6,6,6,5,6,6,6,6,7,7,6,7,8,7,6,7,8,7,8,8,8,7,8,7,8,8,8,7,9,8,7,8,9,7,6,8,6,6,6,7,6,5,6,7,6,6,6,7,5,7,6,6,7,7,6,7,7,7,8,8,8,8,8,10,9,10,11,10,10,10,9,10,9,9,9,9,8,8,8,9,8,8,9,8,8,8,8,7,7,6,7,7,6,6,7,6,5,6,6,6,6,7,7,5,6,6,7,8,8,9,9,8,8,7,7,8,8,9,8,9,10,9,11,10,10,9,10,10,10,9,9,9,9,8,8,8,8,8,8,8,8,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,6,7,7,6,7,7,7,7,7,6,6,5,6,6,5,4,5,5,5,5,6,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,7,8,8,8,9,9,9,9,10,9,9,10,11,10,11,12,12,10,11,10,10,10,10,10,10,9,9,9,8,8,7,7,7,6,6,7,6,5,6,6,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,4,4,4,5,3,3,3,4,3,2,3,2,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,4,3,3,3,3,3,2,3,2,3,4,4,4,5,4,4,4,5,4,4,5,5,5,5,6,6,7,7,7,8,8,8,9,9,9,9,11,11,11,12,12,14,12,13,15,16,16,17,18,19,22,22,21,20,22,21,21,25,22,24,25,21,27,24,24,25,25,22,27,27,24,24,25,24,23,21,23,25,24,23,24,24,21,23,25,22,21,25,24],[29,28,27,27,28,27,27,28,26,25,26,25,26,25,25,25,24,25,25,26,25,24,25,26,25,25,26,24,26,25,24,26,27,26,25,27,26,26,26,26,26,25,25,26,26,25,24,24,23,24,23,21,23,21,21,20,20,20,19,17,15,13,9,7,6,6,6,5,6,6,6,6,6,6,7,6,7,8,8,7,8,8,7,7,8,9,8,8,8,9,9,10,10,10,11,11,10,11,11,11,12,12,12,12,12,12,13,13,13,13,13,12,13,13,12,12,12,14,13,13,13,11,12,13,13,13,12,13,13,13,12,12,12,12,11,12,13,11,13,11,11,11,11,12,11,11,12,12,10,11,12,11,9,9,11,10,11,11,10,11,10,10,10,10,9,9,10,11,10,9,10,11,10,11,12,11,11,12,11,11,11,10,10,11,11,10,11,11,9,9,10,10,9,10,10,11,12,11,10,11,11,10,9,10,9,10,9,9,9,9,10,9,9,10,10,9,8,10,10,8,8,10,10,9,8,10,9,8,9,9,8,8,9,9,10,10,10,10,11,12,11,10,11,11,10,11,11,10,9,10,11,9,9,9,9,10,10,10,9,8,8,8,9,8,9,8,8,8,8,8,8,8,8,7,7,7,8,9,8,8,8,8,8,7,7,8,7,7,8,7,7,7,8,8,7,8,8,8,7,6,6,7,7,7,7,7,7,7,7,7,8,8,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,5,6,6,5,6,6,6,6,7,7,7,10,11,11,11,9,12,12,11,12,14,14,13,15,17,17,16,19,20,21,19,21,19,20,19,19,18,20,18,18,18,20,21,22,22,23,24,24,24,24,26,26,26,26,26,26,27,27,27,27,27,27,26,25,26,26,25,26,23,25,25,22,25,24,23,26,23,23,23,22,22,21,20,21,20,18,16,15,14,12,10,9,7,6,5,5,5,6,5,6,5,6,6,6,5,5,6,5,6,6,6,6,6,6,6,6,6,7,7,7,7,8,7,8,7,7,8,8,7,8,7,6,7,7,7,6,6,7,6,6,6,6,5,6,6,6,6,6,6,6,7,6,6,6,7,7,7,7,7,7,7,8,7,7,9,9,9,9,9,9,10,9,9,9,9,9,8,8,8,8,9,8,8,9,8,8,8,8,7,7,6,6,7,6,7,6,7,6,6,6,6,6,6,6,5,5,5,6,6,7,7,8,8,7,7,7,7,7,8,8,8,8,9,10,10,10,9,10,10,9,9,9,8,8,7,7,7,7,8,7,6,6,6,6,5,6,6,6,6,6,7,6,6,6,6,6,6,6,6,5,6,6,6,7,7,7,6,7,7,6,6,6,6,6,5,5,6,5,5,6,5,6,5,4,5,5,5,4,5,4,4,4,5,5,5,5,6,5,5,5,6,6,7,7,8,9,8,8,9,9,8,9,10,10,9,10,10,10,10,9,10,8,9,9,8,8,8,8,8,7,6,6,6,6,5,6,5,5,6,6,5,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,4,3,3,3,4,3,4,4,4,4,5,5,4,3,4,4,4,4,4,4,3,3,3,2,2,2,2,2,1,1,0,1,1,1,2,1,2,2,2,2,2,3,3,3,3,3,3,5,4,5,5,5,4,3,3,3,3,3,3,3,3,3,4,4,4,5,5,4,4,5,5,5,6,6,5,6,7,7,7,7,7,8,7,7,8,9,8,8,10,11,11,11,13,13,12,12,14,16,15,18,18,19,20,20,21,19,21,20,19,23,20,22,23,20,25,22,23,23,24,21,25,25,23,22,24,23,21,20,24,24,22,21,22,22,21,23,23,20,21,23,22],[28,29,28,28,29,28,28,29,28,27,28,26,28,26,27,25,27,27,26,27,26,25,26,26,25,26,28,25,27,27,25,27,28,28,27,28,27,27,27,27,27,27,26,27,26,26,26,25,25,25,24,23,24,22,22,21,21,21,19,18,16,14,10,6,5,5,4,4,4,4,4,4,4,4,5,4,5,6,6,5,5,6,6,5,6,6,7,7,7,7,7,8,7,7,8,8,8,8,9,9,9,9,9,10,10,11,11,11,11,12,11,10,10,9,9,10,10,11,11,11,10,9,10,11,10,9,10,10,10,9,10,9,9,9,9,9,10,9,9,9,8,8,9,9,8,8,9,8,8,8,8,7,7,7,8,8,8,8,8,9,8,8,8,8,7,7,8,8,7,7,8,8,7,7,8,8,8,9,8,8,8,7,8,8,8,7,7,8,8,7,8,7,8,7,8,9,10,9,9,9,9,9,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,7,7,8,8,8,8,8,8,7,8,8,7,7,8,7,6,7,7,6,6,7,7,7,8,8,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,6,7,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,5,4,4,4,4,4,4,4,5,3,5,5,5,7,9,9,12,11,8,12,13,12,12,14,14,16,16,18,18,18,19,20,21,21,20,19,19,19,19,19,19,19,18,20,19,19,22,22,24,22,24,23,24,25,26,26,25,26,26,26,26,26,26,26,26,25,25,25,25,25,24,23,25,24,23,25,24,24,26,24,24,24,23,24,23,21,21,21,19,17,16,14,12,9,7,5,4,4,4,3,3,4,3,4,4,5,4,4,4,5,4,5,6,5,6,6,6,6,6,6,7,7,7,7,7,6,6,6,6,7,7,6,7,7,6,7,6,6,6,6,5,5,5,5,4,5,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,6,6,6,6,7,8,8,8,8,8,8,7,7,6,6,6,6,6,5,5,6,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,5,4,4,4,5,5,7,7,7,7,7,6,6,5,6,7,6,6,7,7,7,7,8,7,8,8,7,7,7,7,6,6,6,6,5,6,5,4,5,5,4,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,6,6,7,7,6,6,7,7,7,7,7,7,8,8,7,8,8,8,7,7,7,7,7,7,7,6,6,5,4,4,4,4,4,4,3,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,6,6,6,6,7,8,9,10,10,11,12,11,13,13,15,14,16,19,20,23,20,22,22,22,22,19,23,21,22,26,20,24,25,26,25,26,25,27,26,25,25,26,25,23,22,25,27,26,23,25,25,25,25,24,23,22,24,23],[28,28,28,28,28,29,28,28,28,27,28,26,28,27,27,27,27,27,26,26,27,25,26,27,27,26,28,27,27,27,26,27,27,27,27,27,27,27,28,27,27,27,27,27,27,26,26,25,25,24,24,24,23,22,22,21,20,20,21,19,17,15,10,6,6,5,5,5,5,5,5,5,5,5,6,5,6,7,7,6,6,7,7,6,7,7,6,7,7,7,7,8,7,8,9,8,8,8,9,9,9,10,10,9,10,10,11,11,11,12,12,11,10,9,10,11,10,11,10,11,10,9,9,10,10,10,9,9,9,9,10,9,9,10,9,10,9,9,9,10,8,8,9,9,8,8,9,8,8,9,9,8,7,8,8,8,8,9,8,9,8,8,8,8,8,7,8,8,8,7,8,8,8,8,8,8,8,9,8,8,8,7,8,8,8,7,8,8,8,7,7,7,7,8,8,9,9,8,8,8,8,8,8,8,8,7,8,7,7,8,8,7,7,8,8,7,7,8,8,7,7,7,8,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,9,9,8,8,9,8,7,8,8,7,7,7,7,7,7,7,7,7,8,8,8,6,7,7,6,7,7,7,6,6,6,6,6,6,6,5,6,6,6,6,6,7,7,6,6,5,6,6,6,6,6,6,5,6,6,6,6,6,7,6,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,5,5,5,7,7,8,11,12,12,12,11,13,13,12,14,14,15,15,16,18,18,19,19,21,22,21,23,21,21,20,19,18,18,19,18,17,20,23,21,22,26,25,26,24,25,26,28,27,27,28,28,27,28,27,28,27,26,27,26,27,26,25,26,23,26,25,24,27,24,24,27,24,24,24,22,23,23,21,20,20,20,17,16,15,12,11,8,6,5,4,4,4,4,3,4,4,4,5,5,4,5,5,4,4,6,6,5,6,7,6,5,6,6,6,6,6,7,6,6,6,6,6,7,7,7,7,6,6,6,5,5,6,5,5,5,5,5,5,5,5,4,5,5,5,5,6,5,5,6,5,5,6,6,6,6,6,6,6,6,7,7,8,9,8,8,8,7,8,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,5,4,4,5,5,4,5,5,4,4,4,5,5,6,6,6,6,6,6,6,6,6,7,6,7,7,7,8,8,8,7,7,7,8,7,7,7,7,7,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,4,3,3,4,4,4,4,4,4,4,5,5,5,6,6,6,7,7,7,7,7,7,7,8,8,7,8,8,7,8,8,8,8,7,8,8,7,7,7,6,6,5,5,5,5,5,5,5,4,5,5,4,4,4,4,3,4,4,4,3,4,4,3,3,3,3,3,3,4,3,2,3,3,2,3,3,2,3,2,2,3,2,2,3,3,3,3,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,2,2,1,2,2,2,2,2,3,3,3,3,3,4,4,3,3,2,2,2,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,6,6,6,6,6,6,7,7,8,9,10,10,10,12,11,12,13,14,14,15,17,17,20,19,20,18,20,19,19,22,21,22,23,21,25,23,24,25,25,22,26,25,24,24,25,24,23,22,23,25,24,21,23,21,24,23,24,23,22,25,23],[27,27,27,28,27,28,27,27,27,26,25,25,26,25,25,25,25,26,24,26,26,25,25,26,25,25,26,25,26,26,25,26,27,27,25,27,25,26,26,26,27,26,25,26,26,26,25,24,22,23,23,23,21,20,21,20,20,21,21,18,16,14,10,7,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,8,8,8,8,9,8,9,9,9,10,9,9,10,10,10,10,11,11,11,11,12,12,13,12,13,13,12,11,11,11,11,11,12,11,12,12,10,10,12,11,11,11,12,12,11,11,11,11,11,11,12,11,11,11,11,11,10,10,10,10,10,11,10,9,10,10,9,9,8,10,9,10,10,9,10,9,9,8,9,9,9,9,9,9,8,9,9,9,9,10,10,9,10,10,9,10,9,9,10,9,9,9,10,9,9,9,9,9,9,9,10,11,10,9,10,10,9,9,10,9,8,8,8,8,9,9,8,8,10,9,8,9,9,9,8,8,9,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,10,9,9,9,9,9,9,9,8,8,9,9,8,8,8,8,9,9,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,7,8,7,8,8,8,7,7,7,7,7,7,7,6,7,6,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,6,6,6,6,6,6,6,5,5,6,5,6,5,5,5,5,5,5,5,6,5,5,8,8,7,10,10,12,10,10,12,12,11,12,13,14,12,16,16,18,17,20,20,21,20,21,20,18,17,16,17,16,18,18,16,19,22,21,22,24,24,24,24,25,26,27,27,26,27,27,27,27,27,26,27,25,26,25,26,25,23,25,22,25,25,23,24,23,23,26,23,22,23,21,21,21,20,19,19,17,16,15,14,11,11,8,6,5,4,4,4,4,4,4,4,5,5,5,4,5,5,4,5,5,6,5,5,6,6,6,6,7,7,7,7,7,7,7,7,7,8,8,7,8,7,6,6,7,6,5,6,6,5,5,6,5,5,5,5,5,5,6,5,5,6,6,5,6,6,6,6,6,6,6,7,7,7,7,7,8,9,9,9,8,9,8,8,8,7,8,7,7,7,7,7,7,7,7,7,7,6,6,6,6,5,5,6,6,6,6,6,5,5,6,5,5,5,6,5,5,5,6,6,7,7,7,7,6,6,6,7,7,8,7,8,8,8,9,9,9,8,9,9,9,8,8,8,8,7,7,7,8,7,7,6,7,6,6,6,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,5,6,5,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,4,4,5,4,4,4,4,4,4,5,6,6,5,6,6,6,7,7,7,8,8,8,8,8,8,8,9,9,8,9,9,8,9,9,9,8,8,8,8,8,8,7,7,7,6,6,5,6,5,6,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,2,2,2,3,2,3,3,3,4,4,4,5,4,4,4,4,4,4,4,5,5,5,6,6,6,6,6,7,7,7,7,7,8,7,9,9,10,11,11,13,12,12,14,15,14,16,17,17,20,20,21,17,20,19,18,22,20,21,22,20,24,22,22,23,24,21,24,24,22,23,23,24,21,20,22,22,21,20,21,21,22,22,23,21,20,23,23],[28,28,27,27,28,28,28,27,27,26,27,26,27,25,26,26,26,26,26,26,26,25,26,26,25,26,26,25,26,26,25,27,27,27,26,27,26,27,27,27,27,26,25,26,26,26,25,24,24,24,24,23,23,23,22,21,21,21,20,19,17,14,10,7,6,5,5,5,5,4,5,5,5,5,6,5,6,7,7,6,7,7,7,6,7,7,7,7,8,8,8,8,8,8,8,9,8,9,9,9,10,10,10,10,10,11,11,11,12,12,11,11,10,10,10,10,10,11,11,11,11,10,10,11,11,10,10,11,10,10,11,10,10,10,10,10,10,10,10,10,9,9,10,10,9,9,10,9,8,9,9,8,8,8,9,8,8,9,8,9,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,10,9,9,9,9,9,9,9,8,8,8,8,8,9,9,9,10,9,8,10,9,9,9,9,9,9,8,8,8,8,8,8,8,9,8,8,8,8,9,8,8,8,8,8,8,8,8,7,7,8,7,7,7,8,8,9,8,9,9,9,8,9,9,9,9,9,9,8,8,9,8,8,8,8,8,8,9,9,9,7,7,8,7,7,8,8,7,7,7,7,7,7,7,6,7,7,7,8,7,7,8,7,7,6,7,7,7,6,7,7,6,6,7,7,7,7,7,7,6,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,6,6,6,6,6,5,5,5,5,5,6,5,5,5,5,5,5,4,5,6,9,8,11,12,12,11,12,14,15,14,15,16,15,17,17,18,18,18,21,21,22,21,22,21,20,20,20,18,19,18,19,20,20,22,22,22,24,23,24,25,25,26,26,26,26,27,27,27,27,27,27,27,26,26,24,26,26,24,25,24,24,24,22,25,24,23,25,22,23,23,22,21,21,20,19,20,19,17,15,13,12,11,9,6,6,5,5,4,5,5,5,5,5,6,5,5,5,6,5,6,6,6,6,6,7,6,6,6,8,7,8,7,8,7,8,7,7,8,9,7,9,8,7,7,7,7,6,7,7,5,6,6,6,5,6,6,5,5,6,5,5,6,5,6,6,6,6,6,6,7,7,7,7,7,7,8,8,9,9,9,9,9,8,8,8,8,8,8,7,7,7,8,7,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,5,5,6,6,5,5,5,4,4,5,6,8,8,8,7,7,6,6,7,6,7,7,7,8,8,8,8,8,8,9,9,8,8,8,7,7,7,7,6,6,6,6,5,6,6,5,5,6,5,5,5,5,6,5,5,5,6,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,7,6,7,7,7,8,8,8,8,8,8,8,8,9,8,9,8,8,8,8,8,7,7,7,7,7,6,6,5,4,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,4,5,4,4,4,4,4,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,1,1,2,1,1,0,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,5,4,4,6,5,5,5,5,5,5,5,6,5,5,6,6,6,6,7,7,7,7,8,8,7,8,9,10,10,11,12,13,12,12,14,16,16,16,19,17,20,19,20,19,21,18,19,22,20,22,23,20,24,22,23,23,24,22,24,24,23,24,23,23,21,21,22,23,23,23,22,22,23,24,22,22,20,23,22],[28,29,28,28,29,29,29,29,28,27,28,28,28,27,28,28,28,28,27,27,27,25,27,26,26,27,28,27,28,28,25,28,29,29,28,28,28,29,28,28,28,28,27,27,27,26,26,25,25,24,25,24,23,22,22,22,21,20,20,19,17,16,11,7,7,5,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,10,10,10,10,10,9,8,8,8,9,9,9,9,9,10,8,8,9,9,8,8,9,8,8,8,8,8,8,8,9,8,8,8,9,8,7,8,8,7,7,8,7,7,7,7,7,7,7,7,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,6,7,7,7,7,7,8,8,8,7,8,8,8,8,8,7,7,7,7,7,7,7,6,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,7,7,7,7,7,7,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,6,7,7,7,7,6,6,6,6,5,6,6,5,5,6,5,5,6,6,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,4,6,7,7,9,10,12,10,8,12,11,13,14,14,13,15,16,17,18,18,19,20,22,22,22,21,21,20,20,19,18,19,22,19,20,21,22,23,27,24,25,25,26,27,27,27,27,27,27,28,27,27,27,27,27,27,27,26,26,25,26,25,25,26,25,26,25,24,27,23,23,23,22,23,22,20,20,20,19,16,16,15,13,12,8,5,4,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,7,6,7,6,7,6,7,6,6,6,6,6,7,6,8,7,5,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,7,7,8,8,8,8,7,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,7,7,7,7,6,5,5,5,5,6,6,6,6,6,7,7,6,7,7,7,6,6,6,6,5,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,5,5,6,6,6,6,6,6,6,6,7,7,6,7,7,7,7,7,7,7,7,7,6,7,6,6,7,6,5,5,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,1,2,2,2,2,2,2,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,7,8,9,10,10,12,12,13,13,15,15,17,19,18,23,20,21,21,22,20,21,24,23,23,25,23,26,25,26,26,26,25,26,26,25,25,25,26,25,23,24,26,25,24,25,25,26,26,27,23,21,25,24],[28,28,28,27,28,28,28,27,28,26,28,27,27,26,25,27,26,27,26,26,27,26,26,27,26,26,27,26,26,27,26,27,27,27,26,27,27,27,26,26,27,26,25,25,25,24,23,22,22,20,22,21,21,20,20,20,20,21,20,18,16,15,12,7,6,4,4,4,4,4,4,4,4,4,5,4,5,6,6,6,5,6,6,5,6,7,7,6,6,7,7,7,7,8,8,8,8,8,8,9,9,8,9,9,10,10,11,10,10,11,11,10,9,8,8,9,9,9,9,9,9,8,8,9,9,9,9,10,9,9,10,9,8,8,10,10,10,8,8,9,9,8,8,9,8,8,9,8,7,8,8,7,8,7,8,8,8,8,7,7,7,7,6,7,7,7,6,7,7,7,7,7,7,8,8,8,8,8,9,8,8,8,8,8,8,8,8,8,7,7,8,7,8,7,8,8,9,8,8,8,9,8,8,8,8,7,7,7,7,7,7,7,7,7,7,8,7,7,7,7,7,7,7,6,6,7,7,6,6,7,6,6,6,7,6,7,7,7,7,7,7,6,7,7,6,6,7,7,6,7,7,7,7,7,7,7,7,8,7,7,7,6,6,6,6,6,6,6,7,6,6,6,7,6,7,6,6,7,7,6,7,6,6,6,6,6,5,6,6,5,5,5,6,6,5,6,6,6,5,5,4,4,5,5,4,5,5,4,5,5,5,5,5,6,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,3,5,8,9,8,12,9,11,11,10,12,12,11,12,14,14,15,16,18,17,19,19,20,20,18,22,21,18,20,20,15,19,20,19,19,20,23,21,23,24,24,24,24,25,26,26,26,26,26,26,26,26,26,26,25,24,26,25,24,24,23,24,22,24,23,22,24,23,21,25,22,22,22,21,21,19,19,19,17,17,15,14,13,11,10,7,5,4,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,7,6,6,6,8,7,8,7,7,7,7,7,5,6,7,6,8,8,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,5,6,6,6,6,7,8,8,8,8,8,7,7,7,6,7,6,6,6,6,6,6,6,6,6,7,7,6,6,7,6,6,5,6,5,5,5,5,5,4,5,5,4,4,5,5,4,4,5,5,6,7,6,7,6,6,6,6,6,6,6,6,7,7,7,7,7,8,7,7,8,7,7,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,4,5,5,5,4,4,5,4,4,5,5,4,4,5,5,4,5,5,6,5,5,5,5,4,5,5,4,4,5,4,4,5,5,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,4,4,4,4,5,5,6,6,6,6,7,7,7,6,7,7,7,7,7,8,8,7,8,7,7,7,7,7,7,6,6,6,6,6,5,4,4,5,4,5,5,4,4,4,4,3,4,4,3,4,3,3,3,4,3,3,3,3,4,3,4,4,4,3,4,3,3,3,3,3,3,3,2,3,2,2,2,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,2,2,3,3,3,3,4,4,3,4,4,5,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,8,9,9,10,11,12,11,12,14,14,16,16,18,20,20,18,20,19,20,19,20,22,22,22,24,21,23,23,25,23,23,22,24,23,23,24,25,23,24,22,25,24,24,24,23,24,25,24,24,23,22,24,23],[27,27,27,27,28,28,27,28,27,26,27,26,27,26,26,26,26,27,26,27,26,26,26,27,26,26,27,26,26,27,26,27,28,28,26,27,27,27,27,26,27,26,26,26,26,25,24,24,24,23,22,23,22,22,22,22,20,21,19,18,15,14,10,6,5,4,4,4,4,4,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,9,10,10,9,8,8,8,8,8,9,9,9,9,8,8,9,8,8,8,9,8,8,9,8,8,8,9,9,9,9,8,9,8,7,8,8,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,7,6,6,6,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,6,7,7,7,7,7,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,6,7,7,6,6,7,6,6,6,6,6,6,6,6,6,5,5,6,5,5,6,6,6,7,7,7,7,7,7,6,7,7,6,6,7,6,6,6,6,6,6,6,7,7,7,7,7,6,6,6,5,5,6,6,5,5,6,5,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,4,4,3,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,4,4,3,4,3,4,4,3,3,3,3,3,4,3,3,3,3,5,6,8,6,9,9,10,9,8,12,10,11,13,13,13,15,15,16,17,17,19,20,21,20,21,20,19,20,19,19,18,20,20,19,20,21,22,23,24,24,24,23,24,25,25,25,25,26,26,26,26,26,26,26,25,26,24,25,25,24,24,22,24,24,21,24,23,22,25,21,21,23,19,20,21,19,20,19,18,16,16,12,12,11,7,5,4,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,7,7,8,6,8,6,7,6,5,6,7,6,7,7,6,6,5,5,5,5,5,4,5,5,4,4,4,4,3,4,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,8,8,8,8,7,7,6,6,6,6,6,5,5,5,5,6,5,5,6,6,5,5,6,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,6,7,7,6,6,6,5,5,5,6,6,6,6,6,7,7,7,7,8,8,7,7,6,6,6,5,6,5,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,3,3,4,3,3,3,3,3,4,3,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,6,7,7,7,8,7,8,7,7,6,6,6,6,6,5,5,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,2,2,3,3,3,3,3,4,4,4,4,5,5,4,4,5,4,4,5,5,4,5,5,5,5,6,6,6,6,6,6,6,6,6,7,8,9,10,10,12,11,11,13,14,15,15,17,18,20,18,19,19,20,18,18,21,21,21,22,21,23,23,23,23,23,22,23,24,23,23,23,22,22,21,22,22,22,22,22,21,23,23,24,22,21,23,23],[28,29,29,28,29,29,28,28,28,27,28,27,28,27,27,27,27,28,27,28,28,27,28,28,26,28,29,26,28,28,26,28,29,29,28,29,28,28,28,28,29,28,27,27,27,27,25,25,25,24,24,23,23,23,22,22,21,21,20,18,16,14,10,7,5,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,9,9,9,8,7,7,7,7,8,7,7,8,8,7,7,7,7,7,7,8,7,7,7,7,6,7,8,8,8,7,7,7,7,6,7,7,6,6,6,6,6,6,6,5,5,6,6,6,6,6,6,6,5,5,5,6,5,5,6,5,6,5,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,6,6,6,5,6,5,6,6,6,7,7,7,6,7,7,7,7,7,7,6,6,6,6,6,6,5,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,7,8,7,9,10,12,9,9,13,11,11,14,13,14,15,15,17,17,18,19,21,21,21,23,20,20,21,21,21,20,20,22,20,20,23,24,24,27,24,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,26,27,26,27,26,25,25,25,26,24,26,24,24,26,23,23,24,22,23,22,20,20,20,18,16,15,14,12,10,7,5,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,6,6,7,6,6,6,5,5,4,5,6,5,6,6,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,6,6,7,7,7,7,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,3,3,4,4,5,6,6,7,6,5,5,5,4,4,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,5,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,7,8,9,9,10,11,11,11,12,13,14,16,18,17,22,18,20,20,21,19,20,22,21,22,25,21,25,25,25,24,24,24,25,25,25,25,25,24,24,22,24,25,24,23,24,24,24,25,25,22,22,25,22],[28,29,28,28,29,29,28,28,28,27,28,28,28,28,27,27,28,28,28,28,28,26,27,28,27,28,29,28,28,28,27,28,28,29,28,29,27,28,28,28,28,27,28,27,27,26,25,24,25,24,24,23,22,22,22,21,20,21,19,19,16,15,10,6,5,4,4,3,4,3,3,3,3,4,4,4,4,5,5,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,8,7,7,8,8,8,8,9,10,9,9,10,9,9,8,8,7,8,8,8,7,8,9,7,7,8,8,7,8,8,8,7,8,8,7,8,8,9,8,8,8,8,7,7,7,7,6,7,7,7,6,6,7,6,6,6,6,6,6,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,7,6,6,6,6,7,6,6,7,7,6,6,7,6,6,6,6,7,8,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,5,5,6,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,5,5,4,4,5,4,3,4,5,4,4,5,5,4,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,6,7,7,9,9,9,11,9,10,12,13,13,15,16,15,16,18,19,19,20,21,22,21,23,22,21,22,19,17,20,21,21,20,20,24,22,23,25,25,26,26,26,27,28,28,27,28,27,28,28,27,27,27,27,27,26,26,26,26,26,24,25,25,25,25,24,25,26,24,24,23,22,23,23,20,21,20,19,16,15,14,12,10,7,5,3,2,2,2,2,2,2,3,3,3,4,3,3,4,4,3,4,5,4,5,5,5,5,5,6,6,6,6,7,6,6,5,5,5,6,5,6,6,5,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,6,6,7,7,7,7,7,6,6,6,5,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,6,6,6,5,5,5,5,4,5,5,5,5,6,6,6,6,7,6,6,6,6,6,5,5,5,5,5,4,4,5,4,4,4,4,3,4,4,4,3,4,4,4,3,3,4,3,3,4,4,3,3,4,4,3,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,6,7,7,6,6,6,6,6,6,6,5,5,5,4,4,3,4,3,4,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,3,3,3,3,3,4,3,4,4,4,3,4,4,3,3,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,7,8,9,9,10,11,11,11,11,14,14,15,18,18,20,19,20,19,20,18,19,21,20,21,23,21,24,24,22,24,24,23,24,24,23,25,24,23,23,21,23,24,23,21,23,22,24,25,25,22,21,24,22],[26,27,27,27,27,28,27,27,28,26,26,26,26,27,25,26,26,27,27,27,27,27,26,27,27,26,27,26,27,27,26,27,28,28,26,28,27,27,28,27,27,26,26,26,25,25,24,22,22,22,22,22,22,22,21,22,20,21,20,18,15,14,10,7,6,4,4,3,3,3,3,3,3,3,4,4,4,5,4,4,4,5,5,4,5,5,6,6,6,6,6,7,7,6,7,7,7,7,8,8,8,8,8,8,8,9,10,10,10,10,10,9,8,8,7,8,8,8,7,8,8,7,7,8,8,8,8,9,8,8,9,9,8,8,8,9,9,8,8,8,8,7,8,8,7,7,8,7,7,7,7,6,6,6,7,7,7,7,6,7,5,5,5,6,6,5,6,6,6,6,6,7,6,6,7,7,7,7,8,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,7,7,7,6,6,7,7,7,6,7,7,7,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,4,5,5,6,6,6,6,7,7,6,6,6,6,6,6,6,6,5,6,6,6,5,6,7,7,7,7,7,6,5,6,5,5,6,5,5,6,6,5,5,6,6,5,6,5,6,6,6,6,6,6,5,5,5,5,4,4,5,5,4,4,5,4,4,5,5,4,4,3,3,3,4,4,3,3,4,3,3,4,4,3,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,4,4,7,8,7,9,10,10,9,9,10,10,11,13,13,14,13,16,17,17,17,18,18,22,20,22,18,18,21,18,18,18,19,21,18,19,21,21,22,25,23,24,24,25,25,26,26,26,26,26,26,25,26,25,26,24,25,24,25,25,23,25,22,24,23,21,24,21,21,25,21,23,22,20,20,20,18,20,18,17,16,14,12,10,9,7,4,3,2,2,2,2,2,2,3,3,4,4,3,3,4,4,4,4,5,4,4,6,5,5,5,6,6,7,6,6,6,6,5,5,6,6,5,6,6,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,4,5,5,5,6,6,6,7,7,7,7,7,7,6,6,6,5,5,5,5,4,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,6,6,6,6,5,5,5,5,5,6,6,6,6,7,7,7,6,7,7,7,6,6,6,6,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,3,3,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,6,5,6,6,6,6,7,6,6,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,3,3,3,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,4,4,5,4,4,4,4,3,3,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,8,9,9,10,11,11,11,11,12,14,14,15,17,17,20,18,18,18,19,17,19,21,20,20,22,19,22,22,23,21,22,22,23,23,22,24,22,21,22,22,20,22,22,22,22,21,22,21,23,21,21,23,23],[28,29,28,28,29,29,28,29,29,28,28,28,29,28,28,28,28,29,27,28,28,28,28,28,28,28,29,28,28,28,27,28,29,29,28,29,29,28,29,29,29,28,28,28,27,27,26,24,25,24,24,23,23,23,22,23,21,21,21,19,16,14,11,7,6,4,3,3,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,7,6,6,6,7,7,7,7,8,8,7,8,8,7,6,6,6,7,6,7,7,7,7,6,6,7,6,6,6,7,6,6,7,7,6,7,7,7,7,7,6,7,6,6,6,6,6,5,6,6,5,5,6,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,5,5,5,5,6,5,5,5,5,5,5,6,5,5,6,6,6,7,7,6,6,7,6,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,5,5,5,5,5,4,5,5,4,5,5,4,4,5,5,5,6,6,6,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,4,4,7,6,6,7,9,10,9,11,10,10,11,13,13,13,14,15,17,17,18,20,20,22,20,23,20,20,22,20,20,20,19,21,19,21,22,24,24,26,24,25,25,26,26,27,27,27,27,27,27,27,27,26,27,26,26,27,26,26,25,26,24,25,25,24,26,24,24,25,23,23,23,22,22,22,20,21,20,18,16,15,13,12,10,7,4,3,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,6,6,7,5,6,5,5,5,4,5,6,5,6,6,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,6,6,6,6,6,6,5,5,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,6,6,5,5,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,2,2,3,3,2,2,3,3,3,3,3,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,6,7,8,8,10,11,11,11,12,13,14,16,17,17,21,18,19,17,20,19,18,21,20,22,23,21,23,24,24,23,23,24,24,24,24,24,24,24,24,22,24,24,24,23,23,22,24,24,25,23,22,24,23],[28,28,29,29,29,29,28,28,29,27,28,28,28,27,27,27,28,28,28,27,28,27,27,28,28,27,29,28,28,28,27,28,29,29,28,28,28,28,29,28,29,28,28,28,27,27,26,25,25,24,25,24,22,22,22,22,20,21,20,18,15,14,10,6,5,4,3,3,3,3,3,2,3,3,3,3,3,3,4,4,3,4,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,6,8,8,8,8,9,9,8,7,6,6,7,7,7,6,7,7,6,6,7,7,6,6,7,6,6,7,6,6,7,7,7,7,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,4,5,5,5,5,6,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,6,6,7,6,6,6,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,5,5,5,5,5,6,5,5,5,5,5,4,5,5,4,4,4,4,4,4,5,5,5,6,6,5,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,5,6,6,9,10,10,10,10,11,11,10,12,14,14,14,16,17,18,19,19,20,21,21,23,20,20,21,20,20,20,21,21,20,21,23,24,25,27,25,26,26,26,27,27,27,27,27,27,28,27,27,27,27,27,27,27,26,27,26,25,24,25,26,24,25,23,24,25,22,23,23,22,22,21,20,20,19,18,16,15,13,11,9,6,4,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,5,5,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,6,6,6,6,5,5,4,4,4,4,3,3,3,4,3,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,6,5,5,4,4,4,4,4,4,4,4,5,6,6,5,6,6,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,5,6,7,8,9,9,11,10,10,11,13,13,14,16,16,19,19,18,17,18,18,18,21,18,21,22,20,24,24,21,24,23,23,24,24,23,22,22,23,22,19,22,23,24,20,24,21,22,23,24,21,20,24,22],[28,28,28,28,28,29,28,28,28,27,27,27,27,27,26,27,27,27,26,27,26,27,27,27,26,27,27,26,27,27,26,27,28,28,26,28,27,27,27,27,28,26,27,27,27,27,26,24,24,25,24,23,23,22,21,22,21,21,19,19,17,15,10,6,5,4,4,3,3,3,3,3,3,3,4,4,4,5,5,4,4,5,5,4,5,5,5,5,6,6,6,7,6,6,7,7,7,7,8,7,7,8,8,8,8,9,9,9,9,10,9,9,8,8,7,8,8,7,7,8,8,7,7,8,8,7,7,8,7,8,8,8,7,8,8,8,8,8,8,8,7,7,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,7,6,6,6,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,7,6,6,6,7,6,6,6,6,6,6,7,7,8,7,7,7,8,7,7,7,7,7,6,6,6,6,7,6,6,6,7,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,6,6,6,7,6,6,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,6,5,6,5,5,4,4,5,5,4,4,4,4,4,4,5,4,4,4,4,4,4,3,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,5,4,7,6,8,8,9,10,9,10,12,13,12,13,13,14,14,16,17,17,18,19,20,22,19,22,20,18,21,18,16,19,20,19,17,21,23,23,24,27,25,26,26,27,27,27,28,28,28,28,28,27,27,27,27,27,27,24,28,27,26,26,22,26,24,25,26,23,24,26,23,23,23,21,22,21,20,19,19,18,16,14,12,9,8,5,4,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,4,4,5,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,6,6,6,7,7,6,6,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,4,4,3,4,4,4,5,6,6,6,6,5,5,5,5,5,6,5,5,6,6,7,7,7,7,7,6,6,6,6,6,5,5,5,4,5,5,4,4,4,4,3,4,4,4,3,3,4,3,3,3,3,3,3,3,4,3,3,3,3,3,3,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,4,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,7,7,6,7,7,6,6,6,6,6,6,6,6,5,5,4,4,3,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,5,4,4,5,5,5,5,5,7,8,9,9,10,11,10,10,11,13,13,14,15,15,17,18,17,16,17,17,17,20,18,20,20,19,23,22,23,22,23,22,24,23,22,22,23,23,21,19,19,23,21,20,21,20,21,21,24,20,19,22,22],[27,27,27,27,27,28,27,27,27,26,27,27,27,27,26,27,27,27,27,27,27,27,27,27,27,26,27,26,27,28,26,27,28,28,26,27,26,27,27,27,27,26,26,26,26,25,24,23,24,23,22,22,22,22,22,22,21,21,20,19,17,15,10,8,6,4,4,4,4,3,3,3,3,3,4,4,4,4,4,4,4,5,5,4,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,9,9,9,9,10,9,8,7,8,7,8,8,7,7,8,8,7,7,8,8,7,7,8,8,7,8,8,7,7,8,8,8,8,8,8,8,7,7,7,7,7,7,7,6,7,7,6,6,6,6,6,7,7,6,6,6,5,5,6,6,5,5,6,6,6,6,6,6,6,6,6,7,7,7,6,6,6,6,7,6,6,6,7,6,6,7,6,7,7,7,8,8,8,7,8,8,8,8,8,8,7,7,7,6,7,7,7,6,7,6,6,6,6,6,6,5,6,6,5,5,6,5,4,5,5,4,4,5,5,5,6,6,6,6,6,6,6,6,6,6,5,6,6,5,6,6,6,5,6,6,6,7,7,7,6,5,5,5,5,5,5,5,5,6,5,6,6,6,5,6,6,6,6,6,6,6,6,5,4,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,4,5,6,7,8,9,10,12,9,9,12,12,10,14,13,12,13,15,16,15,17,18,19,20,19,20,19,18,20,17,19,19,20,20,18,21,21,23,24,26,25,25,25,26,26,26,27,27,27,27,27,26,27,27,27,26,26,25,26,26,25,24,21,25,23,23,25,23,23,25,21,24,23,20,22,21,20,20,18,17,15,14,11,9,9,6,4,3,2,2,2,2,2,2,3,3,4,3,3,4,4,4,4,4,5,4,4,6,5,5,5,7,6,7,6,6,6,6,5,5,5,6,5,7,6,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,3,4,5,4,4,5,5,5,5,5,6,6,6,7,7,7,7,7,7,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,6,7,7,6,6,5,5,5,5,6,5,5,6,6,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,5,5,5,5,5,5,6,6,5,6,6,6,6,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,4,4,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,2,3,3,2,2,2,2,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,6,6,6,6,6,7,8,9,9,10,11,11,10,12,13,13,14,15,16,18,17,18,16,17,17,18,20,18,20,21,19,22,22,23,22,23,22,22,22,23,23,22,22,23,19,20,21,22,20,21,20,20,21,23,20,19,22,21],[28,28,28,28,29,28,28,29,28,27,27,27,28,27,27,27,28,28,27,28,28,27,28,28,27,28,29,27,28,28,27,28,29,29,27,28,28,28,29,28,29,28,28,28,28,27,26,24,25,25,24,23,24,22,22,23,21,20,20,19,16,14,9,7,5,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,5,5,5,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,7,8,8,7,7,7,7,7,7,7,6,7,7,6,6,7,7,6,7,7,7,6,7,7,6,7,7,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,5,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,6,5,5,5,6,5,5,6,6,6,6,6,6,6,5,5,6,5,5,6,6,5,5,6,6,5,6,6,7,7,7,6,7,7,7,7,7,7,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,6,6,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,6,6,6,6,5,5,4,4,4,5,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,5,5,5,6,7,7,8,10,11,8,9,14,11,9,14,14,13,13,16,16,16,18,20,20,21,19,22,20,17,20,19,19,19,19,21,19,21,22,24,25,26,24,25,25,26,26,26,27,27,27,27,27,27,27,27,27,26,27,27,27,27,26,26,24,26,26,24,26,24,25,26,23,23,24,21,22,21,19,19,17,16,14,13,12,9,8,7,4,3,2,2,1,2,2,2,3,3,3,3,3,3,4,4,4,5,5,5,5,6,5,6,5,7,6,7,6,6,5,5,5,5,5,6,5,6,7,6,5,5,4,5,4,4,3,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,6,7,7,7,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,4,4,4,5,5,6,6,6,6,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,6,6,7,6,6,6,6,6,5,5,5,5,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,3,2,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,3,3,3,2,2,3,3,3,3,4,4,4,4,4,5,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,7,8,8,9,11,10,10,11,13,13,15,15,16,19,18,18,17,18,17,18,21,20,20,22,21,23,23,24,23,23,23,25,24,23,25,23,24,24,21,23,24,24,22,23,21,23,23,25,21,19,23,22],[28,28,28,28,28,28,28,28,28,27,27,27,27,26,26,26,27,28,27,27,28,26,26,28,27,26,28,28,27,28,27,27,28,28,27,28,28,27,28,27,28,27,27,27,26,26,26,24,24,24,24,23,22,21,21,21,20,20,20,19,16,14,10,6,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,6,6,7,7,7,7,8,8,8,8,9,9,8,7,7,7,7,7,7,7,7,7,6,6,7,7,6,7,7,7,6,7,7,6,7,7,8,7,7,7,7,6,6,7,7,6,6,6,6,5,6,6,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,6,5,5,5,5,5,5,6,5,5,6,6,6,5,5,5,6,5,5,6,6,5,5,6,5,5,6,6,7,7,7,6,7,7,7,7,7,7,6,6,6,6,6,6,5,5,6,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,5,5,5,6,5,5,6,6,5,5,5,5,5,5,5,4,4,4,5,4,4,5,5,6,6,6,5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,4,6,7,8,9,10,12,10,10,13,13,11,13,13,14,13,15,17,17,18,19,20,20,20,21,20,18,21,19,18,19,20,21,19,22,22,26,25,27,26,25,26,26,26,27,27,27,27,27,27,26,28,27,27,26,27,26,26,26,26,25,25,25,26,24,25,23,23,25,22,22,22,21,21,20,19,19,17,16,14,13,12,9,7,6,4,3,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,5,5,5,5,5,5,5,4,4,4,4,4,5,5,4,4,4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,6,6,6,5,5,5,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,4,3,3,4,4,4,5,6,6,7,6,6,5,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,6,7,8,8,9,11,10,10,10,12,12,14,15,15,19,18,17,16,17,17,17,21,17,20,21,20,24,23,21,23,24,22,24,23,23,21,22,23,22,18,20,24,23,20,23,21,22,22,24,19,19,22,19],[28,29,28,29,29,29,29,29,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,27,29,28,28,29,27,28,29,29,28,29,29,28,29,28,29,28,28,28,28,27,26,26,27,25,25,25,24,23,22,22,20,20,19,18,16,14,10,8,7,5,4,4,4,3,4,3,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,6,6,6,6,7,6,7,7,7,7,7,8,8,7,8,8,8,8,9,8,9,8,10,10,8,7,8,7,8,8,8,8,8,8,7,7,8,8,7,7,8,7,8,8,7,7,8,8,9,8,8,8,8,7,7,7,7,7,6,7,7,6,7,7,6,6,6,7,6,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,5,5,6,5,5,5,5,5,4,5,5,4,5,6,6,7,6,6,6,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,6,7,7,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,6,7,9,10,13,15,15,13,14,15,14,13,16,16,17,16,18,19,20,20,20,21,22,21,22,19,18,21,19,20,19,21,22,20,20,24,25,24,28,25,26,27,27,27,28,27,28,28,28,28,27,28,27,28,27,28,27,27,27,26,27,24,26,26,25,26,25,25,26,23,23,25,22,23,23,20,20,20,17,15,14,14,11,9,7,4,3,2,2,3,2,2,2,2,2,3,3,3,3,4,3,3,3,4,4,4,5,5,4,4,5,5,5,5,5,5,5,4,4,4,4,4,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,6,5,6,6,7,6,6,5,5,5,5,5,4,4,4,4,5,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,6,7,7,7,7,6,5,5,5,5,6,5,5,6,6,7,7,7,7,7,7,7,7,6,6,6,6,6,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,6,6,5,6,5,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,5,4,4,4,4,4,4,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,1,2,1,1,1,0,1,1,2,2,2,2,2,2,2,3,3,3,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,8,9,9,10,11,10,11,11,12,13,15,17,16,19,19,18,16,19,18,17,21,19,22,22,21,25,25,24,23,24,24,25,25,23,24,23,24,23,22,22,25,23,21,24,23,23,24,26,21,21,24,22],[28,28,28,28,29,29,28,28,28,27,27,27,28,27,27,27,27,27,27,27,27,26,27,28,27,27,28,27,27,28,27,28,28,29,27,28,27,28,28,28,28,27,28,27,28,27,27,25,26,24,25,24,24,22,23,23,21,21,20,18,16,15,11,9,7,6,5,5,5,4,4,4,4,4,5,5,5,6,6,5,6,7,7,6,7,8,7,8,8,8,8,9,9,9,9,9,9,9,10,10,10,11,11,11,11,12,12,12,12,13,12,11,11,11,9,10,11,11,10,10,11,9,10,11,11,10,10,12,10,10,10,10,10,10,11,11,11,11,11,11,10,10,10,10,9,9,10,9,9,9,9,8,8,8,9,9,9,9,8,9,9,8,7,8,8,7,7,8,8,7,8,8,8,8,8,8,8,8,9,8,8,8,8,9,8,8,8,8,8,8,8,8,8,8,9,10,10,10,9,10,10,10,10,10,10,9,9,9,9,9,9,9,8,9,9,8,8,8,8,7,7,8,8,7,7,7,7,6,7,7,6,6,6,7,7,8,8,8,8,8,8,7,7,8,7,7,7,7,6,7,7,7,7,7,7,8,8,8,7,7,7,7,6,7,7,6,6,7,7,6,7,7,7,7,8,8,8,8,8,8,8,7,7,6,6,7,6,6,6,6,5,5,6,5,5,6,6,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,4,4,6,7,7,9,10,13,14,15,13,14,17,15,15,17,16,18,16,19,20,20,22,23,22,24,21,23,21,19,22,19,18,21,21,21,20,22,24,25,25,28,25,27,27,27,27,28,28,27,27,27,28,27,27,28,28,26,27,26,27,26,26,26,22,27,25,25,26,24,24,26,24,24,25,23,24,23,22,21,21,19,17,15,14,11,10,7,5,4,3,2,2,2,2,2,2,2,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,6,6,6,6,5,6,5,5,4,4,5,5,6,6,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,5,5,6,6,7,7,8,8,8,8,8,7,7,7,6,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,6,6,5,5,6,6,5,6,6,6,5,5,6,7,8,8,8,8,8,8,7,8,7,8,8,7,8,9,8,10,10,10,9,10,9,9,9,8,8,9,8,8,8,7,7,7,6,6,7,6,6,6,6,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,4,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,6,7,6,7,7,8,8,7,8,7,8,8,9,8,9,9,10,8,10,9,9,9,9,9,9,9,8,8,7,7,6,5,5,5,5,5,5,4,4,5,4,4,4,4,4,3,4,4,3,4,4,4,3,3,3,4,4,4,4,4,4,4,4,5,5,5,4,4,5,5,4,4,4,4,3,4,3,3,3,2,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,0,1,2,2,2,2,3,3,3,3,4,4,5,6,5,6,5,6,6,4,5,5,4,4,5,5,5,5,5,5,5,6,5,5,6,7,6,6,7,7,8,9,10,10,11,11,11,11,12,13,14,15,16,16,20,19,19,17,18,18,18,21,19,21,22,21,23,23,23,23,23,23,24,25,24,23,22,24,23,20,21,23,23,21,23,22,21,22,23,21,20,22,21],[29,29,29,29,29,29,29,29,29,29,29,28,29,28,28,28,29,29,28,29,28,28,29,29,28,28,29,28,29,29,28,29,29,29,28,29,29,29,29,28,29,28,28,29,28,27,27,26,27,26,24,25,26,23,23,23,22,21,21,19,17,14,12,10,8,7,6,7,6,6,6,5,6,6,7,7,8,8,8,8,7,8,9,8,8,10,9,11,10,10,11,11,11,11,12,11,10,11,13,12,12,13,14,12,13,14,15,14,13,15,14,14,12,12,12,13,12,13,12,13,13,11,11,13,13,11,12,13,11,11,12,12,10,12,12,13,12,12,12,12,12,11,12,12,10,11,12,11,9,11,11,9,10,10,10,11,11,12,11,12,11,10,10,11,9,9,10,10,9,9,9,10,9,10,10,10,9,10,10,10,10,9,10,10,10,9,10,10,9,9,10,9,9,10,10,12,12,12,11,12,12,12,12,12,12,11,12,11,11,11,12,11,9,11,10,9,10,10,9,8,9,9,8,8,8,9,8,7,8,8,7,7,8,8,9,9,9,9,10,10,9,9,9,9,8,8,8,8,8,8,8,7,8,8,8,9,10,10,9,8,8,7,8,7,8,7,8,8,8,7,8,8,8,7,8,9,9,9,8,9,9,8,7,7,7,7,7,7,7,7,8,6,7,7,7,7,7,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,6,5,5,5,5,4,5,4,4,4,4,4,5,5,4,4,5,5,4,5,5,7,9,11,11,12,15,16,16,15,16,16,17,15,18,18,18,18,20,22,22,21,23,23,24,22,24,21,19,22,21,21,20,21,22,21,21,25,25,26,27,27,26,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,26,27,25,27,27,25,26,25,26,27,25,25,25,24,25,24,23,23,21,20,18,17,15,14,11,9,6,5,4,3,3,2,3,2,3,2,4,4,3,3,4,4,4,4,5,5,5,6,6,5,6,7,8,7,6,7,6,6,6,6,5,6,5,7,7,5,5,6,4,4,4,4,4,4,4,3,3,3,3,2,3,2,3,3,4,4,4,5,5,4,5,5,6,5,6,6,6,7,8,7,8,9,9,8,8,7,8,8,8,7,7,7,7,8,7,7,7,8,7,7,8,7,7,7,7,6,7,7,7,6,7,7,6,6,7,7,7,7,7,7,7,8,8,10,10,10,10,9,8,9,8,9,10,9,9,11,11,12,12,12,11,12,12,12,11,11,11,11,10,9,9,9,8,8,7,8,7,7,7,7,6,7,6,7,6,6,6,6,6,6,5,6,5,5,5,6,4,5,5,5,5,5,6,5,5,6,6,5,6,6,6,7,6,6,6,6,6,6,6,6,5,5,6,6,5,6,6,6,6,6,7,6,7,7,8,8,8,9,10,10,10,9,10,9,10,11,11,10,12,12,12,11,12,11,11,11,12,11,10,11,11,9,9,9,7,7,6,6,6,6,6,5,6,6,5,5,5,5,5,4,5,5,4,4,5,4,3,3,4,4,5,4,4,4,5,5,5,5,6,5,5,5,5,5,5,4,5,4,4,4,5,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,1,1,0,1,2,2,3,3,3,4,4,4,5,5,6,5,6,6,7,6,6,6,6,5,5,6,6,5,6,6,6,6,6,7,7,7,7,8,7,8,8,9,10,10,11,11,13,12,13,13,14,14,16,18,18,21,21,20,18,20,19,18,23,19,21,23,20,24,24,24,24,24,23,25,25,23,24,24,24,23,21,22,24,24,21,24,22,23,25,25,22,21,24,20],[29,29,29,29,29,29,29,29,29,28,27,27,28,27,28,27,28,26,27,28,26,27,27,27,26,27,28,27,28,28,26,28,28,29,27,28,27,28,28,28,29,28,28,28,28,28,27,26,27,26,25,25,24,24,23,23,21,22,20,18,16,14,12,11,10,9,9,9,8,8,7,7,7,7,9,9,10,10,11,11,10,11,11,10,11,13,13,13,14,14,15,15,16,15,14,15,16,16,16,17,17,17,18,18,17,18,18,18,19,17,18,17,16,17,16,17,16,16,14,16,16,15,16,16,17,16,16,17,16,15,15,17,16,15,15,15,16,17,16,17,17,16,16,17,17,17,16,17,14,15,16,13,14,12,14,15,15,15,15,14,13,13,13,13,13,12,13,14,13,11,13,14,13,12,15,15,12,13,14,14,14,12,12,14,14,12,13,14,13,13,14,15,13,13,14,14,16,16,15,15,15,16,15,15,16,14,15,15,15,14,15,15,14,15,14,14,14,15,14,11,12,15,12,10,12,12,11,10,12,12,9,10,10,11,11,12,12,12,12,13,13,12,11,13,11,11,11,11,10,10,11,10,9,10,11,11,12,12,11,11,10,11,10,10,11,10,9,10,12,10,11,13,12,10,11,12,12,14,13,15,12,12,11,10,11,11,10,9,10,10,8,9,10,8,8,9,9,8,7,7,6,7,7,6,5,6,6,5,6,6,6,5,6,6,6,6,5,6,6,5,4,5,5,5,5,6,5,5,5,6,6,6,6,8,9,12,12,13,15,17,16,15,16,17,16,16,18,18,17,17,20,21,19,21,23,22,24,21,24,21,21,22,20,19,20,21,21,20,22,23,24,24,26,25,26,26,26,27,27,28,27,28,28,28,27,27,27,28,26,27,26,27,26,26,27,24,26,27,26,27,25,26,27,24,25,25,24,24,24,24,22,22,21,20,17,17,14,12,10,7,6,4,4,3,3,5,2,3,4,4,4,3,3,5,4,4,5,6,5,5,6,7,6,6,7,9,9,8,7,8,8,7,7,6,7,7,8,8,6,5,7,4,4,5,5,4,4,5,3,3,4,4,3,3,4,4,4,5,5,5,5,6,6,6,6,7,7,8,8,8,9,10,10,11,11,12,11,10,9,9,9,9,9,8,8,8,9,9,9,8,9,10,9,10,9,9,9,9,9,9,8,10,9,9,8,9,10,8,9,10,9,10,9,10,10,11,12,11,11,11,11,11,12,11,12,14,12,12,14,14,15,15,15,15,15,15,15,15,15,14,14,15,14,13,11,12,12,11,11,11,10,10,10,10,9,9,9,8,7,7,8,7,6,7,7,6,5,7,7,5,6,6,6,6,7,7,6,7,7,7,7,7,7,8,7,8,8,8,7,7,8,8,8,7,8,9,8,8,9,9,8,9,10,9,9,10,11,11,11,11,13,12,14,14,12,14,13,13,15,15,15,15,14,15,14,14,16,15,15,14,13,14,13,12,12,11,11,9,9,10,10,8,9,9,8,7,8,7,6,6,7,5,5,6,6,5,5,6,5,4,4,5,6,6,5,6,6,7,6,6,7,8,7,7,6,8,8,6,6,8,7,6,8,7,7,6,5,6,6,5,4,4,5,5,3,4,5,4,4,5,4,4,5,6,6,5,7,6,5,6,7,6,5,6,5,4,5,5,3,3,4,4,3,2,2,1,0,1,2,3,3,3,4,4,6,6,7,8,7,8,7,9,8,7,7,8,7,7,8,8,7,7,8,8,8,8,8,8,8,10,9,9,10,10,12,13,12,13,14,15,15,15,15,17,17,19,18,19,21,23,21,19,22,21,21,24,21,23,23,23,26,25,24,25,25,24,24,26,24,24,23,26,25,24,23,24,24,23,24,22,22,22,24,21,20,23,21],[30,29,29,29,29,29,29,29,28,28,27,27,28,27,28,27,28,27,28,28,27,27,28,27,27,28,28,28,28,28,26,28,28,29,28,29,28,28,29,29,29,28,28,28,28,28,27,26,26,26,25,25,25,24,23,22,22,21,19,20,18,16,14,13,12,12,12,11,11,11,11,12,12,12,12,14,13,15,14,15,14,15,14,14,16,16,16,17,17,17,17,17,18,20,17,17,19,18,19,19,20,18,19,19,20,21,19,20,20,19,19,19,19,21,20,20,19,19,18,19,20,18,19,18,20,19,18,20,19,18,17,19,17,17,17,17,18,19,18,18,19,19,18,19,19,19,19,19,18,18,18,18,18,17,17,18,17,17,18,16,17,16,15,17,17,16,17,17,16,16,17,17,16,18,17,17,17,17,17,17,17,17,18,16,17,16,16,17,16,17,16,16,15,17,17,16,17,18,16,17,17,17,17,17,17,16,17,17,17,17,17,18,16,19,16,16,18,17,17,15,16,17,16,16,16,16,14,14,16,16,13,15,13,15,13,15,15,15,15,15,17,15,16,16,16,15,14,16,14,15,14,14,13,15,15,14,15,15,15,14,14,14,13,14,15,14,12,15,15,13,14,15,15,13,14,14,15,16,15,16,15,15,14,14,14,14,13,14,14,13,12,13,14,11,12,14,13,11,13,11,10,9,11,10,9,9,10,8,8,9,9,8,8,9,9,8,7,6,7,6,6,6,8,7,9,8,6,8,8,8,8,9,10,10,12,13,13,14,15,17,17,16,15,17,17,16,17,18,17,16,20,21,20,20,23,23,23,21,23,21,19,21,19,19,20,21,21,19,21,23,22,22,26,25,26,25,26,26,27,27,27,27,27,27,27,27,27,27,26,27,26,27,26,25,26,25,26,26,25,27,25,26,27,24,26,25,24,25,23,24,22,21,21,18,17,16,15,14,9,8,6,5,6,5,4,3,3,3,5,5,6,6,4,6,5,5,5,6,7,6,6,6,6,8,10,10,10,8,9,8,9,8,7,7,8,7,10,11,6,7,8,7,6,6,6,6,5,5,5,5,5,4,4,5,5,6,7,8,8,7,9,9,8,8,9,9,9,9,10,10,9,14,12,14,14,15,14,13,13,12,13,13,13,13,13,12,13,13,12,13,14,14,12,12,13,13,12,12,12,13,11,12,12,11,10,12,13,11,11,13,12,10,12,12,12,13,13,13,13,14,13,14,15,15,15,15,15,16,16,16,16,16,17,16,17,18,16,17,16,15,16,16,15,16,15,15,15,14,14,14,13,13,14,13,12,13,12,12,11,11,11,10,11,10,10,9,10,10,10,9,10,10,9,9,9,11,10,9,10,11,10,9,10,9,10,10,11,11,10,8,9,10,10,8,10,10,9,10,10,11,10,12,12,12,12,12,14,13,14,14,15,15,16,16,16,16,17,17,17,18,16,17,16,17,15,16,17,18,16,16,15,15,15,14,14,14,13,13,12,13,12,12,12,12,11,11,10,10,10,11,9,8,10,10,8,8,10,9,7,6,7,6,5,7,7,6,7,8,7,7,8,9,8,7,7,8,9,7,7,9,9,7,9,9,10,9,8,9,10,8,6,8,7,7,5,6,6,5,5,6,5,4,5,6,6,6,7,7,6,6,8,7,8,7,6,6,7,6,5,5,6,6,5,4,3,3,1,0,1,2,3,4,4,4,5,5,7,7,6,8,7,9,8,7,9,8,7,8,9,8,8,8,9,9,9,10,10,11,11,12,13,12,12,13,14,15,14,14,16,15,16,16,16,17,19,19,21,19,22,24,21,20,22,22,21,24,22,23,24,22,25,25,25,25,26,25,25,26,24,24,25,25,24,22,24,25,24,23,24,22,23,24,25,22,22,24,23],[29,29,29,29,29,29,29,29,29,29,28,28,29,27,28,27,29,28,27,29,28,27,29,28,27,29,28,27,29,29,28,29,29,29,29,29,28,29,29,28,29,29,28,29,29,28,28,26,27,27,25,25,26,24,23,24,23,22,22,21,20,17,15,14,14,11,12,13,12,13,12,10,12,12,12,14,14,14,15,14,15,14,16,16,14,16,16,17,18,17,19,20,18,19,19,18,18,19,21,19,21,21,21,20,21,21,21,21,22,20,21,21,19,19,20,21,20,21,20,20,20,19,19,20,19,18,19,21,18,18,19,20,17,18,19,18,19,19,19,19,19,18,20,19,18,19,19,18,17,18,19,16,17,17,17,19,19,18,19,18,18,17,18,18,17,15,18,19,16,17,18,18,16,18,19,17,15,18,18,18,17,16,17,17,16,16,17,18,15,16,17,16,16,18,17,17,18,17,16,18,17,17,17,18,19,17,18,17,17,17,18,18,16,18,18,15,17,18,16,15,15,17,15,14,15,15,14,14,15,16,14,14,15,14,16,16,16,16,16,17,16,16,16,16,15,15,16,15,14,15,16,13,13,16,15,14,15,15,15,15,13,14,14,13,15,13,14,15,15,14,15,16,15,15,16,16,16,16,15,16,16,14,14,15,15,14,14,14,14,13,13,13,13,13,12,13,12,12,12,12,9,10,10,10,10,10,10,9,9,10,10,9,10,10,9,9,8,9,8,8,7,9,8,9,8,9,9,9,9,9,10,10,9,11,12,13,13,14,15,16,17,17,17,19,20,16,18,20,20,18,21,22,22,22,23,23,24,22,25,23,21,22,20,20,22,22,22,21,22,23,24,25,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,26,27,27,27,26,26,26,26,27,27,26,27,26,25,27,25,26,26,25,25,25,24,24,23,22,21,19,17,16,15,12,11,10,8,8,7,6,5,5,4,6,7,6,5,5,7,7,6,6,8,8,7,9,9,8,9,11,12,12,9,11,9,9,10,8,8,9,7,11,11,8,8,9,7,6,7,6,5,5,6,5,5,6,6,6,6,5,7,7,9,8,7,9,9,9,9,9,9,10,10,11,11,11,12,12,13,13,14,14,13,13,12,14,13,13,13,13,12,13,14,13,12,14,14,14,13,14,12,12,12,12,11,12,12,12,12,12,12,12,12,12,13,12,12,12,12,13,13,13,15,14,15,14,14,14,15,15,16,15,16,17,17,18,19,17,17,17,17,17,17,17,16,17,18,16,16,16,15,16,14,15,15,14,14,13,13,13,13,12,12,10,11,11,10,9,11,10,9,9,11,10,8,9,10,11,10,10,10,10,9,10,9,9,9,10,9,10,11,11,9,9,8,9,10,9,9,9,12,9,9,11,10,11,12,11,12,13,13,14,15,14,14,17,17,18,17,16,17,16,18,18,19,18,19,18,18,17,18,16,17,17,18,15,15,16,15,15,14,14,13,13,14,13,12,13,12,11,12,12,9,9,9,8,7,8,7,8,7,7,8,6,6,6,6,7,7,8,7,7,8,6,6,8,9,7,7,6,7,7,6,6,8,7,7,9,9,9,9,9,8,7,8,7,6,6,6,5,5,5,5,5,5,4,4,5,5,5,5,5,5,4,5,6,5,6,6,5,6,6,6,5,7,6,5,6,6,5,5,2,1,0,1,2,3,3,4,5,5,6,7,7,8,7,9,9,8,9,10,10,8,9,9,8,9,10,10,10,11,10,12,12,13,13,12,13,14,14,14,14,14,15,16,16,16,18,17,19,20,20,20,23,23,22,21,23,23,22,25,23,25,25,23,27,26,25,27,27,26,26,28,26,25,26,26,25,23,24,27,26,24,26,23,23,25,26,23,22,25,23],[29,28,28,28,28,28,29,28,28,28,27,26,28,26,27,26,28,27,27,27,26,26,27,26,26,27,27,26,27,28,26,28,28,28,27,28,27,28,28,27,28,28,27,27,27,27,27,25,25,25,24,24,24,23,23,22,21,21,20,19,17,16,14,12,12,11,11,10,11,10,11,9,11,11,12,13,13,13,13,13,15,14,14,14,14,14,15,15,14,16,16,15,16,17,17,17,17,17,19,18,20,18,19,19,19,18,20,20,19,19,20,19,17,19,18,19,18,19,18,18,18,18,18,18,18,19,16,19,18,18,17,19,17,16,17,16,18,17,16,17,18,18,18,18,18,18,18,18,16,16,17,17,16,16,15,18,17,17,18,16,17,16,15,15,16,16,15,16,16,17,16,16,15,17,16,17,15,16,16,15,15,16,14,15,15,15,15,15,15,16,15,15,15,16,16,17,16,17,16,17,16,17,17,17,17,17,17,16,16,16,16,17,15,16,16,15,17,16,16,15,14,16,15,14,15,15,14,14,14,14,13,14,13,14,14,14,15,14,15,14,16,15,15,15,16,15,14,15,13,15,14,13,14,15,14,13,14,14,14,14,13,13,13,13,13,13,12,13,14,13,13,14,14,14,14,15,14,14,15,14,14,13,13,13,13,13,13,13,13,12,12,11,12,11,12,12,12,11,12,12,9,10,10,10,8,9,9,7,8,9,9,7,8,9,7,7,7,7,8,7,6,8,8,6,8,9,8,7,9,8,8,9,8,8,11,11,10,12,14,14,16,14,14,16,16,15,16,17,18,16,19,21,20,20,22,23,24,22,24,21,21,21,20,19,19,21,21,20,20,23,21,22,25,23,25,25,26,25,26,27,26,27,27,27,26,27,27,26,25,27,25,26,27,25,26,23,26,26,24,26,24,25,27,23,25,25,23,23,23,23,22,21,20,18,17,15,14,13,11,9,8,7,7,5,6,5,5,4,5,5,5,4,5,6,5,5,6,6,6,6,8,8,7,8,9,9,10,9,9,8,8,8,6,7,9,7,12,11,7,8,9,8,6,7,7,5,6,6,6,4,5,6,5,5,5,6,6,7,6,6,7,8,7,8,9,9,9,9,9,10,11,11,12,13,12,13,13,13,12,12,12,12,12,11,12,10,12,12,12,11,12,13,12,11,12,11,11,11,11,11,11,11,11,11,10,11,12,11,10,11,11,10,10,11,11,13,12,13,13,14,13,13,13,13,14,14,15,14,16,15,16,16,16,15,15,16,16,15,15,15,15,16,15,14,15,15,14,13,13,13,12,12,13,13,11,11,11,11,10,10,10,10,9,10,10,8,8,10,10,7,8,8,9,8,9,10,9,8,10,10,9,9,10,9,9,11,10,9,9,8,8,9,8,7,9,10,8,8,10,9,8,10,10,11,11,12,12,13,13,13,14,15,15,15,16,15,15,15,16,16,15,16,15,16,15,15,16,15,16,16,14,14,15,15,14,13,13,12,12,12,11,11,11,10,10,10,10,9,8,9,9,7,7,8,7,6,7,7,6,5,5,6,6,7,7,6,6,7,7,6,7,8,7,7,6,6,6,6,5,7,6,6,8,8,9,8,7,7,7,6,6,6,6,4,4,4,4,3,4,4,3,3,5,5,5,4,6,5,4,5,6,5,6,5,5,4,5,6,4,5,6,5,5,4,4,3,3,2,1,0,1,3,3,4,4,5,7,7,7,9,8,8,9,8,9,9,9,8,9,9,8,8,9,10,9,10,10,10,11,12,12,11,11,13,13,13,15,14,16,15,17,16,16,17,18,20,20,19,22,22,22,21,22,22,22,25,23,25,25,22,26,24,25,25,25,25,26,26,25,25,24,25,23,23,23,25,25,22,24,22,21,23,24,21,22,24,22],[29,29,29,29,29,29,29,29,29,28,29,28,29,27,28,27,28,28,27,28,27,27,28,28,27,27,29,27,28,28,27,29,29,29,28,29,29,29,29,29,29,28,28,29,28,28,27,26,26,25,25,24,24,24,22,23,21,20,20,19,17,14,11,9,8,7,7,7,6,7,6,6,7,7,8,9,9,11,12,11,9,12,12,10,11,13,13,13,14,13,14,15,14,14,16,16,15,15,18,17,17,17,17,17,18,18,18,18,18,17,18,17,17,17,16,17,17,18,16,17,19,15,16,18,17,16,16,17,16,16,16,17,14,15,16,16,16,17,17,17,16,16,17,18,15,16,17,16,14,15,16,13,13,14,16,14,16,15,14,15,14,14,15,15,14,13,15,17,14,14,15,16,14,14,16,14,13,14,15,15,15,13,13,15,14,14,14,15,13,14,15,13,13,15,15,16,17,15,14,16,15,15,15,16,15,15,15,14,14,13,16,15,13,16,15,13,14,15,13,13,12,14,13,11,12,13,11,10,12,13,10,10,11,12,12,14,13,14,13,14,14,13,15,15,13,13,15,12,11,13,12,11,10,13,13,12,13,14,13,12,11,12,10,11,12,11,10,11,12,11,11,12,11,11,11,13,14,13,12,12,12,13,11,11,10,11,10,10,11,10,9,8,10,10,9,10,10,9,8,8,6,7,8,7,7,7,8,7,7,7,7,7,7,8,7,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,6,7,7,8,10,9,12,14,13,12,12,14,14,14,14,15,15,16,16,19,19,19,20,21,22,20,21,20,20,20,18,18,21,19,21,20,21,22,23,24,26,23,25,24,26,26,27,27,26,27,27,27,27,27,27,26,26,27,25,27,26,26,25,24,25,25,25,26,24,24,26,23,24,24,23,23,23,21,22,20,20,17,17,14,14,13,9,7,6,4,5,4,4,3,3,4,4,5,4,4,5,5,4,4,5,6,5,5,7,6,6,7,7,8,7,8,8,8,8,7,6,7,8,7,7,8,7,7,7,6,5,6,6,4,5,6,5,4,5,6,4,5,5,5,5,6,7,6,6,6,6,6,7,7,7,8,8,8,8,10,11,12,11,11,12,12,9,11,9,10,12,10,10,10,9,11,9,9,10,11,9,9,11,9,9,8,9,8,9,8,9,8,7,7,8,8,7,9,8,8,8,7,8,9,11,10,11,11,11,11,12,11,12,13,11,13,13,15,14,14,14,14,15,15,14,14,13,13,14,13,13,12,12,11,12,9,10,10,8,8,9,9,8,7,8,8,7,7,8,7,6,7,8,7,6,6,7,7,6,7,7,7,7,7,7,6,7,7,8,6,7,6,6,6,7,6,6,5,5,6,6,7,5,6,5,5,6,6,5,6,7,7,7,7,8,8,10,10,13,12,14,14,13,13,14,14,14,14,14,14,14,14,14,13,14,14,13,14,13,13,12,12,11,10,10,9,8,8,8,7,8,8,6,6,7,5,5,5,5,6,6,6,6,4,5,5,4,3,3,4,4,5,5,4,5,5,6,4,5,5,4,5,4,4,5,5,4,5,5,5,4,4,5,4,5,5,5,4,4,5,4,3,3,4,3,2,3,3,2,2,3,3,3,3,4,3,2,3,4,3,3,3,3,2,3,3,2,2,3,3,2,3,2,2,3,2,1,1,0,1,2,2,3,4,5,5,5,6,6,8,6,5,7,7,6,6,7,7,8,7,8,7,8,8,8,7,8,10,9,8,9,11,13,14,13,14,12,16,14,13,16,17,16,18,20,20,22,22,21,20,23,21,21,24,21,23,26,22,25,24,25,24,24,25,27,25,25,25,25,25,24,22,23,26,25,21,24,22,22,25,24,21,22,24,22],[28,29,28,28,29,29,28,28,28,28,27,26,28,27,27,26,28,27,26,27,26,26,27,27,26,27,27,27,28,28,27,28,29,29,28,29,28,28,29,28,29,28,28,29,29,28,27,27,26,26,25,25,23,22,23,22,21,21,20,18,16,15,11,10,8,8,8,8,8,8,8,7,8,7,8,9,10,11,12,10,10,11,12,10,11,12,12,13,13,13,13,14,14,14,15,16,14,14,17,17,15,17,18,18,16,18,18,18,18,17,18,18,17,15,16,17,16,18,16,17,17,14,15,17,17,17,15,18,17,15,16,16,15,14,16,15,17,16,17,17,14,16,16,17,15,14,16,16,13,15,16,13,13,13,14,14,15,15,14,15,14,14,14,14,14,12,13,13,13,12,14,14,13,13,16,14,12,14,15,14,14,12,13,15,14,13,14,15,13,13,15,13,13,14,14,14,16,15,15,14,15,14,14,15,14,14,14,14,14,14,15,15,12,14,14,14,12,14,14,12,11,14,13,11,12,12,11,10,11,12,10,10,12,12,13,13,13,13,14,15,13,13,14,14,12,12,13,13,10,12,12,11,10,11,12,12,13,13,12,11,11,12,10,10,12,10,9,10,12,9,10,12,12,10,11,12,12,13,12,13,12,11,11,9,10,11,8,9,10,9,7,8,10,8,7,10,9,8,8,8,7,7,8,8,7,7,8,6,7,8,7,6,7,8,7,7,6,7,7,7,6,6,7,6,7,7,7,6,7,7,8,7,8,8,10,10,10,13,12,13,15,11,13,15,14,13,15,17,16,15,17,19,17,19,21,21,23,20,22,22,21,22,19,18,20,21,20,19,21,23,22,22,25,23,25,25,26,26,27,27,27,27,27,27,27,28,27,27,26,26,26,26,26,24,26,25,25,26,24,26,24,25,26,24,24,25,23,23,23,23,21,22,20,18,17,16,14,13,10,7,6,4,5,4,5,4,4,4,4,5,5,5,5,5,5,6,6,6,7,6,8,8,7,8,9,10,9,9,9,9,8,8,7,7,8,8,8,9,8,8,8,7,6,7,6,6,6,6,6,5,6,6,5,5,5,6,5,7,6,5,6,7,6,6,7,7,8,8,9,8,9,10,10,11,11,10,12,11,9,11,10,11,10,9,10,8,9,10,9,9,9,10,8,9,9,9,8,8,9,8,8,9,9,8,7,8,9,7,9,10,8,8,8,9,9,10,11,11,11,12,11,11,11,11,12,13,11,12,13,13,15,15,14,13,14,14,15,13,13,12,13,12,13,12,12,12,12,9,9,10,9,8,9,9,8,7,9,8,7,8,7,7,6,7,7,6,6,7,7,6,6,7,7,7,7,7,6,6,7,7,6,6,7,6,7,7,8,6,7,7,7,7,6,6,7,7,7,7,8,7,7,7,8,8,7,8,9,10,9,10,13,11,13,13,12,13,12,14,14,14,14,14,14,14,13,14,13,14,14,15,12,12,13,13,12,11,11,9,9,9,8,8,8,8,7,7,7,6,6,6,5,5,5,5,6,5,5,5,5,4,4,5,5,5,6,4,5,6,5,5,6,6,6,6,6,7,6,5,5,5,7,5,6,6,6,6,7,6,5,5,4,6,5,3,3,4,3,2,3,4,2,3,4,4,3,3,4,4,3,3,4,4,3,4,4,3,3,4,3,3,4,4,3,3,3,4,3,3,2,1,1,0,1,2,3,4,4,6,5,6,6,7,7,7,7,7,6,5,7,7,6,6,8,7,7,8,8,8,8,9,9,9,9,10,11,12,12,13,13,15,15,14,15,17,16,18,18,19,21,20,21,19,21,21,20,23,20,23,24,22,25,25,24,23,24,23,25,26,24,24,23,25,24,23,22,24,24,21,24,21,22,22,24,21,20,23,22],[29,29,28,28,28,28,29,28,28,28,27,27,27,26,27,25,27,26,26,27,25,25,27,26,25,27,27,26,28,27,26,28,28,28,27,28,27,28,28,28,28,28,28,28,28,27,27,26,26,27,26,25,25,24,23,23,21,22,20,18,17,14,12,12,11,10,9,9,9,10,9,10,10,11,11,11,11,13,13,12,12,14,13,12,14,15,15,15,16,17,17,17,18,18,17,18,17,18,19,19,20,20,20,18,19,20,20,19,20,20,19,19,18,20,20,19,19,19,19,19,19,18,19,19,18,20,17,19,19,18,17,19,18,19,16,18,18,19,19,18,19,18,18,19,19,18,19,18,17,18,18,17,17,17,17,18,17,17,17,17,16,16,17,16,17,14,16,18,16,16,16,16,17,16,17,17,16,17,16,16,18,17,16,16,17,17,16,17,16,16,15,17,16,16,16,16,17,17,15,16,16,17,15,17,17,16,15,16,16,17,17,16,15,18,17,16,17,17,17,15,15,17,16,13,15,15,14,13,14,14,12,13,13,14,14,15,15,15,16,16,16,15,15,16,14,15,15,14,12,15,15,14,13,14,14,15,15,14,14,13,14,14,13,14,14,13,11,13,14,13,14,13,14,13,13,14,14,15,15,15,15,15,13,12,13,14,12,12,13,12,11,11,13,12,11,12,12,11,11,11,9,9,10,11,9,9,10,10,9,9,10,10,10,10,11,10,9,9,8,8,8,8,8,8,9,8,8,8,8,7,8,8,9,8,10,11,11,12,13,16,16,14,13,16,16,13,15,17,16,15,18,20,17,19,22,21,23,20,23,21,20,21,20,17,19,20,21,18,21,23,20,22,24,24,26,25,25,26,27,27,27,27,27,27,26,27,26,26,25,26,26,27,26,25,26,23,26,26,25,26,25,26,27,23,24,25,24,23,24,23,22,21,20,18,17,16,14,13,11,8,7,5,6,6,6,5,6,6,7,8,7,7,7,8,6,7,8,8,8,8,10,9,8,9,11,10,11,11,11,11,10,10,10,10,10,10,11,11,8,9,10,8,8,9,8,7,7,8,6,7,7,7,6,7,7,9,9,10,9,9,9,10,10,9,10,12,11,12,11,13,13,13,13,13,13,13,13,13,13,12,13,12,14,12,12,11,12,13,11,11,12,13,12,12,12,12,11,11,11,10,10,11,11,11,10,10,11,11,11,11,11,11,11,11,11,12,13,12,12,13,13,13,13,15,13,15,14,14,16,16,17,16,16,16,16,16,16,16,16,15,16,15,15,14,15,15,14,12,13,13,12,12,12,12,10,11,10,11,10,10,10,10,9,10,10,9,9,10,10,9,10,9,11,10,11,10,10,9,10,10,9,8,10,9,8,10,10,10,10,8,9,9,9,8,9,9,8,9,9,10,9,9,11,11,10,11,11,11,13,12,14,14,15,16,14,15,16,16,16,17,16,16,16,17,16,16,16,15,16,16,15,15,14,14,12,12,12,11,11,11,11,10,11,10,9,9,10,8,8,8,9,7,8,9,7,6,8,8,6,5,6,6,7,6,6,6,7,7,7,7,8,9,8,7,7,9,8,7,7,7,8,6,7,9,7,8,6,7,7,6,5,6,6,4,5,5,4,3,3,5,4,3,4,5,4,5,6,7,5,6,6,6,5,6,5,4,4,5,5,4,4,5,4,4,4,5,4,4,4,3,3,1,0,1,2,3,5,5,6,6,7,9,7,6,8,8,8,9,9,9,9,10,10,9,11,11,11,12,11,12,11,11,12,12,13,13,13,14,14,15,16,15,17,18,18,20,19,19,21,22,22,20,22,21,20,25,22,24,24,22,26,24,25,25,25,24,26,27,24,25,26,25,23,22,24,24,24,21,23,22,22,23,24,21,21,23,22],[29,28,28,28,28,28,29,28,28,28,27,27,27,26,27,26,27,26,26,27,26,26,27,27,26,27,27,26,27,28,26,28,28,28,28,29,27,28,28,28,29,28,28,28,28,28,27,26,26,26,24,25,24,24,23,22,22,21,20,19,19,16,15,14,15,12,14,14,13,14,14,15,14,15,14,16,16,16,18,17,16,17,18,16,16,19,18,20,19,19,20,20,21,21,20,20,20,21,21,22,21,22,22,22,22,22,22,22,23,21,22,21,21,22,22,22,22,21,22,22,22,21,21,21,22,22,21,22,22,20,21,21,19,19,20,20,21,20,20,20,22,20,21,22,21,21,22,21,19,21,21,20,20,20,20,21,21,20,21,19,19,19,21,20,20,18,20,20,20,20,19,20,19,20,20,20,18,19,20,20,20,18,20,20,20,18,18,19,18,18,18,19,17,19,18,19,20,20,18,19,19,19,19,18,18,18,19,19,18,19,20,20,18,20,20,18,19,20,19,17,18,20,18,17,18,19,17,16,18,17,15,17,17,17,18,18,18,18,18,19,19,18,19,19,17,19,19,18,15,18,18,16,16,17,16,16,17,17,16,16,16,17,15,16,17,16,15,17,16,15,16,16,16,15,17,17,18,18,16,18,17,17,15,16,16,16,14,15,17,15,13,15,16,15,14,16,16,15,15,14,16,14,14,15,15,14,13,15,14,14,15,15,14,14,13,13,13,12,12,13,11,13,11,11,13,11,13,11,10,11,12,11,12,10,12,12,12,13,15,15,16,15,15,17,16,15,15,17,16,16,19,20,20,20,22,22,23,21,23,21,20,20,19,18,19,19,21,18,19,21,21,21,24,23,24,25,25,26,27,27,27,27,27,27,27,27,27,27,26,27,26,27,27,26,27,26,26,27,25,27,26,25,27,25,26,26,25,25,25,24,24,23,22,19,18,17,15,15,12,10,10,8,9,9,9,9,8,9,10,9,9,9,8,10,8,8,9,10,9,10,11,11,9,11,12,11,12,11,14,12,11,13,12,13,13,12,13,13,9,10,12,9,8,12,10,9,9,11,8,9,10,10,9,10,10,10,11,13,11,11,13,14,11,12,13,14,12,14,15,14,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,15,16,17,15,16,16,17,14,15,16,14,14,14,13,14,14,13,13,13,14,12,14,15,13,15,14,14,14,14,14,14,14,14,15,15,16,16,16,15,17,18,16,18,18,18,19,19,19,19,19,19,20,20,18,18,19,19,19,17,18,17,16,16,16,16,14,15,16,14,14,13,14,13,14,13,12,14,15,13,12,11,14,13,14,12,14,12,14,13,12,13,12,11,13,13,11,10,12,11,12,11,12,10,11,8,11,12,12,11,10,14,12,12,12,13,14,14,14,15,14,14,15,15,16,16,19,18,20,20,19,19,20,20,20,21,20,20,19,20,18,19,19,18,19,19,18,17,17,18,16,16,15,15,14,15,14,14,13,13,13,14,12,13,13,12,11,10,11,10,9,10,9,8,8,8,8,7,7,8,9,7,6,8,8,6,7,10,9,9,9,10,9,10,8,11,11,8,11,13,12,12,12,12,11,10,10,10,12,7,8,7,6,6,6,6,4,3,4,6,4,4,8,7,4,7,9,8,6,8,6,5,6,8,7,5,7,9,7,9,6,7,7,6,5,4,5,2,2,0,1,3,4,5,5,6,7,7,8,8,8,8,9,8,10,9,9,10,13,11,12,14,15,16,14,15,16,15,15,16,16,16,16,15,17,16,16,17,18,18,18,20,20,20,22,22,22,20,21,23,22,25,22,25,25,22,26,25,25,24,26,25,26,27,25,24,25,26,23,21,22,26,25,22,25,22,22,24,24,21,21,24,22],[30,29,29,29,29,29,29,28,28,28,28,28,28,27,27,27,28,26,26,27,26,27,27,27,27,28,28,28,29,28,27,29,29,30,29,29,29,29,29,29,30,29,29,29,29,29,29,27,28,27,27,26,26,26,24,24,24,22,21,20,19,18,15,15,15,13,13,13,12,12,12,13,13,14,14,14,15,15,16,15,15,16,16,16,16,17,16,17,17,18,18,19,20,20,20,20,20,20,20,21,21,21,22,21,22,22,22,22,22,21,21,22,22,22,22,21,21,22,21,21,22,21,20,21,21,22,19,21,21,20,20,21,19,18,19,19,20,19,20,20,20,20,20,21,20,21,20,21,19,20,20,19,19,18,18,20,19,18,20,18,19,18,19,18,19,18,17,20,18,19,19,20,18,20,19,19,18,19,19,18,19,18,18,18,20,18,17,18,17,17,17,18,16,17,18,17,18,19,16,17,17,16,16,18,17,17,16,17,17,17,19,18,15,19,18,17,19,19,19,17,17,19,18,16,17,18,17,15,17,16,15,16,15,16,16,16,17,17,17,17,19,18,18,18,17,19,17,18,15,17,16,16,15,15,16,16,16,16,15,16,16,15,15,15,15,15,13,15,17,14,13,15,15,13,14,15,15,15,14,15,16,16,15,14,15,15,13,14,15,14,12,14,16,14,13,16,15,14,14,13,12,12,14,13,12,12,13,13,12,12,14,12,12,12,12,12,11,10,10,11,10,11,11,10,11,11,10,10,10,10,10,12,10,11,13,13,12,12,14,16,16,16,14,17,18,15,15,18,18,17,18,22,21,21,24,24,26,23,25,22,22,23,21,20,20,22,21,21,21,23,21,23,25,25,26,26,26,27,27,28,27,28,28,28,27,28,28,27,27,28,26,27,27,26,27,26,27,28,27,28,26,27,28,26,26,26,26,25,26,25,24,23,23,21,21,18,16,15,13,11,9,8,8,9,8,7,9,7,8,9,8,8,8,9,9,8,9,8,9,8,11,9,9,11,12,12,12,12,12,12,13,11,10,11,12,10,12,12,10,10,11,9,9,10,9,8,9,9,9,8,8,8,10,10,11,9,11,11,11,9,11,12,11,10,12,13,12,12,13,13,13,13,13,14,14,14,15,14,14,14,14,14,16,15,16,14,14,16,14,14,15,15,14,13,14,14,12,12,13,13,11,13,12,11,11,11,13,11,11,12,12,11,12,11,12,14,13,14,14,14,16,14,15,15,15,15,14,15,16,17,18,18,18,17,18,17,17,16,17,16,17,17,16,15,16,15,15,15,14,14,13,13,14,14,11,12,13,12,12,11,12,12,11,11,11,10,11,11,12,11,12,11,12,12,11,12,11,11,11,12,10,10,11,11,11,10,11,10,11,10,10,11,10,10,10,11,10,11,12,13,10,13,14,13,13,14,14,14,15,15,16,17,18,18,17,18,18,18,19,19,18,17,18,18,17,18,17,18,17,18,16,16,16,16,14,14,14,14,15,14,14,13,14,13,11,11,11,10,10,10,10,9,9,11,9,9,10,10,8,7,6,6,7,6,8,7,7,8,7,7,8,9,9,8,10,9,8,8,8,9,9,8,10,10,10,10,9,10,10,9,9,10,8,8,9,8,7,6,6,6,4,3,3,5,4,4,10,8,4,7,9,8,7,8,8,7,8,8,7,6,7,7,7,7,5,6,6,6,5,3,5,3,2,1,0,1,4,4,5,6,7,7,6,7,8,9,9,8,10,11,10,9,10,12,11,11,12,12,12,13,13,13,14,13,15,14,15,15,16,17,17,17,18,20,18,21,21,21,23,25,24,21,23,24,24,26,24,25,26,23,27,26,27,27,27,26,27,28,26,27,27,26,25,24,25,26,24,23,24,24,22,25,25,23,23,24,24],[29,29,29,29,29,29,29,28,28,28,27,27,28,26,27,26,27,25,27,27,27,27,27,28,27,27,28,27,27,28,27,28,28,29,28,29,27,28,28,28,28,28,27,28,27,27,27,26,25,26,25,24,24,23,22,22,22,22,19,20,18,16,15,13,14,11,13,11,11,13,12,13,12,13,12,15,14,14,14,14,14,14,14,13,14,15,14,15,15,16,16,16,16,18,16,16,17,17,17,18,19,18,18,18,19,18,18,18,19,18,19,19,19,20,20,20,19,19,18,19,18,18,18,18,18,18,16,18,17,16,16,17,15,15,16,16,17,17,17,16,18,16,17,17,16,18,17,17,16,17,17,16,17,16,16,18,17,16,17,16,17,17,17,16,16,16,15,17,16,16,16,16,15,17,16,16,15,15,16,15,15,16,15,14,15,14,14,16,14,14,14,14,14,16,14,15,15,15,14,15,14,14,14,15,15,14,14,14,13,14,15,15,14,15,15,14,17,16,15,13,14,16,14,14,15,14,14,14,14,14,14,15,15,14,14,15,16,15,16,15,16,16,15,15,17,15,14,15,14,15,14,13,13,14,15,12,13,13,13,13,13,13,12,13,13,13,11,13,13,11,11,13,13,12,12,13,14,13,13,12,14,13,11,14,13,12,11,12,13,12,12,13,13,12,12,13,13,12,13,12,13,12,12,13,14,11,11,12,12,12,12,12,12,12,11,12,11,12,11,12,10,12,11,10,12,10,11,11,10,10,11,11,11,10,11,13,11,13,13,15,15,14,15,16,16,15,16,18,17,16,19,21,19,20,22,23,24,22,24,22,20,22,19,19,21,19,20,19,21,21,23,22,25,25,25,25,26,26,27,27,27,28,28,28,28,28,28,28,26,27,27,28,27,26,27,25,26,27,26,26,26,26,28,26,26,26,25,24,24,23,24,22,21,20,19,16,15,13,12,10,9,8,9,8,9,8,8,7,8,8,7,7,7,8,8,8,8,9,8,9,10,9,9,11,11,10,11,10,11,10,10,11,11,11,11,10,12,12,10,10,10,9,8,10,9,8,9,10,9,7,9,10,9,8,10,9,10,11,9,9,10,12,9,10,11,12,9,12,12,11,11,13,13,14,13,14,13,13,13,14,14,14,14,13,13,12,14,13,12,12,14,13,11,11,12,10,10,10,10,11,10,11,10,10,10,11,11,11,10,11,10,10,11,11,10,12,11,12,12,12,12,12,12,11,13,13,13,14,15,15,15,14,16,14,14,14,15,14,14,13,15,14,14,14,14,14,12,13,13,13,12,12,12,12,12,12,11,11,11,10,11,10,12,11,11,9,11,10,10,10,11,10,11,10,9,11,9,9,9,9,8,8,9,8,7,8,8,7,8,8,8,8,9,8,9,10,9,9,10,10,10,11,11,11,12,12,12,12,14,12,15,14,15,15,17,16,17,16,17,17,16,16,15,18,14,14,16,14,15,15,14,14,16,14,13,13,12,12,12,13,12,12,12,11,11,12,11,10,12,10,9,9,9,9,8,6,7,7,6,6,6,6,5,5,7,6,5,6,6,6,5,6,6,5,7,8,7,7,7,8,9,8,9,9,11,9,9,9,9,8,8,7,8,8,6,5,5,6,5,5,4,3,2,4,4,4,6,6,4,5,7,5,6,6,6,5,6,7,6,6,7,7,7,8,6,8,7,7,5,4,4,4,3,2,1,0,1,3,6,4,5,6,5,6,7,7,7,6,7,8,8,7,8,9,9,10,10,11,10,12,14,12,12,14,14,14,14,14,16,15,16,18,18,19,18,20,21,20,23,23,22,22,23,22,22,26,24,24,25,23,26,24,25,26,26,24,26,27,25,25,25,26,24,22,25,25,24,22,24,24,22,24,24,21,23,25,23],[29,29,28,28,29,28,29,28,27,27,26,26,27,25,26,25,27,25,26,27,25,25,27,27,26,27,27,26,28,28,26,28,29,29,28,29,27,29,29,29,29,28,28,29,28,28,28,26,27,26,26,24,25,23,24,23,22,22,20,19,18,16,15,14,14,12,13,13,12,12,12,12,12,11,13,12,14,14,14,13,13,14,13,13,14,15,15,14,14,15,15,16,17,17,17,16,18,17,18,18,18,18,18,18,19,19,19,19,20,19,19,18,20,20,19,19,19,19,20,19,19,18,19,18,19,19,17,19,18,17,17,18,17,17,16,17,17,17,17,16,18,17,16,18,16,18,17,17,16,17,17,16,17,16,16,17,16,16,17,16,17,16,17,17,17,16,16,17,15,18,17,17,16,18,17,17,17,16,17,16,16,16,15,16,17,15,15,16,14,15,15,14,14,15,15,16,15,15,15,15,14,15,15,15,15,16,15,15,15,15,15,15,13,16,15,14,16,16,16,14,15,16,17,14,15,16,14,14,15,15,13,14,13,15,15,15,16,16,16,16,17,16,16,16,17,17,15,15,13,15,15,14,13,13,14,14,14,14,13,14,14,14,14,14,16,14,12,14,15,13,13,14,13,13,14,15,14,13,13,13,13,14,13,13,14,13,12,13,13,13,13,12,14,13,14,14,14,13,13,14,12,12,13,13,11,12,12,13,11,12,13,13,12,12,12,11,11,11,11,11,10,10,10,11,11,11,11,11,10,10,11,12,10,12,12,13,11,12,14,16,15,15,13,15,17,16,15,19,17,18,19,22,21,22,23,23,24,22,25,21,23,23,20,21,21,21,20,20,22,24,22,24,24,24,25,26,25,26,26,27,27,27,27,28,27,28,28,28,27,27,27,28,28,28,27,26,27,27,27,28,27,28,28,27,26,26,26,25,25,25,24,23,22,20,20,17,16,14,12,11,10,9,10,9,8,8,9,9,9,9,8,7,9,9,7,8,10,9,8,9,12,10,10,11,13,12,11,11,12,12,11,10,10,11,11,11,12,11,11,11,12,10,10,10,10,10,9,10,10,9,9,9,9,10,10,10,9,12,10,9,10,12,10,9,11,12,11,11,12,12,12,13,12,13,12,13,13,13,13,12,13,13,14,13,14,13,13,14,13,13,14,14,12,13,13,12,12,11,11,12,11,11,11,11,11,11,13,11,10,11,11,10,12,11,11,13,11,13,13,14,15,14,14,13,15,14,13,14,15,15,15,16,17,15,16,16,17,15,15,15,16,15,14,16,15,14,14,14,13,14,13,13,14,13,12,12,11,12,11,11,12,11,10,11,11,10,10,11,11,11,10,11,11,12,10,11,10,10,11,12,9,9,11,9,9,8,11,9,10,8,8,9,9,8,9,11,9,8,11,11,11,11,13,12,12,14,13,13,14,13,14,15,15,15,15,15,17,16,17,17,15,17,16,16,15,16,16,15,16,17,15,15,16,14,14,12,13,12,13,13,13,12,12,12,12,12,11,10,11,11,10,9,9,11,8,7,10,8,6,6,5,5,5,5,7,5,4,5,7,5,5,7,6,7,6,8,9,7,7,8,9,8,9,10,10,10,10,11,10,9,9,9,7,6,7,7,5,5,5,5,4,3,3,5,3,3,6,6,4,6,7,7,8,7,8,6,8,7,7,7,8,8,8,8,6,8,8,7,6,5,5,4,4,5,3,1,0,1,3,3,4,5,5,6,7,8,7,7,8,8,8,9,9,10,10,11,11,11,11,12,12,13,13,13,14,13,14,14,15,15,15,16,16,18,17,19,20,21,23,23,22,22,23,22,22,25,24,24,25,23,26,25,26,25,26,24,27,26,24,27,25,24,25,23,23,25,23,23,24,24,21,25,25,22,23,24,23],[29,29,28,28,28,28,28,27,26,27,25,25,26,23,26,24,26,24,26,26,25,26,27,25,26,27,27,26,28,27,27,28,28,28,28,29,26,28,28,28,28,28,28,28,28,27,27,24,25,26,26,23,24,24,23,22,22,21,19,20,18,17,15,14,14,12,13,14,12,15,13,14,13,14,15,16,15,16,16,17,15,17,17,15,17,17,16,17,17,18,18,18,18,20,19,18,20,19,19,21,21,20,20,20,21,20,21,21,21,20,22,21,20,22,21,21,21,22,21,21,20,20,19,20,20,21,18,20,20,19,19,19,19,17,18,18,20,18,18,17,18,18,18,20,19,19,19,19,18,19,19,19,20,19,19,21,19,18,20,19,20,19,19,18,18,19,18,20,19,18,18,20,19,19,19,18,18,18,19,18,18,19,16,17,19,17,15,17,16,15,15,16,16,17,15,16,17,16,15,16,16,16,16,17,15,17,15,15,15,16,17,17,15,17,17,16,18,18,18,16,16,18,19,17,17,18,16,16,17,17,16,17,15,17,16,18,18,17,17,16,19,18,17,19,19,17,16,18,16,17,15,15,15,14,15,14,15,14,13,14,15,15,14,13,15,14,12,14,16,14,11,13,14,13,13,15,16,14,15,15,16,15,14,15,14,15,14,15,15,14,15,14,14,13,14,16,14,14,14,14,13,13,14,14,14,13,14,13,13,13,14,13,13,13,13,14,13,14,12,13,12,12,12,12,12,12,14,12,11,11,12,11,12,10,12,12,11,14,14,15,16,16,14,15,17,16,14,18,18,16,17,21,21,20,20,22,24,21,25,21,21,21,20,18,20,21,21,19,21,22,23,24,23,23,24,26,25,27,26,27,27,28,27,27,28,28,28,27,26,27,26,28,27,27,27,25,27,27,26,27,26,26,28,25,26,27,24,25,25,23,24,22,22,21,19,18,17,15,13,12,12,10,11,12,11,11,12,11,11,12,10,10,10,10,10,10,12,10,10,12,13,11,11,12,13,12,12,14,13,13,14,13,11,14,13,12,14,13,10,12,12,11,11,13,11,10,10,12,12,11,12,12,12,11,13,12,12,13,11,11,13,14,10,12,12,11,10,13,12,11,12,13,12,14,14,13,14,13,13,13,14,13,14,15,15,13,13,15,14,11,13,13,13,11,13,12,12,10,11,13,11,10,12,13,11,12,13,14,11,12,12,11,12,11,11,13,12,14,13,14,13,14,14,15,15,15,16,16,16,17,16,16,17,16,15,16,16,15,16,15,16,16,16,15,17,17,15,14,15,15,14,14,16,15,14,14,13,14,13,12,13,12,13,12,13,12,13,12,12,12,13,11,12,12,10,12,12,9,10,13,10,7,10,11,9,8,10,9,9,9,9,11,10,10,11,13,11,9,13,11,11,12,13,15,14,13,15,14,16,15,17,17,18,18,18,19,20,19,19,20,19,19,17,19,17,16,17,16,17,16,15,16,16,16,14,15,15,15,13,15,15,15,15,13,13,13,13,12,13,12,12,11,13,11,10,10,11,9,7,9,7,6,7,5,8,7,6,6,6,6,6,7,9,6,7,8,10,8,8,10,11,10,11,12,12,11,11,12,12,10,10,11,10,9,9,9,9,8,6,6,5,4,4,5,4,5,5,7,6,6,7,8,7,8,8,7,8,9,9,9,9,10,11,11,10,9,10,9,8,8,5,5,5,6,3,2,1,0,1,2,3,4,3,5,5,7,6,5,6,7,8,7,8,10,9,9,10,12,11,12,12,12,13,13,14,13,13,14,14,15,15,16,17,18,17,20,21,21,22,23,23,20,22,23,22,25,22,24,23,21,26,23,24,25,24,23,26,26,23,23,25,24,22,22,23,24,24,22,24,23,22,23,25,23,22,24,24],[28,28,27,28,28,28,27,26,27,26,25,26,26,24,26,24,25,25,26,26,26,26,26,27,26,26,28,26,27,27,26,28,28,28,27,28,28,28,28,28,28,28,28,28,27,27,27,25,25,26,24,24,24,23,22,22,21,21,19,19,18,16,15,14,14,12,13,12,12,12,11,12,11,12,11,13,13,13,13,13,13,12,13,12,12,13,13,14,13,14,15,15,15,15,16,17,15,16,17,17,17,18,17,18,18,18,19,18,19,19,19,18,18,18,18,18,18,19,19,18,18,17,17,17,18,17,15,17,16,14,16,16,14,15,15,15,16,16,16,16,16,15,17,17,15,16,16,15,13,15,16,14,14,15,15,15,16,16,16,16,16,15,16,15,15,15,16,16,15,15,15,15,14,15,15,14,13,15,15,14,14,13,13,14,13,13,13,14,12,12,13,13,12,14,13,14,14,14,13,13,13,14,13,13,14,13,13,13,13,13,14,14,12,15,14,13,13,14,12,12,11,14,12,12,13,13,12,12,13,13,12,13,14,14,14,14,15,15,14,15,14,15,15,14,14,15,13,14,13,14,13,11,12,13,13,12,12,12,12,11,12,11,11,11,11,10,9,10,11,10,9,10,10,10,10,10,11,12,11,12,12,11,10,10,11,10,10,10,11,10,9,10,11,10,10,12,11,11,11,11,11,12,12,11,13,12,11,11,12,12,13,12,12,13,12,12,11,12,11,11,11,12,11,10,11,10,12,12,10,11,12,11,13,13,12,15,13,14,13,16,16,15,16,17,17,16,17,18,18,17,19,20,21,21,21,22,23,21,23,21,21,22,20,20,22,22,22,20,22,24,23,24,25,23,25,26,25,26,26,27,27,27,28,28,28,28,28,28,27,28,28,28,28,27,28,26,27,27,27,27,27,26,27,26,26,26,26,25,25,24,25,23,21,21,19,16,16,14,13,12,11,11,11,10,9,9,9,9,7,9,8,8,9,8,9,8,10,9,10,10,11,10,10,11,11,11,11,11,12,10,10,11,10,12,12,11,12,12,11,11,11,10,11,11,10,10,9,10,11,9,10,10,10,9,11,9,9,11,10,9,11,11,9,9,11,10,9,11,11,9,10,11,11,11,12,13,12,12,12,12,12,13,12,12,11,10,11,12,10,11,10,10,10,9,9,8,8,7,8,8,8,7,9,8,8,8,9,8,8,10,10,9,10,10,9,10,10,10,10,11,10,10,10,10,11,12,12,12,13,14,14,14,15,14,13,14,14,14,14,13,14,15,13,13,14,13,11,12,12,11,10,11,11,10,10,9,9,9,9,10,9,8,9,9,9,8,9,9,9,8,10,9,10,9,8,9,8,6,7,9,6,6,6,7,6,6,7,6,6,6,7,8,7,8,8,9,8,9,9,9,10,11,11,11,12,12,12,12,12,13,14,15,15,14,15,15,15,16,15,16,15,16,16,16,14,15,15,14,15,15,14,14,15,14,14,13,13,13,13,13,12,11,10,11,11,10,9,9,10,8,8,8,8,8,7,6,7,7,6,6,6,5,4,4,5,5,3,5,6,5,4,7,6,6,7,7,7,6,7,8,9,8,10,11,10,10,12,10,9,9,8,8,8,7,7,6,6,6,5,6,5,4,3,5,5,5,6,6,5,6,7,6,7,7,8,7,7,9,7,7,9,8,8,8,8,7,7,8,7,6,5,5,6,6,5,4,2,1,0,1,2,3,4,3,5,6,5,5,6,7,6,6,6,7,7,7,8,9,8,9,11,10,10,10,11,12,12,13,13,13,13,15,14,16,16,18,19,18,21,20,20,19,21,21,19,23,21,23,23,21,25,23,23,23,24,22,25,25,23,24,24,24,22,21,22,25,23,21,23,22,22,24,24,21,22,24,22],[29,28,27,28,27,27,27,26,26,26,24,25,24,23,25,24,25,22,25,25,24,25,26,23,25,26,25,25,27,26,25,27,26,28,27,29,26,28,28,28,28,28,28,27,28,27,27,25,26,26,25,23,25,24,22,22,22,19,19,21,18,16,15,15,14,14,13,14,13,14,14,13,13,12,13,13,15,16,16,14,13,15,15,13,15,16,13,16,15,15,17,16,17,17,18,17,17,18,18,18,19,18,18,18,19,19,19,19,18,19,19,18,18,20,20,19,18,21,20,19,19,19,20,18,18,19,18,18,18,17,18,18,16,16,16,16,17,16,17,17,17,16,17,19,17,17,18,18,16,18,18,17,17,17,17,18,18,17,18,18,19,18,19,18,18,18,17,17,16,18,17,18,16,18,17,17,17,17,17,16,17,16,16,16,17,14,16,16,14,14,15,14,13,14,14,14,16,15,13,14,14,14,13,15,14,14,14,14,14,15,16,15,13,17,16,13,14,16,16,13,14,17,15,13,15,16,14,13,15,16,14,15,15,16,16,16,16,15,16,16,17,16,16,17,17,16,15,16,15,15,15,13,13,14,12,14,14,12,12,11,12,13,12,11,12,12,10,10,12,11,9,11,11,10,10,11,12,12,11,13,12,12,11,11,13,11,11,12,13,11,11,12,13,12,13,15,13,11,13,13,12,13,13,13,14,13,12,14,12,12,12,12,12,12,11,12,13,11,11,14,13,13,12,11,13,12,13,12,12,12,11,13,12,11,13,13,12,15,14,16,16,16,14,17,17,17,17,19,18,18,18,22,22,21,22,23,24,22,24,21,22,22,21,20,20,21,21,19,21,22,21,22,24,23,24,26,25,27,25,27,27,28,27,27,27,27,28,28,27,27,27,27,27,27,28,24,27,27,26,27,27,26,27,25,25,25,25,24,24,23,23,22,22,21,20,18,17,15,14,12,12,11,11,12,11,10,10,10,9,11,9,8,9,10,8,10,11,10,10,10,12,10,11,10,11,11,11,12,11,12,11,11,12,13,12,11,12,11,12,11,12,10,10,11,11,10,10,11,11,11,11,11,10,11,12,12,10,11,9,9,11,13,9,10,10,9,9,10,10,9,10,11,11,12,12,12,12,12,11,12,12,12,12,13,13,12,12,12,11,11,11,11,10,10,10,9,10,8,9,10,9,8,9,10,9,8,11,10,9,10,11,10,11,9,9,11,12,11,10,11,10,11,11,12,12,13,13,13,14,15,15,15,15,15,16,15,16,15,15,14,15,15,15,14,15,14,12,12,13,12,11,11,12,11,11,11,10,10,11,11,11,10,11,11,10,10,11,11,10,9,11,10,11,10,9,11,9,7,8,8,7,6,7,7,6,6,8,7,7,6,7,8,8,8,8,9,9,9,10,10,11,12,13,13,13,14,13,14,13,14,16,16,17,16,16,16,17,18,17,18,17,17,16,17,16,16,16,15,16,16,14,15,15,14,13,14,14,14,14,13,13,13,13,12,11,12,10,9,11,11,10,9,11,9,8,7,8,6,6,6,5,5,4,4,4,5,4,5,6,5,5,6,5,6,7,8,7,8,8,9,9,10,11,11,12,12,11,11,10,11,11,10,9,8,9,8,8,7,6,6,6,5,5,5,5,5,7,8,6,7,8,8,7,9,9,8,9,9,9,9,9,9,10,10,8,9,9,8,6,6,6,6,5,6,4,4,4,3,1,0,1,2,2,3,4,5,5,4,5,6,5,5,7,7,7,7,8,9,9,9,10,10,10,10,10,11,11,11,13,13,13,14,15,17,16,20,21,21,23,22,24,21,22,22,21,24,21,24,25,21,26,23,25,25,24,21,26,26,23,23,25,24,22,22,24,25,23,22,24,23,22,25,25,22,22,25,23],[28,28,27,28,28,27,27,27,26,26,25,25,26,23,26,24,25,25,26,25,25,25,26,26,25,27,27,26,28,28,27,28,29,29,27,29,28,28,29,28,29,27,27,28,28,28,28,26,26,27,25,25,25,25,23,23,23,23,22,21,19,17,15,14,15,13,13,13,13,13,12,13,13,12,12,13,14,14,15,14,14,13,14,14,14,14,15,14,15,16,16,16,16,17,16,17,16,16,18,18,17,18,18,17,18,18,19,18,18,19,19,18,18,18,17,19,18,19,18,18,19,16,16,18,18,16,17,18,17,16,17,17,15,17,16,16,16,16,15,16,15,16,17,17,16,16,17,16,16,17,16,16,16,15,15,17,17,17,16,16,16,16,17,16,16,16,16,16,15,15,16,16,15,16,16,15,15,16,16,15,15,15,14,15,15,13,14,15,14,13,15,14,13,13,14,14,15,15,14,15,15,16,14,14,15,15,13,14,14,16,15,15,14,15,15,14,14,15,14,14,13,14,14,14,14,14,13,14,13,14,12,14,14,15,15,15,16,15,15,15,16,15,16,15,14,14,14,15,13,13,14,13,12,12,12,12,13,13,12,11,11,11,12,10,11,12,9,11,12,10,9,11,11,9,9,11,12,13,13,12,13,12,11,11,11,11,10,12,12,11,10,11,11,11,12,13,11,11,11,13,11,11,12,12,12,12,12,12,12,12,13,11,12,12,11,13,12,14,13,12,14,12,12,12,13,13,14,12,12,13,13,13,13,12,13,13,13,14,14,16,16,17,14,17,18,18,16,19,18,18,19,22,22,21,24,24,24,23,24,24,22,23,22,19,21,22,22,20,21,22,23,22,25,24,25,26,26,26,26,27,27,27,27,27,28,28,28,28,28,28,28,28,28,27,28,25,27,28,26,27,27,26,28,25,27,27,26,26,26,26,25,23,22,22,21,19,17,16,14,13,12,10,12,11,11,11,11,9,9,10,9,8,10,10,10,10,11,10,10,10,11,11,11,11,13,11,12,11,13,11,11,12,10,13,13,12,14,13,11,11,14,12,11,12,12,10,11,12,12,10,11,11,12,11,12,11,10,12,10,10,11,11,10,9,10,9,9,10,10,9,9,11,10,11,12,12,12,11,10,12,11,13,12,12,13,10,10,11,12,10,10,10,9,8,11,9,9,8,8,10,9,7,9,10,8,8,10,11,10,11,11,10,10,9,9,10,13,12,10,11,9,10,12,11,14,14,12,13,14,14,15,16,15,14,15,14,16,15,15,14,15,15,14,13,14,13,13,12,11,11,10,11,12,11,10,11,12,10,10,11,10,10,10,11,10,10,10,11,10,10,11,10,11,9,9,9,9,7,8,9,7,5,7,8,5,5,7,6,7,6,6,8,8,6,8,9,8,9,9,9,9,11,12,12,12,12,13,13,13,13,15,16,16,15,16,16,15,17,16,16,16,16,16,16,15,16,15,14,16,16,14,15,16,15,14,13,13,13,14,12,12,12,12,11,11,11,10,9,10,10,9,9,9,8,7,8,8,6,6,6,6,5,5,4,6,5,3,4,5,3,4,5,5,6,7,8,8,8,7,8,10,8,9,11,10,11,11,11,9,8,9,10,9,8,8,6,6,8,6,6,6,6,4,5,5,5,7,6,6,7,8,8,9,9,9,7,8,10,8,9,9,10,8,9,10,8,9,8,6,6,6,6,6,6,5,4,4,3,1,1,0,1,2,3,3,4,4,4,4,6,5,5,7,7,6,7,8,9,9,9,10,10,10,9,10,11,11,11,11,14,12,14,15,17,17,19,20,21,22,22,22,21,22,22,21,25,22,24,25,19,26,23,25,25,25,21,26,25,23,25,25,25,23,21,24,25,23,22,24,23,22,23,24,20,22,23,22],[28,27,26,27,27,26,26,25,25,26,23,24,23,22,24,22,23,22,24,24,23,24,26,23,25,27,26,25,27,27,26,28,28,29,28,29,28,29,28,28,29,28,28,29,28,28,28,26,27,27,26,25,26,25,24,23,22,22,20,21,20,18,17,14,13,14,12,12,13,13,13,13,13,13,13,14,14,16,15,13,13,16,16,13,14,15,15,16,15,15,17,17,17,18,17,17,18,17,17,18,19,17,18,18,18,17,18,18,18,19,19,19,19,20,18,19,19,21,19,18,18,18,18,18,17,18,17,17,17,17,18,17,16,17,16,18,16,15,15,16,15,15,16,18,17,18,17,18,16,17,17,16,18,17,17,18,18,18,17,18,18,18,18,18,18,17,17,18,15,16,17,18,14,17,17,16,15,16,16,16,16,14,16,15,16,13,16,15,14,14,14,13,14,15,15,15,17,15,13,16,15,15,14,15,14,16,14,15,13,15,14,15,14,15,15,14,14,16,15,14,14,16,14,13,16,16,13,12,15,15,13,13,14,16,15,16,17,16,16,15,17,15,16,16,14,15,15,15,13,13,13,13,13,13,15,13,13,13,13,12,13,13,12,12,13,13,11,12,13,11,10,11,11,11,11,13,14,13,12,12,13,13,11,11,12,12,11,12,13,12,11,12,12,12,13,14,13,13,13,13,11,12,12,13,13,13,12,13,11,12,11,12,11,12,11,12,11,12,11,11,12,11,12,11,13,12,12,11,11,12,12,11,12,11,12,14,13,15,15,14,17,17,15,17,19,18,16,19,19,18,19,22,22,21,23,24,24,24,25,21,23,23,22,20,20,22,22,21,19,21,23,24,24,22,25,25,25,26,26,27,26,26,26,27,27,28,27,27,27,27,27,27,28,26,27,25,28,27,26,27,27,26,27,25,27,27,25,25,25,25,26,24,22,21,20,19,17,15,14,12,12,11,11,10,10,11,11,10,9,10,8,9,10,10,9,10,11,9,11,11,11,10,11,10,10,10,10,11,11,10,11,11,10,12,11,11,11,11,10,11,13,11,11,11,10,11,10,11,10,10,10,10,13,11,12,9,11,12,9,8,9,10,8,9,10,10,8,9,10,8,8,11,10,11,11,11,12,12,10,11,10,11,12,12,13,12,10,12,12,11,11,10,10,9,10,9,9,10,9,11,9,10,9,10,10,9,11,10,10,10,11,9,10,9,9,11,12,11,11,12,10,11,12,11,13,13,13,12,15,16,15,14,16,15,15,16,15,15,16,15,16,15,14,14,14,14,12,12,12,12,11,11,13,12,10,11,11,11,11,11,11,10,12,12,11,10,10,11,10,9,11,11,11,9,8,9,8,7,7,9,7,7,6,7,8,8,8,8,7,6,7,7,7,7,9,9,8,9,9,10,10,11,11,12,13,12,12,12,14,12,16,16,16,16,16,17,18,18,17,17,17,18,16,16,17,16,16,16,17,16,15,16,14,15,14,14,14,14,12,13,13,11,12,11,12,11,10,10,11,11,10,10,10,9,7,8,9,7,6,7,6,5,5,5,5,5,4,6,7,4,5,6,6,6,6,8,7,7,8,8,9,9,9,10,10,10,11,11,10,9,11,10,9,10,9,7,7,8,6,7,7,6,5,5,6,7,7,7,8,8,8,9,8,9,9,10,10,9,11,10,9,9,10,10,10,11,9,8,8,7,7,8,7,8,6,5,5,4,3,1,1,0,1,2,2,3,5,4,5,6,6,6,7,8,8,7,7,9,9,9,9,10,10,9,11,12,12,12,11,15,12,13,15,18,17,21,20,22,21,22,23,19,22,22,21,25,21,23,24,22,26,24,25,25,26,23,26,25,24,25,24,23,24,22,22,24,23,23,25,22,22,24,25,21,21,24,24],[27,27,26,27,27,27,27,26,26,26,25,25,25,24,25,25,26,25,26,27,26,26,27,27,26,27,28,26,28,28,27,28,28,28,28,28,27,28,28,28,28,28,27,28,28,27,27,25,25,26,24,23,23,23,21,21,21,20,19,19,19,16,15,13,14,13,13,13,12,13,12,12,12,13,12,13,13,14,14,15,13,14,14,12,14,14,13,15,13,16,16,15,15,17,16,16,16,16,16,17,18,17,16,17,17,18,18,18,18,18,19,18,17,18,17,18,17,18,17,17,17,17,16,17,17,17,15,16,17,15,16,17,15,14,15,14,15,15,14,15,15,16,16,17,17,16,16,16,15,16,16,16,17,16,15,17,17,16,17,16,17,17,16,16,16,16,16,16,15,15,15,15,14,16,16,15,14,14,15,13,14,14,13,13,15,13,13,14,14,13,12,13,14,14,13,13,13,13,12,12,12,13,13,13,13,12,12,13,13,14,13,13,13,13,14,13,15,15,14,13,13,15,15,13,14,14,13,13,13,14,12,14,13,14,13,14,14,14,14,14,15,14,14,15,14,13,12,14,13,13,13,13,11,12,12,12,12,12,11,11,11,12,12,12,12,12,9,13,13,11,11,11,12,11,11,11,12,12,11,12,14,12,11,12,12,13,11,12,13,12,10,12,12,11,12,14,12,12,12,13,11,11,11,11,12,11,12,11,11,11,11,10,11,10,10,11,9,10,10,10,11,11,11,10,12,11,12,11,11,12,12,12,11,12,14,14,13,16,15,16,17,16,16,18,18,16,17,19,19,18,20,22,22,21,23,24,26,24,26,24,24,23,22,19,21,23,22,21,21,23,24,24,26,26,26,26,27,27,27,28,28,28,28,28,28,28,28,28,27,28,27,28,28,27,27,25,27,28,26,27,26,26,28,25,26,26,25,25,24,24,24,22,22,20,19,17,17,14,13,12,12,10,10,10,9,9,10,9,8,9,7,8,8,8,8,9,10,8,9,9,11,9,9,12,12,10,10,10,11,10,11,10,10,10,10,11,12,12,9,13,12,12,9,12,10,9,9,10,9,9,9,10,10,8,11,9,9,10,8,7,9,11,7,9,9,11,8,9,10,10,8,9,9,12,11,11,12,11,10,10,10,11,11,12,12,11,11,11,13,9,12,11,12,9,12,11,10,11,11,11,10,10,11,11,10,10,11,10,11,11,10,9,9,9,9,11,11,11,10,10,11,10,10,11,12,12,12,13,14,14,13,13,13,14,13,14,15,14,14,13,14,14,14,13,14,13,12,12,12,13,12,12,12,12,11,11,11,12,11,11,12,10,10,11,12,10,11,13,10,9,11,10,10,8,8,10,9,7,9,9,8,7,8,8,7,7,9,7,9,7,7,10,8,6,9,10,9,9,10,10,9,11,10,12,11,11,13,12,14,12,15,16,16,16,15,17,16,17,17,17,16,16,15,17,15,14,15,14,14,14,13,14,14,13,13,12,12,13,12,13,12,12,12,11,11,11,11,11,12,10,10,10,9,10,7,7,8,8,6,6,5,5,3,3,5,4,4,4,6,4,5,6,7,8,6,8,8,7,7,9,10,8,10,11,11,10,10,10,11,10,9,10,9,8,7,7,7,6,6,6,7,6,5,6,6,7,6,6,6,7,7,7,8,9,8,8,9,9,8,9,9,10,9,9,9,7,8,7,8,7,6,7,8,7,6,5,5,4,3,2,2,1,0,1,2,2,3,4,4,5,5,5,8,7,7,8,9,12,10,10,10,10,12,10,10,11,12,11,12,13,12,14,15,16,16,19,17,19,20,20,20,18,20,21,20,23,19,23,22,21,25,23,22,24,25,22,25,25,23,22,23,24,22,21,20,23,23,20,22,22,21,23,24,21,21,23,22],[28,28,28,28,28,28,28,27,27,26,26,26,26,25,26,25,26,25,26,26,26,26,27,26,26,27,28,27,28,28,27,28,28,29,28,28,28,28,29,28,29,28,28,28,28,28,27,26,26,26,24,24,24,23,22,22,21,21,19,19,18,16,14,13,13,12,11,11,11,11,10,9,9,8,9,10,12,11,11,11,10,11,11,10,10,11,11,12,12,12,13,13,13,13,13,15,14,14,15,15,14,15,16,15,14,16,16,16,15,16,16,16,15,15,14,16,15,16,15,15,16,13,14,15,15,14,13,15,14,13,13,13,13,13,12,13,13,12,13,13,13,14,13,14,13,14,14,13,12,13,13,11,12,13,13,13,14,14,14,15,14,13,14,13,13,13,14,14,13,13,13,13,12,12,13,12,11,12,12,12,12,10,11,11,11,10,11,12,10,9,11,10,10,10,11,11,11,12,10,12,11,12,11,11,12,11,11,12,11,12,12,11,11,12,12,11,10,11,11,10,10,11,10,10,11,10,10,10,10,11,9,11,12,11,13,12,12,13,12,12,12,13,12,11,11,12,11,10,10,10,10,9,9,9,10,10,10,10,9,8,9,9,8,7,8,8,6,8,9,8,7,9,9,9,8,8,10,11,10,10,10,10,9,9,9,9,8,9,9,9,8,7,9,8,9,8,8,8,8,8,8,9,8,9,9,9,8,8,9,9,7,8,9,9,7,9,7,10,8,8,9,9,9,9,10,9,10,9,9,10,10,11,11,11,11,13,13,12,14,15,16,15,15,17,18,18,18,19,19,19,20,22,24,23,24,25,25,25,25,24,24,25,23,23,23,24,24,22,23,24,25,26,27,27,27,27,27,28,28,28,28,28,28,29,29,29,29,29,28,29,28,29,29,28,28,27,28,28,27,28,28,27,28,26,26,26,26,25,26,24,24,23,22,20,19,17,16,14,13,11,10,9,9,9,8,8,8,6,7,7,6,7,6,8,8,7,8,9,9,9,9,10,9,10,11,10,10,10,10,10,10,9,9,9,10,10,11,11,9,10,11,9,9,10,9,9,8,9,8,8,7,9,8,7,7,7,7,7,6,7,7,6,6,6,7,7,8,7,7,6,7,8,7,8,9,8,9,9,8,8,7,8,8,9,8,7,7,8,9,8,7,7,7,6,6,7,7,5,7,8,6,7,8,8,7,8,9,8,10,8,8,7,8,8,9,9,10,10,10,9,11,9,10,9,10,11,9,10,12,12,12,12,13,13,13,13,13,13,13,12,14,13,12,12,12,11,11,11,10,10,9,10,10,9,8,8,8,8,8,8,8,9,8,8,8,6,7,8,7,6,7,8,8,6,5,6,5,5,5,6,5,4,5,7,5,5,8,7,6,6,7,7,8,7,7,8,8,9,8,9,8,9,10,10,10,10,11,12,11,11,13,12,12,13,12,12,13,13,13,13,13,14,13,14,14,13,13,13,13,13,13,13,14,13,12,11,12,11,12,11,11,10,9,9,10,8,8,8,8,7,8,7,7,7,8,7,10,6,5,7,7,4,3,3,4,4,2,5,5,4,5,6,6,6,7,6,7,8,6,7,7,7,8,9,9,9,9,9,7,7,7,7,6,6,7,6,6,6,5,5,5,4,4,5,5,5,6,7,5,6,7,7,7,8,7,7,7,7,7,7,8,8,8,8,7,8,7,8,7,5,6,5,6,5,5,4,5,5,2,2,3,2,1,0,1,2,5,4,3,6,4,4,6,6,5,5,7,6,6,6,6,7,8,7,8,9,10,10,11,12,12,12,14,16,15,18,17,18,20,21,21,17,21,21,20,24,18,23,22,21,26,23,22,24,25,23,25,25,24,22,23,24,23,20,21,23,23,20,23,22,21,23,24,20,21,23,21],[28,28,27,28,27,26,27,26,25,26,23,24,25,21,25,23,25,24,24,26,25,26,27,27,26,27,28,27,28,27,27,28,29,29,28,29,28,28,29,29,29,29,28,28,28,28,28,27,27,26,25,24,24,24,23,23,22,20,19,21,18,16,14,12,11,11,10,9,11,10,10,9,10,9,10,9,11,11,12,11,10,11,11,9,11,11,10,12,11,12,13,14,13,14,15,14,12,13,15,14,14,15,15,15,15,15,16,16,15,16,17,16,15,15,15,16,16,16,15,16,15,14,14,15,15,14,15,14,13,12,14,13,11,13,13,14,13,12,13,13,13,13,13,13,12,12,13,13,12,13,13,12,12,12,13,13,14,15,14,15,15,14,15,14,14,13,15,15,12,13,13,13,12,13,13,12,12,12,12,12,12,11,11,11,11,10,11,11,9,9,13,10,10,10,11,11,13,13,10,11,12,11,11,12,11,10,11,11,11,12,13,12,11,12,12,11,11,12,11,10,10,11,11,10,11,11,10,10,11,11,10,11,11,12,12,12,12,12,12,12,13,12,12,12,11,11,11,10,10,10,10,9,9,10,9,10,10,9,8,8,10,9,9,8,8,8,7,8,8,8,7,8,8,7,8,8,9,10,9,9,10,10,9,8,9,9,8,9,9,9,8,8,9,9,9,10,9,9,10,9,9,9,9,9,10,9,9,8,8,8,8,8,8,8,7,8,8,8,8,8,10,9,9,8,10,9,10,9,9,9,10,11,10,9,11,12,12,14,13,15,16,15,15,17,18,18,17,20,18,19,19,22,24,21,23,24,25,24,26,22,22,23,21,22,22,23,23,22,21,23,23,25,26,25,26,26,27,27,27,27,27,27,27,27,27,27,28,28,27,28,28,28,28,27,28,26,27,28,27,28,27,26,28,27,26,26,26,24,24,24,23,22,22,21,20,18,17,14,13,10,9,8,8,8,8,7,7,7,6,7,7,6,7,7,7,7,9,8,8,8,10,10,8,8,9,9,10,10,10,10,10,9,9,9,9,9,9,9,9,8,9,8,9,8,8,7,8,8,8,8,8,8,7,8,8,8,7,7,6,5,6,6,6,5,5,5,5,5,5,5,6,6,7,7,8,7,8,7,6,7,7,8,7,8,8,7,7,8,8,7,6,7,6,6,6,6,6,5,6,7,6,6,6,7,7,6,8,7,7,7,8,7,7,7,7,8,10,8,8,9,8,8,9,10,10,10,9,10,11,12,12,12,14,12,13,13,13,13,12,11,13,12,12,10,12,11,10,9,10,9,8,8,10,9,8,8,8,7,8,9,9,7,7,8,7,7,6,8,6,6,7,7,6,6,5,5,5,4,4,5,5,4,4,5,5,4,6,5,5,6,5,5,5,6,6,6,6,6,7,8,8,9,8,9,9,10,10,11,10,11,13,13,14,14,13,12,13,14,13,13,13,14,14,14,14,14,14,13,13,13,13,12,13,13,11,12,12,12,12,10,10,9,10,8,8,9,8,7,8,7,7,6,7,6,6,6,6,4,4,4,4,3,3,2,4,4,3,4,4,4,4,5,5,6,6,6,6,6,5,6,7,6,7,8,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,5,4,4,5,5,5,6,6,5,5,6,6,6,6,6,6,7,7,7,7,7,6,6,7,6,6,7,7,6,5,5,5,5,5,5,5,5,4,4,3,3,4,2,1,0,1,1,1,2,2,3,2,2,3,4,3,4,5,5,5,5,5,6,6,6,7,8,9,10,11,12,11,12,16,15,16,18,19,21,21,20,17,21,20,18,23,18,22,22,19,25,23,21,24,25,22,24,26,25,19,23,24,22,20,21,24,23,20,25,22,22,23,25,21,21,24,23],[27,27,25,26,26,25,27,25,25,26,23,23,24,22,24,23,25,24,25,26,24,25,26,26,25,26,26,25,26,26,25,27,26,27,26,27,26,27,27,27,27,26,25,26,26,26,25,23,23,24,23,21,22,21,19,19,19,18,16,17,16,13,12,10,10,9,8,9,8,8,7,7,7,7,7,7,8,9,9,8,8,9,8,8,9,9,8,9,9,10,10,10,10,11,11,11,10,11,11,11,12,12,12,12,13,13,13,13,13,14,14,14,13,14,13,13,13,13,12,12,12,11,11,12,12,12,10,12,11,9,10,11,9,9,10,10,10,10,10,10,10,10,11,11,9,10,11,11,10,11,11,10,10,10,11,12,12,12,12,12,12,11,11,11,11,10,11,11,10,9,11,11,9,10,11,10,9,9,9,8,9,9,8,9,9,8,8,9,8,7,8,8,7,8,8,8,9,9,8,8,9,9,8,8,9,8,8,9,8,9,9,8,8,9,9,9,9,9,9,8,8,9,8,8,9,8,8,8,8,8,7,8,8,9,9,10,10,10,9,10,10,8,8,9,8,7,7,8,7,7,7,7,6,6,7,7,7,7,6,6,6,7,7,5,6,7,5,6,7,6,6,7,7,6,6,6,7,7,6,7,8,8,7,7,8,7,6,7,7,7,6,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,6,5,6,6,6,7,7,6,6,7,7,8,7,7,8,8,9,9,8,10,11,10,12,12,14,14,14,13,15,17,15,15,18,18,16,18,20,21,19,21,22,23,21,24,20,21,21,20,19,20,22,21,20,20,23,23,24,24,25,25,25,26,26,26,26,26,26,26,26,26,27,27,27,26,26,26,26,26,26,26,25,26,25,25,26,25,24,26,25,24,24,24,23,24,22,22,20,19,17,17,15,14,12,11,9,8,7,7,7,6,7,6,6,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,8,8,10,8,8,8,7,7,7,8,7,9,9,7,8,8,7,8,7,7,7,6,7,7,6,6,6,6,6,6,5,4,4,3,4,4,3,3,4,4,3,3,4,4,4,4,5,6,6,6,6,6,6,4,5,5,5,5,5,6,5,5,5,6,4,4,5,5,4,4,5,4,4,5,5,5,5,6,6,5,5,6,6,5,6,6,5,6,6,6,7,8,8,8,7,6,7,6,7,7,8,8,8,9,10,10,10,10,10,10,11,10,11,10,9,9,10,9,8,9,9,8,7,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,6,5,4,4,5,4,4,4,4,4,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,6,5,5,5,5,5,6,6,5,6,6,6,6,6,7,7,8,8,8,8,9,10,10,10,11,10,11,11,11,11,11,11,12,12,12,11,12,12,12,12,11,11,11,11,11,10,10,9,9,8,8,8,8,7,7,7,7,6,6,7,5,6,6,5,5,4,4,4,4,3,4,3,2,2,2,3,3,3,4,4,4,3,4,5,5,5,5,5,6,5,5,6,6,6,7,7,7,6,6,6,6,6,5,6,6,5,5,5,5,5,4,4,4,3,4,4,5,5,6,5,5,6,6,6,6,6,6,6,6,6,7,6,6,6,7,6,5,5,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,2,2,1,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,5,6,7,8,10,10,11,11,12,14,13,16,17,16,18,20,18,16,20,20,17,22,17,22,21,19,26,23,21,24,25,22,24,25,24,21,22,25,21,18,20,23,22,18,23,21,19,23,23,18,20,22,21],[28,28,28,27,28,28,27,27,27,26,26,25,26,25,25,25,26,26,26,26,27,26,26,28,27,26,28,27,27,28,26,27,28,28,27,28,27,28,28,28,28,27,27,27,27,27,25,25,25,24,23,23,23,21,20,21,20,19,18,18,16,14,13,11,10,9,8,8,7,7,7,6,6,5,6,6,7,7,8,7,6,7,7,6,7,8,8,8,8,8,9,10,9,10,10,10,9,10,11,11,11,12,12,12,12,13,13,12,13,13,13,13,12,12,12,12,12,12,11,11,12,11,10,11,11,10,10,11,10,9,10,10,8,9,9,10,10,10,10,10,10,9,10,10,9,9,10,9,8,9,10,8,8,8,10,10,10,10,10,10,10,9,10,10,9,8,9,10,8,8,9,9,8,8,9,8,7,8,8,7,8,7,7,8,7,6,7,8,7,6,7,7,6,7,8,8,9,9,8,8,9,9,8,9,9,8,8,8,8,8,9,8,7,8,8,7,7,8,7,6,7,7,7,6,7,7,6,6,7,7,6,7,7,8,8,9,9,9,8,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,6,6,7,6,6,5,5,5,5,5,5,5,4,5,6,5,5,6,6,5,5,6,6,7,7,7,6,7,6,6,6,6,6,6,6,6,5,5,5,5,5,6,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,6,7,6,7,7,7,8,8,8,9,10,10,11,12,14,15,14,14,16,17,16,18,19,19,19,20,22,22,22,24,24,25,23,25,22,22,23,21,21,21,23,23,21,23,23,25,25,27,26,26,26,27,27,27,27,27,27,27,28,27,28,28,28,27,27,27,27,28,27,27,26,26,27,26,27,26,26,27,26,25,25,24,23,23,23,22,21,20,18,17,15,14,12,11,9,8,7,7,6,6,6,5,5,4,5,4,4,6,5,5,7,7,6,7,8,8,7,8,8,8,8,8,9,8,7,7,7,7,7,7,8,8,9,8,8,8,7,7,8,7,6,6,7,7,7,6,6,6,5,5,4,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,5,5,6,6,6,6,6,5,5,4,5,5,4,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,5,5,5,5,5,5,6,6,6,5,6,6,6,7,8,8,8,7,7,6,6,6,7,8,7,7,9,9,9,10,10,10,10,11,10,11,10,9,10,9,9,9,8,8,8,7,6,7,7,6,6,6,6,5,5,5,5,5,5,4,5,4,4,4,4,4,3,3,4,4,3,3,2,3,3,2,2,3,2,2,3,3,3,3,4,4,4,4,5,5,4,5,5,5,5,6,6,6,6,6,6,7,6,7,8,7,8,7,9,9,10,9,8,8,9,9,10,10,10,11,11,12,11,11,11,11,10,11,10,10,10,10,9,9,9,8,8,7,7,6,6,6,6,6,6,6,6,5,5,5,4,4,4,4,3,3,3,3,3,2,2,2,3,3,3,4,4,3,4,4,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,5,6,6,5,5,5,5,4,4,4,4,4,3,4,4,4,5,4,4,6,5,4,5,6,6,6,6,5,5,5,6,5,5,6,6,5,5,5,5,5,5,4,4,4,5,5,5,4,4,5,4,4,4,4,4,3,6,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,4,5,6,8,8,10,11,11,11,12,14,12,15,16,17,20,20,17,16,21,20,18,22,17,20,21,18,24,22,20,23,24,22,23,25,23,22,22,24,22,19,19,23,21,18,22,20,19,22,23,18,17,21,20],[28,28,28,28,28,27,27,27,27,27,25,25,26,24,26,24,26,25,26,26,27,26,27,28,26,27,28,27,28,28,26,28,28,28,28,28,28,28,29,28,28,27,27,27,27,27,26,25,25,25,24,23,23,22,21,21,20,20,18,19,16,14,12,10,9,8,7,7,7,7,6,6,6,6,6,7,7,7,8,7,6,7,7,6,6,7,8,8,8,8,8,9,8,9,9,9,9,9,10,9,10,10,10,10,10,11,11,11,11,11,12,11,10,10,10,10,10,10,9,10,10,9,8,10,10,9,9,9,9,8,9,9,8,8,8,8,9,8,9,8,8,8,9,9,8,8,9,8,9,8,9,8,8,8,9,9,9,9,9,9,9,9,9,9,8,9,8,9,9,8,8,8,8,8,8,8,7,7,8,7,7,7,6,7,7,6,6,7,6,6,7,6,6,6,7,7,8,8,7,8,8,8,7,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,6,6,7,7,6,6,7,7,6,7,7,8,8,8,9,8,8,8,8,7,7,8,7,6,6,6,6,6,5,6,6,5,5,6,7,6,5,5,5,5,5,5,5,5,5,5,6,5,5,5,6,5,5,5,6,6,6,7,6,7,6,6,6,6,5,6,6,5,5,5,5,6,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,7,7,8,8,7,9,10,10,11,11,14,14,14,14,17,16,16,18,19,18,19,20,22,23,22,24,24,26,24,25,21,23,23,22,22,22,22,23,22,23,23,25,25,27,25,27,26,27,27,27,27,26,27,27,27,27,28,28,28,27,27,27,27,28,27,27,26,27,27,26,27,27,26,27,26,25,26,25,23,24,24,22,23,20,20,19,16,14,11,10,8,7,6,6,6,6,6,5,5,5,5,5,4,5,5,5,5,6,6,6,6,7,7,6,7,8,7,8,7,7,7,7,7,6,6,7,7,8,9,7,7,8,7,7,7,6,6,6,6,6,6,5,5,6,5,5,4,4,4,4,3,4,3,3,3,4,3,3,4,4,4,4,5,5,6,6,6,6,6,4,4,4,5,4,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,6,7,8,8,7,7,6,5,6,6,7,7,7,7,8,8,8,9,9,9,9,9,9,9,9,8,9,9,8,7,7,8,7,7,7,7,6,6,6,5,5,5,6,5,5,5,5,4,4,4,4,3,3,4,4,3,3,4,4,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,5,5,5,6,6,6,7,6,7,7,7,7,8,9,9,9,9,8,8,9,9,9,9,9,10,10,10,10,10,10,9,10,9,9,9,9,9,9,8,8,8,7,7,6,7,7,6,6,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,5,6,5,5,4,4,4,4,4,4,4,4,3,4,4,3,4,4,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,4,4,4,5,5,4,4,4,4,4,3,3,3,3,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,5,6,8,8,10,10,11,11,11,15,14,15,17,17,19,19,18,17,19,20,18,22,17,20,21,18,24,22,22,22,24,21,23,25,23,23,23,24,23,20,21,24,23,20,23,21,21,22,24,20,19,22,22],[28,28,27,28,28,26,27,26,26,27,24,24,26,22,25,24,25,24,26,26,26,27,27,28,26,27,28,26,28,27,26,28,28,28,27,28,27,28,28,27,28,27,27,27,27,27,26,24,24,24,23,22,22,21,20,20,19,18,16,18,16,13,12,9,8,8,7,6,7,6,6,5,5,5,6,5,6,7,7,6,6,7,6,6,7,7,7,7,7,7,8,8,8,8,9,8,8,8,9,8,9,10,9,9,10,11,11,10,10,12,12,11,9,10,10,10,9,10,10,10,10,9,8,9,9,9,8,9,8,7,8,8,7,7,8,8,8,8,7,8,8,7,8,8,8,7,8,8,7,8,9,7,8,8,9,9,9,9,8,10,9,8,9,9,8,8,8,9,8,8,8,8,7,8,8,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,7,8,7,6,7,7,7,7,8,7,7,7,6,6,7,7,6,6,7,7,6,6,7,7,6,6,7,6,6,7,7,6,6,7,7,6,7,7,8,8,8,8,7,8,7,8,7,7,7,7,6,6,6,6,6,5,5,5,5,5,6,6,6,5,4,5,5,5,4,5,5,4,5,5,5,4,5,5,4,5,5,5,5,5,5,6,6,5,5,5,5,5,6,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,4,5,5,5,5,5,6,6,6,5,6,6,6,6,6,7,7,7,8,8,8,11,10,12,13,14,14,12,14,16,16,15,16,18,17,17,18,21,21,20,22,22,23,22,24,22,21,21,21,19,20,21,22,20,20,22,23,25,26,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,26,27,27,26,27,25,27,27,26,27,26,25,27,25,26,26,25,24,23,22,23,21,21,19,18,16,15,12,10,9,7,6,6,6,6,6,5,5,4,4,5,5,5,5,5,5,6,6,6,6,7,7,6,7,7,7,7,7,7,7,7,6,7,6,7,7,7,8,8,7,8,7,7,6,7,6,6,6,6,6,6,6,5,5,5,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,4,4,5,5,6,5,5,4,4,4,4,4,4,5,4,3,4,4,3,3,4,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,4,4,4,5,4,5,5,5,6,7,8,7,6,5,5,5,6,6,6,6,6,7,8,8,8,10,8,9,9,9,8,8,7,8,7,7,7,7,7,6,6,6,6,5,5,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,3,3,3,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,8,8,8,7,8,9,8,8,9,9,9,9,9,10,9,9,10,9,9,9,8,8,9,8,8,8,7,7,6,5,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,5,5,5,4,5,5,5,4,5,4,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,5,5,7,8,9,10,11,11,10,14,12,15,17,17,19,20,18,16,19,22,19,22,17,21,20,19,25,22,22,24,26,22,24,25,24,21,22,24,22,20,19,24,23,19,24,21,20,22,24,20,19,23,22],[28,28,27,27,28,27,28,27,26,26,25,25,27,24,26,25,26,27,26,26,27,26,26,27,27,27,27,26,27,27,26,27,28,28,27,28,27,27,27,27,28,27,26,27,27,26,26,24,24,24,23,21,22,22,19,19,19,19,17,17,15,13,11,9,8,7,7,6,6,6,5,4,4,4,5,5,5,6,6,5,5,6,5,5,6,6,6,6,6,7,7,7,7,8,8,8,7,8,8,8,9,9,9,8,9,10,9,10,10,10,10,10,9,9,9,9,9,8,8,8,9,8,7,8,8,8,7,8,8,6,7,7,6,7,7,7,7,7,7,7,7,7,8,7,7,7,8,7,7,7,8,6,7,7,7,8,8,8,8,8,8,7,7,7,7,7,7,7,7,6,7,7,6,6,7,7,6,6,6,6,6,6,5,6,6,5,6,6,5,5,6,6,5,5,6,7,7,7,6,7,7,7,7,7,7,6,6,7,6,7,7,6,6,6,7,6,6,6,6,5,6,6,5,5,6,6,4,5,5,5,4,5,5,6,6,7,7,7,6,6,6,5,6,6,5,5,5,5,4,4,4,4,4,4,4,5,6,5,4,4,4,4,4,3,4,4,3,4,5,4,4,4,5,4,4,4,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,4,4,3,4,4,4,3,4,4,4,4,4,3,4,3,3,3,4,3,3,3,3,3,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,6,6,6,6,6,8,10,10,11,12,14,14,13,13,15,16,15,15,17,18,17,18,20,22,20,22,22,23,22,23,21,20,20,20,19,20,22,22,21,22,23,24,25,26,26,26,26,27,27,27,27,26,27,27,27,27,28,28,27,26,27,27,27,27,26,27,25,27,27,25,26,26,25,26,25,25,25,24,22,22,22,21,19,19,17,17,14,12,11,9,7,7,6,5,5,5,5,4,4,4,4,4,4,5,5,5,6,6,6,6,6,7,7,7,8,7,7,7,8,7,7,7,6,5,6,6,6,7,8,7,7,7,6,6,6,6,5,5,5,5,5,4,5,4,4,4,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,4,4,5,5,5,6,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,5,5,7,6,6,5,5,5,5,5,5,6,6,6,6,7,7,7,8,8,8,8,8,8,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,7,7,8,7,7,7,7,7,8,8,8,8,8,9,8,9,9,9,8,8,8,8,8,8,7,7,7,6,6,6,5,5,5,4,4,4,4,4,4,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,4,5,4,4,5,5,4,4,4,4,3,4,4,4,4,3,4,4,4,4,4,4,3,3,3,3,3,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,4,5,7,8,9,10,10,11,11,13,12,15,16,15,18,18,17,16,20,19,15,22,16,21,20,20,24,23,22,22,24,23,23,24,24,23,22,25,23,20,19,24,24,20,23,20,19,22,24,20,19,23,21],[28,29,28,28,28,28,28,28,28,27,27,27,26,26,26,26,26,27,27,27,27,27,27,28,27,27,28,28,28,28,26,28,28,29,28,28,28,28,28,28,28,28,27,27,27,27,26,25,25,24,23,23,23,21,20,21,20,19,18,18,16,14,11,9,8,7,6,6,6,5,5,4,4,4,4,4,5,5,5,5,4,5,5,4,4,5,5,6,6,6,6,7,6,6,7,7,6,7,8,7,7,8,8,7,8,8,9,8,9,9,10,9,8,8,8,9,8,8,7,8,8,7,6,7,7,6,6,7,6,6,6,6,6,6,7,7,7,6,6,7,6,6,7,6,6,6,6,6,6,6,6,6,5,6,7,6,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,5,5,6,5,5,5,6,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,5,5,6,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,4,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,4,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,4,5,5,5,5,5,5,5,6,6,6,7,9,10,10,12,14,14,13,14,16,16,15,17,18,18,18,20,22,22,21,23,24,23,23,24,22,23,23,21,21,22,23,23,22,22,23,25,26,27,26,26,27,27,27,27,27,27,27,27,27,27,28,28,28,27,27,27,27,28,27,27,26,26,27,27,27,27,26,27,26,24,25,25,23,24,22,21,21,19,17,17,15,13,11,9,7,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,6,6,7,6,6,6,5,5,5,6,6,6,7,6,6,7,6,6,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,6,6,6,5,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,6,6,6,5,5,4,4,4,5,5,5,5,6,6,7,7,6,7,7,8,7,7,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,7,6,6,6,6,6,7,7,7,7,8,8,8,8,7,8,8,8,8,7,7,8,7,7,7,6,6,5,5,4,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,3,3,3,3,3,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,4,5,8,7,9,10,11,10,10,13,12,14,16,15,19,19,17,16,19,19,17,21,17,21,21,21,24,24,21,22,24,23,24,24,24,22,21,24,23,20,19,23,23,20,23,21,21,21,24,20,18,22,22],[29,29,28,28,28,27,28,27,26,27,26,25,26,24,26,24,27,26,26,27,27,26,28,28,26,28,28,28,28,28,26,28,29,29,28,29,28,28,29,28,29,28,28,28,27,27,26,25,26,25,23,23,23,22,20,20,20,18,17,17,15,12,11,9,7,7,6,6,6,5,5,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,6,7,7,7,7,7,7,7,7,7,8,8,8,8,9,9,8,7,7,7,8,7,8,7,7,7,7,6,7,7,7,6,7,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,7,7,7,7,7,7,7,6,6,7,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,5,4,4,3,4,4,4,3,4,4,3,4,4,4,3,4,4,4,3,4,4,4,5,5,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,3,4,4,4,5,5,4,4,5,5,5,5,5,5,5,6,6,6,8,9,8,11,11,14,14,13,13,16,16,15,17,18,18,17,18,20,21,20,22,23,24,22,24,21,22,22,20,20,20,22,22,21,21,24,24,25,26,25,26,26,27,27,26,27,27,27,27,27,27,27,28,28,27,27,27,28,27,27,27,26,26,28,26,27,27,26,27,26,26,26,24,24,24,22,22,20,20,18,17,15,14,11,9,7,6,5,5,4,5,4,4,4,3,3,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,6,7,6,6,6,6,5,5,6,6,6,7,7,6,6,6,6,6,6,6,5,5,5,5,4,4,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,6,6,6,5,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,7,6,6,5,5,4,5,4,5,6,5,6,6,6,6,7,7,7,7,7,7,7,7,6,7,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,7,6,6,6,6,6,7,7,7,7,8,8,8,8,7,8,7,8,7,7,7,7,7,7,7,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,4,4,3,4,3,4,4,4,4,3,4,4,3,3,3,3,3,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,4,6,7,8,8,10,11,10,10,13,13,14,16,15,18,18,16,14,19,18,17,21,18,20,21,19,24,23,21,23,24,22,23,24,24,20,22,24,24,21,19,24,24,21,24,21,21,22,24,20,19,23,22],[27,27,25,27,27,25,27,27,25,25,24,24,25,23,25,24,26,25,26,26,26,26,26,26,26,26,26,26,27,26,25,27,27,28,26,27,26,27,27,27,27,26,25,26,26,25,25,23,23,23,22,21,21,21,18,19,18,17,16,16,14,12,11,8,8,7,6,6,6,5,5,4,4,4,4,5,5,6,6,5,5,5,5,5,5,5,5,6,6,6,6,7,6,7,7,6,6,7,7,6,7,7,7,7,8,8,8,8,8,9,9,8,8,8,8,8,7,7,7,7,8,7,6,7,7,7,7,7,6,6,6,6,6,6,6,7,6,6,6,6,6,6,7,6,6,6,7,6,6,6,7,6,6,6,6,7,7,8,7,7,7,6,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,5,5,5,5,4,5,5,5,6,6,5,6,6,6,5,6,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,4,5,5,5,4,5,5,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,4,4,4,4,3,4,4,4,5,5,4,3,3,4,3,3,4,3,3,3,4,3,3,4,4,3,3,4,4,4,4,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,4,4,3,4,4,3,4,4,3,3,4,3,3,3,4,3,3,4,3,4,4,4,4,5,4,4,4,5,5,5,5,5,5,6,6,7,8,9,8,10,11,12,13,12,11,13,14,14,14,16,17,16,17,19,20,20,21,21,22,21,22,19,20,20,19,18,18,20,20,18,19,22,23,23,25,24,24,25,25,25,25,25,25,25,25,25,26,26,27,26,26,26,26,26,27,25,26,23,25,25,24,26,25,24,25,25,24,23,23,22,22,21,19,19,18,17,16,14,12,11,9,8,7,5,5,5,5,5,4,4,4,3,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,6,6,6,7,6,6,7,6,6,5,6,5,5,5,5,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,5,5,5,4,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,6,6,6,5,4,4,4,4,5,5,5,5,5,6,6,7,7,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,5,4,5,5,5,5,5,5,5,6,6,7,6,6,6,7,7,7,7,7,7,8,8,8,8,7,8,7,8,7,7,7,8,7,7,7,6,6,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,5,5,4,4,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,4,6,6,7,7,10,8,8,10,11,11,14,15,13,17,17,15,14,17,19,16,21,16,20,19,17,24,22,19,21,23,20,22,24,23,19,21,24,21,18,20,22,23,18,23,20,20,21,23,19,18,22,20],[28,28,28,28,28,28,28,27,27,26,26,26,26,26,26,26,26,27,27,26,27,27,26,27,27,27,27,27,27,27,26,27,28,28,27,27,27,27,28,27,28,27,27,27,26,26,26,24,25,23,23,22,22,21,20,20,20,18,17,17,15,13,10,8,7,6,5,5,5,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,6,7,8,7,7,8,9,9,8,7,7,7,7,7,6,6,6,7,6,6,6,6,6,5,6,6,5,6,5,5,5,6,6,5,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,5,5,6,6,6,7,6,7,6,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,5,5,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,4,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,7,8,8,10,11,12,13,12,12,15,15,15,16,18,17,18,19,21,21,21,22,21,23,21,23,21,21,21,20,18,20,21,22,19,20,22,23,25,27,25,25,26,26,26,27,26,26,26,26,26,27,27,27,27,27,27,26,26,27,26,26,24,26,25,25,26,25,25,26,24,24,24,24,22,21,20,20,19,19,16,15,13,12,10,9,7,6,5,5,4,4,4,3,4,3,3,3,4,4,4,4,5,5,5,5,5,6,5,6,6,7,6,7,6,6,6,6,5,5,5,6,5,6,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,5,5,5,4,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,5,6,6,5,5,4,4,4,4,4,4,4,5,5,6,6,6,6,6,6,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,6,7,7,6,6,6,5,5,5,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,4,4,4,4,3,4,4,4,4,3,4,4,3,3,3,3,3,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,4,5,6,6,7,9,10,9,10,11,12,14,15,15,18,18,16,16,19,18,16,20,17,20,20,20,23,23,21,22,23,22,23,24,24,22,21,23,23,20,19,22,23,18,22,19,20,22,23,20,20,22,21],[29,29,28,28,28,28,28,28,27,27,27,26,27,26,27,26,27,28,27,27,28,28,28,28,28,28,28,28,28,28,27,28,29,29,28,28,28,28,29,28,29,28,28,27,27,27,25,24,25,24,24,23,24,21,22,21,20,20,19,19,16,14,12,9,8,7,6,6,5,5,4,4,4,3,4,4,4,5,5,5,4,5,5,4,4,5,5,5,5,5,6,6,5,6,6,6,6,6,7,6,6,7,7,6,7,7,8,7,7,9,8,8,7,6,6,7,7,7,7,6,7,6,6,6,6,6,5,6,6,5,6,6,5,5,6,6,6,5,6,6,5,5,6,6,5,5,6,5,5,6,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,5,5,5,5,5,6,6,5,6,6,6,6,5,5,6,6,5,4,5,4,4,4,5,4,3,4,4,3,4,4,4,3,4,4,4,3,4,4,5,6,6,5,6,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,8,9,10,11,12,14,15,14,15,17,16,16,18,19,19,19,20,22,23,21,22,23,24,24,24,22,23,23,21,22,22,23,24,23,23,24,26,27,28,26,27,27,27,27,27,27,27,27,27,28,27,28,28,28,28,27,28,28,28,27,28,27,27,28,26,27,27,26,27,26,25,25,25,24,23,22,21,22,19,18,17,16,13,12,9,8,6,5,5,4,4,4,4,3,3,3,4,4,4,4,4,4,5,5,5,5,6,5,5,6,7,6,6,6,6,5,5,5,5,5,5,5,7,7,6,6,7,6,5,5,5,5,4,5,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,4,5,6,5,4,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,4,4,5,5,6,6,7,5,4,4,4,4,4,5,4,5,5,6,6,7,6,7,7,7,7,7,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,8,7,8,7,8,7,7,7,7,7,7,7,6,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,5,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,5,4,4,5,5,4,5,5,4,4,5,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,3,5,7,7,7,10,10,10,10,12,13,14,16,16,19,18,17,16,19,19,17,20,17,21,20,20,24,24,21,22,23,23,24,23,24,22,22,23,24,20,20,24,23,21,22,21,21,22,23,20,19,22,22],[28,28,26,27,28,26,28,27,26,26,25,24,26,24,26,24,26,26,25,27,26,27,27,27,26,27,28,27,28,27,26,28,28,28,28,28,27,28,29,28,28,27,26,26,26,26,25,23,24,24,22,21,22,21,19,20,19,18,17,16,14,13,11,9,8,7,6,6,6,5,5,4,4,4,4,4,5,5,5,5,5,5,5,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,6,7,7,7,7,7,8,8,7,8,9,9,8,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,6,6,5,6,6,6,5,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,4,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,3,4,4,4,5,4,4,3,3,4,3,3,3,4,3,4,4,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,4,4,3,4,4,3,3,4,3,3,4,4,3,3,4,3,3,4,3,4,4,4,4,5,4,4,4,5,5,5,5,5,6,6,6,6,8,9,9,10,11,12,14,12,13,15,15,15,16,17,17,17,17,20,21,20,21,22,24,22,24,21,21,21,20,19,19,22,21,19,20,22,24,24,26,24,25,25,26,26,26,26,25,26,26,26,26,26,27,26,26,26,26,26,27,25,26,25,25,26,25,26,26,26,26,25,24,24,24,23,21,23,20,19,19,17,17,15,13,12,9,8,6,5,5,5,5,4,4,4,4,4,3,4,4,4,4,5,5,5,5,6,7,7,6,7,7,6,7,6,6,5,5,5,5,6,6,6,7,7,6,6,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,5,6,5,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,6,7,6,5,5,4,4,5,5,5,5,5,6,6,6,7,7,7,7,7,7,7,7,6,6,6,6,5,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,8,7,8,7,7,7,8,7,7,7,7,7,7,7,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,4,4,4,4,5,4,5,5,4,5,5,4,4,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,3,5,7,6,7,9,9,9,9,12,13,14,16,14,18,18,16,15,19,19,16,22,19,19,18,18,23,21,20,20,23,21,22,24,24,21,21,24,22,20,21,24,24,21,24,21,21,22,24,21,19,23,22],[28,28,27,27,27,26,28,27,26,26,25,25,26,25,26,25,26,26,27,26,27,27,26,26,27,27,27,27,27,27,26,27,27,28,27,27,26,27,27,27,27,26,26,26,25,25,24,22,23,22,21,21,21,20,17,19,18,18,16,16,15,12,11,9,8,7,6,6,6,5,5,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,7,6,6,6,7,6,7,7,7,7,7,8,8,7,8,9,9,8,7,7,7,8,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,5,6,6,5,6,6,6,6,6,6,7,7,7,7,7,7,6,6,7,6,6,6,6,6,5,6,6,6,5,6,5,5,5,5,5,5,4,4,5,5,4,5,5,4,4,5,5,4,5,5,6,6,6,5,6,6,6,6,6,6,5,5,5,5,6,6,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,4,4,5,5,5,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,5,5,4,3,3,4,3,3,4,4,3,4,4,3,3,4,4,3,3,4,4,4,4,5,5,4,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,4,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,5,4,5,5,5,5,5,6,6,6,7,8,9,10,10,11,12,13,12,13,14,15,14,15,16,16,16,17,19,19,19,20,21,22,21,22,20,19,21,20,19,19,20,20,18,20,22,23,24,26,24,24,25,24,25,25,25,25,26,26,26,26,26,26,26,26,26,26,27,26,25,26,23,25,26,25,26,26,25,25,24,24,23,23,21,22,21,20,19,18,17,15,14,12,11,9,7,7,5,5,5,5,5,4,4,4,4,4,5,5,5,4,5,5,5,6,6,6,6,6,7,7,7,7,6,6,6,6,5,5,6,6,6,7,8,6,6,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,5,4,4,3,3,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,6,6,6,5,5,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,7,6,6,6,6,6,7,7,7,7,8,8,8,8,7,8,8,8,8,7,8,8,7,7,7,6,6,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,5,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,3,5,7,7,7,9,9,8,9,10,11,13,13,15,19,20,17,15,20,20,16,22,18,22,20,21,25,22,21,22,24,23,22,24,24,20,21,24,22,17,19,22,23,19,22,20,19,22,23,19,18,21,20],[28,28,28,28,28,28,27,27,28,26,26,27,26,26,26,26,26,27,27,26,27,27,26,27,27,27,27,27,27,27,26,26,27,28,27,27,27,26,27,27,27,26,26,26,26,25,24,24,24,23,23,22,22,20,19,20,19,19,17,18,15,13,11,9,7,6,5,5,5,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,6,6,6,8,8,6,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,5,5,4,4,4,5,5,5,6,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,4,3,3,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,4,4,3,3,4,4,3,3,4,3,3,3,4,3,3,4,4,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,4,4,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,2,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,6,5,6,8,9,9,10,12,12,15,13,13,15,16,15,17,18,17,18,18,20,22,21,22,22,23,22,23,21,20,22,20,21,22,21,22,21,21,22,25,25,28,25,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,27,25,25,27,26,27,27,25,26,24,23,23,23,22,22,21,20,19,17,16,15,14,12,10,9,7,6,5,5,4,4,4,4,3,3,3,3,4,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,6,7,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,4,4,4,4,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,6,6,6,5,4,4,4,3,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,6,6,7,7,7,6,7,7,7,7,6,7,7,6,6,6,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,3,4,7,6,7,9,9,8,9,10,11,13,15,16,19,19,17,15,19,18,16,20,17,20,20,20,23,23,21,21,22,22,23,23,23,20,22,23,22,19,19,23,22,19,22,21,21,22,23,20,19,22,21],[28,28,28,28,28,27,28,27,27,27,26,26,26,25,27,25,27,27,26,26,27,27,26,27,27,27,27,27,27,27,26,27,28,28,27,27,27,27,27,27,27,26,26,26,25,25,24,23,24,24,23,22,22,21,19,20,19,19,18,17,15,14,11,8,8,7,5,5,5,5,4,4,4,3,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,6,5,6,6,5,6,6,6,6,6,6,6,6,6,6,7,6,7,7,7,7,6,6,6,6,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,6,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,4,3,4,4,3,4,4,3,3,4,4,3,3,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,4,3,4,4,5,5,5,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,6,6,6,7,8,9,10,11,12,13,13,13,15,15,15,16,17,17,17,17,20,21,20,22,22,23,22,23,21,21,22,20,20,21,21,23,21,21,22,24,24,27,24,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,26,26,25,25,26,26,26,26,25,27,24,24,25,24,23,22,22,20,19,19,17,16,14,13,11,9,7,6,5,5,4,4,4,3,3,3,3,3,3,4,4,4,4,5,4,5,5,6,6,5,6,6,6,6,6,5,5,5,4,4,5,5,5,7,7,6,6,6,6,5,5,5,5,4,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,5,5,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,3,4,4,4,5,6,6,6,5,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,5,5,5,6,6,6,6,6,7,7,7,7,6,7,6,7,7,6,7,7,7,6,6,5,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,3,4,6,6,7,8,9,10,9,11,13,14,16,16,17,18,16,15,18,19,17,20,18,21,21,19,23,23,22,21,22,22,25,24,22,22,22,22,23,20,20,24,22,20,21,21,21,23,22,21,18,22,22],[28,28,27,28,28,27,28,27,26,27,25,26,27,25,26,26,26,27,26,26,27,27,26,27,26,27,27,27,27,27,26,27,27,28,26,27,26,27,28,27,27,26,25,26,26,25,25,24,24,23,23,22,22,21,19,20,20,18,17,18,15,14,12,10,9,8,7,7,6,6,5,5,5,4,5,5,5,6,6,5,5,6,5,5,6,6,5,6,6,6,7,7,6,7,7,7,6,7,7,6,7,8,7,7,7,8,8,8,8,9,9,8,8,8,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,6,6,6,6,7,6,6,6,6,7,6,7,7,6,6,6,7,6,6,7,6,6,6,7,7,7,7,7,8,7,7,7,7,7,6,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,5,4,5,5,4,4,5,6,6,6,5,6,6,6,6,7,6,6,6,6,6,6,6,5,5,6,5,5,5,6,5,5,5,6,5,5,5,6,4,5,5,5,4,5,6,6,7,7,6,6,7,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,4,5,4,4,3,3,4,3,3,4,4,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,5,6,6,6,7,7,7,8,10,10,11,12,13,14,13,13,15,16,17,17,18,18,19,19,21,22,21,23,22,23,23,24,21,21,21,20,20,20,21,21,19,21,23,24,24,26,24,25,25,25,26,26,26,26,26,25,26,26,26,26,26,26,26,27,26,26,25,26,25,25,26,25,26,26,25,26,25,25,25,24,23,22,22,20,20,19,17,17,15,13,12,10,8,8,7,6,6,5,5,4,5,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,8,8,7,8,7,7,6,6,6,6,6,7,7,8,9,8,8,8,8,7,6,7,6,6,6,6,5,5,5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,3,2,3,3,3,4,4,5,5,5,4,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,6,7,7,7,6,5,4,4,5,5,5,6,6,6,7,7,7,7,7,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,6,6,6,6,7,7,7,6,7,7,7,7,7,7,8,8,8,8,9,8,9,8,9,8,8,8,8,8,7,8,7,6,6,5,5,5,4,5,4,4,4,4,4,4,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,4,4,5,5,5,5,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,6,6,6,5,6,6,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,3,5,8,6,7,8,8,8,8,11,13,15,15,15,20,21,17,14,22,21,18,22,17,21,21,21,25,23,21,22,23,21,22,24,24,21,23,23,23,19,21,22,23,20,23,21,22,23,24,21,20,24,23],[28,28,27,27,27,27,27,27,26,26,26,26,26,26,25,26,25,26,26,26,26,26,26,27,26,26,26,27,27,26,26,26,27,27,26,26,26,26,27,26,27,26,26,25,25,25,24,23,24,23,23,22,22,22,19,20,19,19,18,18,16,14,12,10,9,8,7,7,7,6,6,5,5,4,5,5,5,6,6,6,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,9,9,8,7,7,7,8,7,7,7,7,7,7,6,7,7,7,6,7,7,6,6,6,6,7,6,7,6,7,6,6,7,6,6,7,6,6,6,6,6,7,7,6,6,6,7,7,7,8,7,8,7,7,7,7,7,6,6,6,6,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,6,6,6,6,6,7,7,6,6,7,6,7,7,6,7,7,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,5,5,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,3,4,4,3,3,3,4,4,4,4,4,4,4,3,3,4,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,6,7,7,8,9,10,10,11,12,13,14,14,13,16,17,15,17,18,18,18,18,19,21,20,21,22,22,22,23,21,20,21,20,20,20,20,21,21,21,23,23,24,25,24,25,26,26,26,26,26,27,27,27,27,26,27,26,27,26,27,26,27,27,26,26,24,24,26,25,26,26,25,26,24,23,23,23,23,22,21,20,19,19,17,16,14,13,11,9,8,8,6,6,5,6,5,5,5,5,5,5,5,6,6,6,6,7,6,6,7,8,7,7,8,8,8,7,7,7,6,6,6,6,6,7,7,8,8,8,7,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,4,3,3,3,3,3,3,3,3,2,3,2,3,2,3,3,3,4,4,5,5,5,4,4,3,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,8,7,7,6,6,5,5,5,6,6,6,6,6,7,8,7,7,7,8,9,8,8,8,7,7,7,7,6,6,6,6,6,5,6,5,5,5,5,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,8,7,7,7,7,7,7,7,7,8,9,9,9,9,8,9,9,9,9,8,9,9,8,8,8,7,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,5,6,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,5,6,5,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,2,3,5,7,6,7,9,9,8,8,9,11,13,13,14,18,18,15,15,19,19,15,21,17,20,20,19,24,22,22,21,20,21,23,22,22,21,20,23,22,18,17,22,22,18,22,19,21,21,24,20,18,22,21],[28,28,27,27,28,27,27,27,27,26,27,26,27,26,27,25,27,27,27,27,27,27,27,27,27,27,27,28,27,27,26,27,27,28,27,27,27,27,28,27,27,27,26,26,26,26,25,24,24,24,23,22,22,21,21,21,20,20,19,19,17,14,13,11,9,8,8,7,8,6,6,5,6,5,5,6,6,6,6,6,5,6,6,5,5,6,6,7,7,6,7,7,7,7,7,7,7,7,8,8,8,8,8,7,8,8,8,8,8,9,9,8,8,8,7,8,8,8,8,8,8,7,7,7,7,7,6,7,7,6,6,6,6,6,7,7,7,6,6,7,6,6,7,7,6,6,6,6,6,7,6,6,6,6,7,7,7,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,5,5,6,6,5,5,4,4,5,5,4,4,5,4,4,5,5,4,4,6,6,6,6,6,7,7,7,7,7,7,7,7,7,6,7,7,6,6,6,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,6,6,7,7,7,7,7,6,6,6,5,5,5,5,4,4,4,4,4,4,3,4,4,5,5,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,5,5,4,5,4,4,4,4,4,3,4,4,4,3,4,4,5,5,6,6,6,6,6,6,7,6,6,6,7,7,8,7,8,10,10,11,12,13,14,15,15,14,17,18,16,19,19,19,19,19,20,21,21,22,24,24,23,24,22,21,22,21,20,22,21,23,22,23,24,25,25,27,25,26,27,27,27,26,27,27,28,28,28,27,28,28,28,27,27,28,28,27,27,27,26,26,27,27,27,27,26,27,24,25,25,24,23,23,21,20,20,18,17,16,15,13,11,10,9,8,6,6,6,6,5,5,5,5,5,5,6,6,6,6,6,6,6,7,8,8,7,8,9,9,8,8,7,7,6,6,6,7,7,7,7,9,9,8,8,8,7,8,7,7,7,7,7,6,6,6,6,5,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,5,4,3,3,2,3,3,3,3,3,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,7,8,8,7,6,6,6,5,5,6,6,6,6,6,7,7,8,7,7,8,8,8,8,8,8,7,7,7,7,7,6,6,6,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,7,6,7,6,6,7,7,8,7,7,7,7,7,7,7,8,8,9,9,9,10,9,9,9,10,9,8,9,9,8,8,8,7,7,6,6,6,5,5,5,5,5,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,7,6,6,6,7,6,6,6,6,6,7,6,6,6,6,6,5,6,5,5,6,6,5,6,5,6,6,6,6,5,6,6,5,5,5,4,5,4,4,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,2,3,5,7,6,7,9,10,8,8,11,12,13,13,14,18,18,16,14,18,18,14,20,17,20,21,19,23,22,22,21,20,20,23,22,21,21,20,22,21,19,19,22,21,19,21,21,22,22,24,20,18,22,22],[28,29,28,28,29,28,29,28,27,28,27,26,28,26,27,26,28,28,27,27,27,27,27,28,27,27,28,28,28,28,27,28,28,29,28,28,27,28,28,28,28,28,27,27,27,27,26,25,26,26,24,24,25,23,22,23,21,21,19,19,17,15,13,11,9,8,7,7,7,6,6,5,5,4,5,5,5,6,6,6,5,6,6,5,6,5,6,6,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,8,7,8,8,8,8,9,9,8,7,8,7,8,8,8,8,8,7,7,7,7,7,7,6,7,6,6,6,6,6,6,6,7,7,6,6,7,7,6,6,7,6,6,6,6,6,6,6,6,6,6,7,7,7,7,8,8,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,4,5,5,5,4,4,5,4,5,5,6,6,6,6,7,7,7,6,7,7,7,7,7,6,7,7,6,6,6,5,5,5,5,5,4,5,5,4,5,5,5,4,5,5,5,4,5,6,6,7,7,7,6,7,6,6,6,6,5,5,5,4,4,4,4,4,4,3,3,3,5,5,5,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,5,4,5,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,5,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,6,8,8,8,10,11,12,12,14,15,16,15,15,18,19,17,19,20,20,21,22,23,24,24,24,25,26,24,26,23,22,24,22,22,24,23,24,23,24,24,26,26,27,26,27,27,28,27,27,28,28,28,28,28,28,28,28,28,28,27,28,28,28,27,27,26,27,27,27,27,27,27,28,25,25,25,25,24,24,21,22,21,19,18,17,15,14,12,10,8,8,6,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,8,8,8,7,8,9,9,8,7,7,7,7,6,6,6,7,8,9,9,9,8,8,7,7,7,7,7,6,6,6,6,5,5,5,4,4,4,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,4,4,5,5,5,4,4,3,3,2,3,2,3,3,3,2,2,3,2,2,2,3,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,7,8,8,8,7,6,5,5,5,5,6,6,6,6,7,8,8,7,8,8,8,8,8,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,5,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,8,9,8,8,9,8,9,8,9,8,8,9,9,9,8,8,7,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,3,4,3,4,4,3,4,4,4,4,5,5,4,5,5,5,5,5,5,5,6,6,5,6,6,6,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,5,5,5,6,6,7,6,6,6,6,6,6,6,5,6,6,5,6,5,5,5,6,4,5,5,5,6,5,6,6,6,6,6,5,6,6,5,5,5,6,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,0,1,3,4,7,6,7,9,10,10,9,11,13,14,15,16,18,18,16,16,18,19,16,21,18,20,21,21,24,23,23,22,22,22,24,24,23,23,22,22,23,20,21,23,22,20,22,21,21,23,23,20,19,22,22],[29,29,28,28,29,27,29,29,27,28,27,27,28,27,27,27,28,28,28,28,28,28,28,29,28,29,29,29,29,29,29,29,30,30,29,30,29,30,29,29,30,29,29,29,29,29,28,28,28,27,27,27,27,27,26,27,25,25,24,23,23,20,18,18,16,15,15,14,13,13,12,13,12,12,13,12,12,12,14,14,13,13,14,13,13,14,14,15,14,15,14,14,15,15,15,16,15,15,14,14,15,14,15,15,15,15,15,14,14,15,16,16,15,15,15,16,14,15,15,14,14,14,14,13,14,14,15,14,13,13,14,13,13,13,13,15,13,14,14,14,14,15,14,14,13,15,14,14,15,14,14,13,14,14,13,15,15,14,15,15,15,15,16,15,15,13,14,15,14,13,13,14,13,13,13,13,12,13,12,12,12,11,11,12,12,10,11,13,10,10,13,12,11,12,13,13,14,13,13,16,15,13,14,16,15,14,14,14,13,14,14,14,12,14,14,11,14,13,12,11,13,14,11,12,13,13,10,12,13,13,10,12,12,12,12,14,13,12,12,12,12,12,13,12,13,10,10,12,10,9,9,8,7,8,8,9,9,9,8,7,8,9,8,8,9,9,8,9,10,10,10,10,11,10,11,12,10,11,11,12,11,12,11,12,12,10,10,11,11,9,10,11,9,8,10,11,8,8,10,12,10,10,10,9,10,10,8,9,9,8,7,9,9,9,7,9,9,10,10,11,10,11,12,12,12,12,12,13,12,13,13,15,14,14,16,17,17,19,18,19,20,20,21,22,22,22,24,24,23,24,25,26,27,26,27,27,28,27,28,26,26,26,24,23,25,25,25,25,25,26,28,27,27,27,28,27,27,28,28,28,28,28,28,28,28,28,28,29,28,28,28,29,29,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,26,27,25,24,24,21,23,19,19,18,15,15,15,13,13,13,12,11,13,11,11,11,11,11,11,12,12,12,12,12,12,13,14,14,14,16,15,16,14,13,13,12,12,13,13,13,14,15,16,16,15,15,16,15,13,14,14,13,12,13,13,11,11,11,11,11,11,9,10,8,8,9,7,5,7,7,6,6,7,6,6,7,7,7,8,8,9,8,8,7,5,6,5,6,6,6,8,7,5,6,6,5,4,6,6,5,6,8,7,8,9,8,9,10,9,9,10,10,12,11,12,13,12,12,11,12,12,13,13,14,14,13,12,12,13,13,13,15,14,13,14,15,16,15,16,14,15,15,16,15,15,15,15,15,14,14,15,15,14,13,13,13,13,13,13,13,12,11,12,10,11,11,8,8,10,9,7,9,8,7,7,7,7,5,5,7,6,5,8,8,7,8,9,8,9,9,10,12,10,10,10,10,13,11,14,12,12,13,12,10,13,12,12,13,14,13,13,15,14,15,14,14,15,14,15,15,15,14,14,15,15,15,15,15,15,16,15,16,16,16,17,16,15,15,16,15,14,14,14,14,13,14,13,13,13,12,12,13,11,12,12,11,12,11,12,9,12,11,10,8,10,10,10,8,10,9,10,12,12,11,12,11,13,12,12,11,12,12,11,11,12,13,12,12,12,13,13,12,12,12,11,12,12,12,11,11,11,11,11,11,11,11,12,11,12,11,12,13,13,13,12,13,13,11,13,13,13,12,13,13,11,12,12,13,13,14,11,12,11,11,12,11,12,12,12,12,12,12,12,14,11,11,11,13,11,10,10,9,9,10,9,8,9,8,7,7,6,6,6,4,4,4,4,2,2,0,1,4,7,6,8,9,10,10,10,13,16,16,16,17,21,20,17,18,23,21,18,22,20,21,23,22,24,23,22,23,24,24,24,26,24,22,25,25,25,21,24,25,25,23,25,23,23,24,25,22,21,24,24],[27,28,27,28,29,27,28,29,27,28,28,28,29,27,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,28,28,27,27,26,25,24,24,25,25,24,24,23,22,22,22,22,22,23,23,24,24,22,23,24,22,21,23,23,26,25,23,26,25,23,26,25,25,22,25,25,23,25,25,26,24,25,24,24,24,24,23,24,25,25,25,25,25,24,25,25,23,24,25,25,24,25,23,25,26,24,22,24,25,22,20,24,22,22,23,24,25,24,23,25,25,22,25,25,23,22,25,25,22,24,25,25,25,26,25,24,24,26,25,26,25,25,24,24,26,23,24,25,25,23,24,25,23,23,25,24,20,23,22,19,22,22,20,20,23,21,19,21,21,21,20,22,20,22,22,20,22,23,22,22,23,23,22,23,22,22,23,23,22,22,24,23,22,23,24,22,21,22,24,21,21,22,23,21,22,23,22,21,22,22,22,23,23,23,23,23,24,24,24,22,23,24,21,18,21,20,19,17,18,16,15,15,17,18,16,13,14,14,18,16,13,16,19,17,16,21,20,18,21,21,19,20,21,21,21,20,22,21,20,21,21,22,20,19,21,20,18,21,22,19,17,20,20,17,17,19,22,21,21,21,18,21,21,17,19,21,19,18,21,21,19,18,21,20,22,21,22,20,22,22,21,22,23,23,22,23,24,24,25,23,23,24,26,26,25,26,26,26,27,27,28,27,28,29,28,28,29,28,29,30,29,29,29,29,29,30,29,29,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,27,27,28,26,25,26,24,23,24,22,23,25,23,22,22,22,21,22,21,21,22,22,21,23,22,22,22,23,25,23,24,25,24,24,23,22,22,20,19,22,22,24,24,24,24,24,23,24,25,24,24,26,25,23,23,25,25,22,22,23,22,21,22,22,20,19,16,20,20,16,17,19,15,14,18,16,15,15,19,15,14,15,16,14,14,11,12,13,11,14,12,15,16,13,11,12,13,10,9,12,11,9,10,14,12,14,14,13,18,20,20,20,20,21,22,21,20,21,20,19,21,21,18,21,20,20,20,21,19,21,20,21,23,22,22,24,24,25,26,25,25,25,25,25,26,25,26,24,25,27,25,25,27,25,23,23,24,21,20,23,22,20,20,21,21,19,20,21,18,16,20,18,16,15,18,16,11,15,17,12,12,15,10,12,14,13,8,11,15,14,12,18,18,18,18,18,19,20,20,20,22,20,20,22,21,19,23,23,22,24,24,23,25,25,25,25,24,24,26,25,26,26,25,24,25,26,25,25,26,25,24,25,24,25,26,24,25,25,24,25,25,24,24,24,23,24,24,25,23,24,22,21,23,22,21,22,21,20,19,21,21,20,19,20,19,17,19,21,20,17,18,16,19,20,21,21,21,21,20,20,20,20,22,21,22,21,23,23,22,24,22,24,23,24,24,22,22,24,23,20,22,23,21,20,22,22,21,21,23,21,21,22,21,21,21,23,23,21,21,21,22,23,24,23,22,24,22,24,22,24,23,23,23,21,22,21,22,22,22,22,22,21,20,21,21,21,19,19,18,20,18,18,17,17,18,18,19,18,19,13,13,13,10,9,10,10,7,6,7,6,4,2,0,2,3,5,7,9,12,11,10,15,18,19,20,20,23,23,21,21,25,22,21,23,23,23,25,24,25,25,25,24,26,26,26,26,26,25,26,26,27,24,24,27,26,25,26,25,25,26,27,25,23,26,26],[28,29,27,28,29,28,29,29,28,28,28,29,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,28,28,27,26,27,26,27,27,25,26,26,24,25,23,24,26,26,25,26,27,24,26,27,25,25,27,26,28,27,26,28,28,26,28,27,27,26,27,27,26,27,27,27,26,27,26,26,25,26,25,26,27,27,27,27,26,26,27,26,26,26,26,26,25,26,25,26,26,26,24,25,26,24,22,24,24,27,25,27,27,26,26,27,26,25,27,26,26,25,27,26,25,26,27,26,27,28,26,27,26,28,28,27,28,28,27,27,28,26,27,27,27,25,25,26,25,24,25,25,22,25,24,21,24,25,22,22,25,24,21,24,24,23,21,24,23,25,24,23,25,26,24,25,27,26,26,26,25,25,26,26,26,24,27,26,24,26,26,25,23,25,26,24,23,25,26,23,23,25,25,21,25,24,26,25,26,25,24,25,24,25,25,24,25,25,22,21,24,23,22,21,21,19,17,16,20,20,18,16,16,16,22,20,15,19,22,20,20,24,23,21,23,24,22,23,25,23,24,24,25,24,24,23,24,24,23,22,24,23,22,22,24,22,21,22,23,20,19,22,24,22,23,23,22,22,23,21,22,22,23,19,23,22,21,19,23,22,22,23,22,22,24,24,22,24,25,26,25,26,24,26,26,26,26,26,27,27,27,28,28,28,28,28,29,28,29,29,30,29,30,29,30,30,29,30,30,30,30,30,30,29,29,29,28,29,28,29,29,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,28,28,27,26,26,25,24,26,25,25,26,25,25,23,24,22,23,23,24,24,24,23,25,24,24,25,25,26,25,25,26,25,25,25,23,23,22,21,24,23,24,24,25,26,26,25,26,26,26,26,26,25,26,25,26,25,25,24,24,24,24,23,23,21,21,20,21,20,18,20,20,17,15,20,19,15,16,18,17,14,14,17,16,13,11,12,14,12,16,15,17,20,17,13,14,15,14,11,15,15,11,13,17,15,18,19,19,20,24,22,23,23,24,24,23,24,24,23,22,24,24,23,25,24,24,24,24,24,24,24,24,26,26,25,26,26,27,27,27,27,27,27,27,27,27,28,27,27,27,27,27,27,28,27,26,27,25,25,25,25,24,23,24,23,22,22,23,22,21,22,21,19,20,20,20,15,18,18,15,14,18,14,12,18,18,14,17,20,19,19,22,22,23,22,23,23,23,24,23,24,24,24,24,24,24,25,26,25,27,26,26,26,26,27,27,27,27,27,27,27,28,27,27,27,27,27,27,27,27,26,27,26,26,27,26,27,26,26,26,27,26,26,27,25,26,25,27,26,26,25,25,26,24,23,25,25,22,22,24,23,23,24,22,22,22,23,22,22,22,22,22,25,24,25,25,24,24,24,24,24,22,25,25,25,24,26,27,24,26,25,26,26,26,26,25,26,27,24,23,25,26,23,23,25,24,23,24,25,23,25,24,25,25,25,25,26,24,24,25,26,25,27,26,25,26,25,26,24,26,25,24,24,23,23,24,24,24,24,25,24,23,24,24,24,25,22,24,22,24,23,21,22,22,21,22,21,20,20,18,16,15,14,13,11,11,10,8,7,7,7,3,1,0,2,4,5,7,9,9,9,14,16,17,20,20,23,23,20,20,24,22,19,23,20,22,24,22,25,25,24,23,26,25,25,26,26,25,25,26,27,24,24,26,26,26,25,25,25,26,26,25,23,25,26],[28,29,27,29,29,28,30,30,28,29,29,29,30,29,30,29,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,30,30,30,30,30,30,30,29,28,28,28,28,28,29,28,28,29,28,27,28,25,27,28,28,28,29,29,27,28,29,28,26,28,28,29,29,28,29,29,29,29,28,29,28,29,29,28,29,29,28,28,29,28,27,27,28,27,28,29,29,29,29,28,28,28,29,27,27,29,28,26,27,27,27,27,27,26,25,27,26,26,25,26,26,27,28,27,27,28,29,27,26,29,28,27,28,29,29,26,29,29,29,29,29,28,29,28,29,29,29,29,29,29,29,29,28,29,29,29,27,27,28,27,26,27,26,25,26,25,24,25,26,25,25,26,26,24,26,25,26,24,25,26,25,26,25,26,27,26,26,27,28,28,27,27,28,27,27,27,27,28,26,26,28,28,26,25,28,27,26,26,27,27,25,26,27,27,24,27,28,27,27,28,27,27,26,26,28,27,26,26,27,25,24,25,26,24,24,24,21,21,19,22,22,20,18,17,20,24,22,19,24,25,24,23,26,26,25,26,26,26,26,27,26,26,27,27,26,26,27,28,27,25,25,27,25,25,26,27,25,24,25,26,24,23,25,26,26,27,26,26,27,26,25,27,26,26,24,27,26,25,25,26,26,27,26,26,27,27,27,27,27,28,28,28,28,28,28,28,27,28,28,29,29,28,29,29,29,29,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,30,29,30,29,30,30,29,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,31,31,31,30,30,30,30,31,31,30,30,30,30,30,30,31,31,30,31,30,30,30,30,30,30,30,30,29,29,29,29,28,28,29,27,27,29,28,28,28,28,28,27,27,27,27,27,27,28,27,27,27,27,27,27,27,27,27,28,28,27,27,26,26,25,25,23,26,27,27,27,27,27,28,26,28,28,28,28,28,27,28,28,28,28,27,27,27,27,27,27,26,26,25,23,25,25,21,22,24,20,20,23,21,17,19,21,18,14,13,18,17,15,13,15,17,16,21,18,22,23,21,17,16,20,17,15,17,19,15,15,19,19,23,23,23,25,27,25,26,27,28,27,26,27,27,26,27,28,28,26,28,27,27,27,27,27,28,27,27,28,27,27,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,27,28,28,28,27,27,27,26,26,26,26,25,25,26,25,23,24,25,23,20,22,22,20,18,22,19,18,22,22,18,22,24,24,23,25,26,26,26,27,27,28,28,27,27,28,28,27,27,27,28,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,29,29,28,29,29,28,28,29,27,28,28,27,28,28,29,29,29,28,28,28,27,27,28,28,25,26,27,26,26,27,27,27,26,27,27,27,26,27,26,27,28,29,28,27,28,28,28,27,26,28,28,28,27,29,28,27,28,28,29,28,28,29,28,28,29,28,27,28,28,27,27,28,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,28,28,27,28,27,28,28,27,27,27,27,27,26,27,28,27,27,27,28,27,27,27,26,28,26,28,27,26,26,25,25,25,25,23,23,22,20,19,18,16,15,15,13,12,12,12,10,8,4,2,0,1,4,7,7,8,8,11,13,16,18,22,23,24,21,20,24,23,19,23,19,22,25,23,25,26,23,25,27,25,26,28,27,24,26,27,26,22,23,27,27,24,26,24,25,25,26,24,23,25,25],[26,28,27,28,28,28,29,28,28,29,28,28,29,28,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,31,31,30,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,29,29,29,29,28,27,28,27,28,28,27,29,28,27,28,27,27,28,28,28,28,29,27,28,29,28,26,28,28,29,29,27,29,28,28,29,28,28,28,29,28,27,28,29,28,28,29,28,28,28,28,28,28,28,28,29,29,28,28,29,28,28,28,29,28,27,28,27,27,28,28,25,26,27,25,26,26,26,26,26,27,28,27,28,28,28,26,29,28,27,27,29,28,26,28,29,28,29,29,28,28,28,29,29,29,29,29,29,28,29,28,28,29,29,27,27,28,27,26,27,27,26,27,26,25,25,26,25,25,26,25,24,26,24,25,24,25,25,25,25,24,25,26,25,26,26,27,26,27,26,27,27,27,27,26,28,26,25,28,28,26,25,28,27,25,26,28,27,26,27,28,27,26,27,27,27,27,27,27,27,27,27,27,27,27,27,28,26,25,26,27,24,23,25,22,21,18,23,24,20,18,16,19,24,22,18,22,23,23,21,25,26,21,24,24,25,24,25,24,24,25,26,24,26,26,27,27,24,25,27,25,24,26,27,25,24,26,26,23,23,25,26,26,27,26,25,26,27,25,26,26,26,23,27,26,24,22,26,25,27,26,26,26,27,27,26,28,28,28,28,28,28,28,27,27,27,27,28,28,28,28,28,29,29,29,29,29,30,30,30,30,30,29,30,31,30,30,30,30,30,31,30,29,29,29,29,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,30,31,30,31,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,29,30,29,29,29,28,28,28,27,27,27,27,27,28,27,28,26,27,26,26,26,26,28,26,26,26,26,26,26,27,26,26,26,27,26,26,25,25,24,24,23,25,26,27,27,27,27,26,25,27,28,27,26,28,28,27,27,28,28,27,26,27,27,26,27,26,26,24,22,25,24,21,22,23,20,20,21,20,17,17,17,16,13,13,17,15,15,12,15,16,16,20,17,22,23,23,18,17,21,18,15,15,19,15,15,17,18,20,21,22,24,25,24,26,25,26,26,26,26,26,26,26,27,27,26,26,26,25,25,26,26,26,26,26,27,26,26,28,28,28,29,28,29,28,28,28,28,28,29,28,28,29,29,28,29,29,29,29,29,27,28,29,28,26,27,28,26,26,26,25,26,25,26,25,22,24,25,24,20,23,24,20,18,23,18,18,23,22,17,22,23,22,21,24,25,24,24,25,25,27,26,26,27,27,27,27,27,26,28,27,28,28,28,29,29,28,29,28,29,28,29,28,29,29,29,28,29,28,29,29,29,29,28,28,27,28,28,28,28,28,28,28,28,27,28,28,27,28,27,29,28,29,28,28,28,27,26,27,28,25,26,27,27,26,26,27,26,25,27,26,27,25,26,25,26,27,27,27,27,27,26,27,25,27,27,26,28,28,28,28,28,28,27,29,27,28,28,28,28,28,28,27,28,28,27,27,27,27,27,28,27,27,28,26,26,27,25,28,27,26,26,27,28,28,28,28,27,28,28,27,27,28,28,27,26,27,26,26,26,26,27,26,26,25,26,26,25,26,25,25,25,26,24,25,24,23,24,24,22,21,23,20,19,20,19,15,15,16,13,11,10,12,11,7,6,5,2,0,2,4,5,8,7,11,11,14,16,18,19,21,18,15,22,21,18,22,18,22,22,21,24,23,22,23,24,24,23,25,24,22,24,25,23,20,21,25,25,21,25,22,24,25,26,22,20,24,23],[27,28,27,29,29,28,29,29,28,29,29,29,29,28,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,28,28,27,27,28,29,27,27,28,28,27,27,26,26,28,28,28,28,28,27,28,28,28,27,28,28,28,28,28,28,28,28,29,29,29,28,29,28,28,29,29,28,28,29,29,28,27,28,28,28,28,29,29,29,29,28,29,28,28,28,29,28,27,27,28,27,27,27,25,26,27,25,25,25,24,25,25,27,26,26,28,28,27,26,29,28,27,28,29,28,27,28,29,28,28,29,28,29,28,29,29,29,28,29,28,28,29,28,29,28,28,27,27,28,27,25,27,26,24,25,24,21,24,25,21,23,25,24,22,24,24,23,22,24,24,24,24,24,24,25,24,25,26,26,26,26,25,27,27,27,26,25,28,26,25,27,28,25,25,27,27,24,26,27,26,24,26,27,26,24,27,26,27,27,27,27,26,26,25,27,26,24,25,26,24,22,24,24,22,22,22,20,19,18,21,22,19,17,17,18,22,21,18,21,22,21,21,23,23,21,23,24,24,24,25,23,23,25,25,24,26,24,27,26,23,24,26,24,23,25,26,22,22,24,25,22,22,24,26,25,26,25,24,25,25,23,25,25,24,22,25,24,24,20,24,25,25,25,25,25,27,26,25,26,27,27,26,27,27,27,27,27,26,27,28,28,28,28,27,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,28,27,27,27,26,27,27,26,26,26,27,26,25,23,26,25,24,25,26,26,25,26,25,26,26,26,26,25,26,25,25,23,22,21,24,25,25,25,26,25,26,25,27,27,27,25,26,27,26,27,26,27,26,25,26,26,25,26,24,23,23,21,22,22,20,20,20,18,16,18,18,14,16,16,14,12,10,15,14,13,11,13,15,15,20,17,20,22,20,16,16,19,17,14,15,17,15,15,17,19,19,21,21,23,24,22,24,24,24,25,25,25,25,26,25,27,27,24,27,26,26,26,26,25,25,26,25,28,26,27,28,27,28,28,28,28,28,28,28,28,29,28,28,28,28,29,29,28,29,28,28,29,27,27,28,27,25,26,27,25,23,25,25,23,23,25,24,22,23,23,22,20,21,21,20,17,21,17,17,21,22,16,21,22,22,20,23,24,23,23,24,24,26,26,24,25,27,27,26,27,26,28,28,27,29,28,28,28,28,28,28,28,28,28,29,28,29,29,28,29,28,29,28,29,29,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,27,28,28,28,28,28,27,28,27,25,27,27,24,25,27,25,25,26,26,25,24,26,26,26,24,26,25,26,26,27,27,26,27,26,26,26,26,27,27,26,27,28,28,27,28,27,28,27,27,27,26,27,28,27,27,27,27,26,26,27,26,26,26,27,27,27,27,27,27,27,27,27,27,27,26,27,28,27,27,27,27,26,27,26,27,27,27,26,26,26,26,26,27,26,26,26,26,26,26,26,26,25,26,26,27,25,24,24,22,22,22,21,20,21,20,17,16,17,14,14,14,13,10,10,11,10,8,7,6,4,2,0,1,2,5,4,6,6,8,9,10,12,15,12,11,16,16,13,18,15,19,20,20,23,21,20,21,22,22,21,24,24,21,23,25,23,20,20,24,25,21,25,22,22,23,24,22,19,23,20],[27,28,27,28,28,27,28,28,28,28,27,28,29,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,30,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,27,28,27,27,28,26,28,27,26,27,26,26,28,27,27,27,28,27,28,28,28,27,28,28,28,29,28,28,28,28,29,28,29,28,28,28,27,28,28,28,27,29,28,27,27,27,27,28,28,28,28,28,28,28,28,27,27,27,27,27,26,27,27,25,27,27,24,25,27,24,23,24,23,25,24,27,25,26,27,27,26,25,29,27,26,28,28,27,26,28,27,27,28,29,28,28,28,29,28,28,28,28,28,27,28,28,28,28,28,26,26,27,26,23,26,25,24,25,24,21,24,24,21,23,25,23,21,25,24,22,22,24,24,26,25,24,26,26,25,25,27,27,28,27,26,27,27,26,26,26,28,26,24,27,27,24,23,27,26,23,24,27,25,23,26,27,25,24,27,25,26,25,26,26,26,25,25,26,26,24,24,25,25,23,23,25,21,21,21,20,19,18,21,21,19,18,16,20,21,20,16,18,21,20,20,23,23,20,23,24,24,23,25,23,24,25,25,23,26,25,27,26,23,24,26,23,21,24,25,23,21,24,23,22,20,24,25,25,25,24,23,24,24,22,24,23,24,22,24,23,21,21,23,24,23,23,23,24,25,25,24,26,26,27,26,27,26,27,26,27,26,27,29,29,28,28,29,29,28,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,29,28,28,29,28,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,27,26,28,26,26,26,26,26,26,26,25,25,23,24,23,24,24,23,24,24,23,23,24,24,24,24,24,26,25,24,25,23,23,21,21,20,22,22,23,24,24,24,25,24,26,26,26,25,26,26,25,25,25,26,25,25,25,25,25,23,23,23,22,21,22,21,20,21,21,19,18,19,17,15,16,16,13,13,10,12,14,12,12,15,17,15,20,18,20,20,20,18,17,19,18,14,15,19,13,13,17,19,20,20,20,22,23,21,23,24,25,26,25,25,25,25,25,27,26,25,27,25,26,26,26,25,25,26,26,27,26,26,28,28,29,28,28,28,29,28,29,29,29,28,28,28,28,29,28,28,29,29,28,29,28,27,28,27,25,26,27,24,24,25,24,23,22,24,24,21,21,23,21,21,21,21,19,18,22,17,19,21,21,17,21,23,21,20,22,23,24,21,23,23,24,24,24,25,26,26,27,27,25,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,29,28,28,28,28,28,28,29,28,28,28,29,28,28,28,28,29,28,28,28,28,27,28,27,28,27,28,28,27,28,27,26,27,27,25,26,26,26,24,25,25,24,22,24,24,24,24,24,24,24,25,25,24,26,24,24,25,25,25,26,27,26,27,28,28,27,27,27,28,27,27,27,27,27,27,28,25,27,27,26,26,27,26,24,26,26,24,25,26,25,26,26,27,27,26,26,26,27,27,27,27,26,27,26,26,26,27,26,26,25,25,24,24,25,25,25,25,25,24,25,24,24,25,22,24,23,24,24,24,23,23,24,24,22,22,22,21,20,18,19,16,16,16,13,10,11,11,11,8,7,6,4,2,1,0,1,2,2,4,5,8,8,11,12,16,11,12,16,17,13,17,13,16,17,19,19,19,19,20,21,21,21,24,22,20,21,24,22,21,19,22,23,21,23,20,21,20,22,19,18,19,19],[27,28,27,28,28,28,29,29,28,28,27,27,28,28,29,28,29,28,29,30,29,29,30,29,29,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,31,31,30,30,30,30,29,30,30,30,29,30,30,29,29,29,29,27,28,27,28,28,28,28,27,28,28,26,27,24,26,28,28,27,28,29,26,28,28,28,27,28,28,28,29,28,29,29,28,28,29,29,28,29,29,29,29,29,29,28,28,29,28,28,28,27,28,29,29,29,29,29,28,28,28,28,27,28,27,26,28,27,25,27,28,25,25,28,26,24,25,24,27,25,28,27,26,28,28,28,26,29,28,27,28,28,28,27,28,28,28,28,29,28,29,29,29,29,29,28,29,28,28,29,28,28,28,28,27,27,27,27,24,25,25,24,26,23,22,23,25,20,22,24,23,20,22,24,21,21,22,21,24,23,22,24,26,24,24,27,28,27,28,25,27,28,28,26,25,28,26,24,28,28,25,24,27,27,24,26,27,26,23,26,27,25,23,27,25,27,25,27,27,26,25,25,27,25,24,25,25,23,22,22,23,22,21,21,19,19,18,20,20,18,17,18,18,20,19,19,20,22,19,21,22,22,20,22,24,23,21,24,22,23,24,25,23,26,24,27,26,22,23,25,24,21,24,25,22,21,23,24,21,21,24,26,24,25,24,23,25,24,23,24,24,24,24,25,24,23,21,25,24,25,24,23,24,25,25,23,25,25,26,26,26,27,26,27,27,27,28,28,28,28,28,28,29,28,29,29,29,29,29,29,29,29,29,30,30,30,29,30,30,30,30,29,29,29,28,28,28,29,28,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,29,30,29,29,29,29,28,28,26,27,27,25,26,27,26,26,26,25,26,24,26,26,25,26,25,25,24,24,26,25,23,25,24,25,25,26,26,25,26,23,22,21,23,21,22,23,23,23,24,25,26,24,27,27,27,26,25,26,25,25,26,26,25,24,25,25,24,24,23,24,24,22,23,23,23,22,22,20,21,21,19,16,16,15,13,13,9,13,14,13,13,17,17,18,21,18,20,20,20,18,18,20,19,16,16,17,15,15,16,19,18,19,19,22,21,22,23,23,23,25,24,25,25,26,25,28,27,25,27,28,26,26,25,23,24,26,25,28,26,26,29,28,29,28,28,28,29,28,29,28,28,28,28,28,29,29,29,28,29,29,29,29,27,27,28,28,25,27,27,25,23,25,25,23,22,24,24,21,22,23,21,22,22,23,21,20,23,19,20,22,22,18,22,22,22,20,22,23,23,23,23,24,24,25,25,25,27,27,26,27,27,28,28,27,28,28,28,28,28,28,28,28,28,28,29,28,29,28,28,28,29,29,29,28,29,28,29,28,28,29,28,28,29,28,28,28,28,28,28,27,28,27,28,28,28,28,27,28,27,25,27,27,23,25,26,25,24,25,25,23,23,25,24,26,25,25,24,25,26,26,25,26,27,25,26,27,25,27,27,27,26,28,29,27,27,28,28,27,27,27,25,27,28,26,25,27,27,24,24,27,26,24,26,26,25,26,26,27,28,27,28,27,26,28,26,26,27,27,27,27,27,26,27,26,26,25,25,26,24,25,25,24,25,25,25,26,24,26,25,24,27,23,25,22,24,25,23,23,23,24,23,21,22,22,22,19,20,21,16,16,18,15,10,12,13,12,9,8,6,6,4,3,1,0,1,2,3,5,8,7,9,11,13,12,11,14,14,13,17,14,17,19,18,21,20,20,20,23,21,20,24,22,21,21,24,22,20,18,23,23,20,24,18,21,21,22,19,16,19,19],[25,27,26,27,27,27,28,28,28,28,28,28,28,28,29,28,29,29,29,29,29,29,29,29,29,30,30,29,30,30,29,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,29,29,29,29,29,27,28,28,28,28,28,28,28,28,28,26,27,24,26,28,28,28,28,28,26,28,29,27,27,28,29,28,29,28,29,29,28,28,29,29,28,29,29,28,29,29,29,28,29,29,29,28,28,28,29,29,29,29,29,29,28,29,28,28,28,28,27,27,28,27,25,28,28,25,26,28,25,24,25,25,26,25,28,28,26,27,28,28,26,28,28,27,27,28,28,27,28,29,29,29,29,29,29,29,29,29,29,29,29,28,28,29,28,28,28,28,27,27,28,27,24,27,26,25,27,23,23,25,25,21,23,25,23,23,23,24,22,22,24,24,24,24,23,25,26,24,25,26,28,28,27,26,27,28,28,27,25,28,26,24,27,28,25,24,27,27,24,25,28,26,23,26,27,25,24,26,26,27,27,28,26,27,26,26,26,26,25,26,25,24,24,24,23,23,23,22,22,21,20,21,21,19,19,19,19,21,20,20,21,22,21,22,22,21,20,22,25,22,22,24,22,23,25,26,23,26,24,27,27,23,23,25,24,22,23,25,23,23,24,24,23,23,25,26,25,27,25,24,26,25,24,24,25,25,23,24,24,24,21,24,23,26,24,24,26,26,24,24,25,26,26,25,27,28,26,27,26,27,28,28,27,28,27,28,28,28,28,29,29,28,29,29,29,29,29,30,30,29,29,29,29,29,30,28,28,29,28,28,28,28,29,28,28,28,28,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,29,29,28,28,25,27,26,25,27,27,26,27,26,26,26,23,26,24,23,23,25,25,23,24,25,25,22,24,24,25,23,24,26,24,24,22,22,21,22,20,20,23,22,23,25,24,25,25,26,27,26,25,25,26,25,25,26,26,25,24,26,25,24,25,23,24,22,21,22,22,21,21,21,19,17,19,17,15,13,15,12,10,9,13,13,13,13,15,18,18,22,20,21,22,20,19,18,19,19,16,16,18,14,16,17,19,19,19,20,22,22,22,23,23,23,25,24,24,25,27,25,28,27,26,27,27,25,25,26,24,25,26,26,27,26,27,28,28,29,29,29,29,29,29,29,28,28,28,29,28,28,29,29,29,29,29,29,29,28,28,28,28,26,26,27,25,23,24,25,23,23,24,24,23,22,24,22,22,21,22,21,19,21,18,20,21,22,19,21,22,22,21,22,22,22,22,23,23,25,25,25,25,27,26,27,28,26,28,28,28,29,29,28,28,28,28,29,28,29,29,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,28,29,29,29,29,28,28,28,29,28,28,28,28,28,28,28,27,28,26,26,27,27,24,25,26,25,24,25,25,24,23,25,25,25,24,25,23,24,25,25,24,25,26,24,25,26,25,27,27,27,26,28,28,27,27,28,28,28,26,28,26,27,28,26,25,27,27,25,25,27,26,25,25,27,25,25,26,25,27,25,27,26,26,27,26,27,28,27,27,27,27,26,26,27,27,25,26,27,25,26,25,24,26,26,26,26,25,24,25,24,25,23,23,23,23,23,22,20,21,23,23,19,20,21,20,16,18,19,15,14,15,14,12,11,13,13,11,10,10,8,6,4,3,1,0,1,3,5,7,7,8,10,12,9,10,13,12,12,16,14,18,18,18,19,20,18,18,19,20,18,21,21,20,19,23,21,19,19,22,23,20,23,18,20,19,22,19,16,19,18],[26,27,27,28,28,28,29,28,29,29,27,28,28,28,29,28,29,28,29,29,29,29,30,29,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,28,29,29,28,28,28,27,28,27,27,27,27,28,28,27,27,25,26,27,27,27,27,28,27,27,28,27,26,27,28,28,28,28,28,28,28,28,28,28,27,28,28,27,28,28,28,27,28,28,28,27,27,27,28,27,28,28,28,28,27,28,27,26,27,27,26,27,27,26,25,27,27,23,25,27,24,22,23,23,26,24,26,25,25,27,28,26,24,28,27,25,27,28,28,26,28,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,27,28,28,28,25,26,27,25,24,26,25,24,25,23,23,24,25,22,23,25,23,23,24,25,22,23,24,22,24,25,23,25,26,25,24,26,26,27,27,25,27,26,27,27,24,28,25,23,27,27,24,23,27,27,23,25,27,24,22,26,27,24,24,26,25,26,26,27,25,25,25,24,25,26,24,23,25,24,23,24,25,21,22,22,23,20,20,22,22,18,17,18,20,22,22,20,21,22,22,21,22,23,21,23,24,24,23,24,22,23,25,26,23,26,23,27,26,22,23,26,23,21,25,25,22,22,24,24,23,21,24,25,26,25,25,23,25,25,23,24,23,24,23,24,24,22,20,21,22,23,23,23,23,25,25,24,25,25,26,27,27,26,26,25,26,26,27,28,27,26,28,28,27,28,29,28,27,28,28,28,28,29,28,29,29,29,30,30,30,30,30,29,29,29,29,28,28,29,28,28,28,29,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,29,29,30,29,29,29,28,28,28,26,26,26,25,25,26,24,26,26,25,24,22,23,23,22,22,22,22,22,21,22,21,22,22,22,23,22,24,24,22,22,20,20,18,21,18,20,21,21,21,21,21,23,22,25,24,24,23,23,24,24,23,24,24,23,24,23,24,23,23,22,22,22,20,21,21,20,19,20,19,17,17,16,14,14,13,11,11,9,11,13,13,12,15,17,18,21,19,22,22,21,21,18,20,19,16,17,18,16,17,17,20,19,20,20,21,21,21,23,23,23,24,24,24,25,26,25,28,27,25,26,26,25,26,25,23,24,26,25,27,25,25,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,28,29,28,29,28,28,28,27,25,26,27,24,23,25,25,23,22,25,23,21,22,23,22,20,22,21,20,18,20,18,19,21,21,18,20,22,22,20,22,23,22,22,22,23,25,24,23,24,25,25,26,27,26,27,27,28,27,28,28,28,28,28,28,28,29,28,28,28,29,28,28,28,28,28,28,28,28,28,27,27,28,29,28,28,27,28,29,28,27,28,28,28,27,27,28,28,28,28,27,28,27,26,27,27,23,25,26,25,23,24,24,23,23,25,24,24,23,22,22,25,24,23,23,25,24,24,26,25,25,26,26,26,26,26,27,27,27,27,28,27,26,27,27,27,27,27,26,27,26,25,25,26,25,24,25,26,24,25,24,24,25,25,27,26,24,25,26,25,26,27,26,26,27,25,25,25,27,26,26,25,25,22,23,24,24,26,24,23,23,24,23,23,22,22,23,22,22,21,21,22,19,21,22,20,19,21,19,17,17,18,16,13,16,15,11,10,13,13,9,8,8,7,6,4,3,3,1,0,1,3,4,4,6,7,8,8,8,10,11,10,14,12,15,17,18,19,19,19,18,19,19,18,20,20,20,18,21,20,20,17,20,20,19,21,18,19,18,20,18,16,18,18],[26,26,26,26,27,27,27,28,28,27,27,26,27,27,28,27,28,28,28,29,28,28,29,29,28,29,29,29,29,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,29,29,29,29,28,29,28,28,27,28,27,28,28,28,27,28,27,28,25,27,24,25,27,28,27,28,28,26,27,27,27,26,27,27,27,28,28,29,29,28,28,29,29,27,29,29,28,28,28,29,27,28,29,28,28,28,28,29,28,28,28,28,28,28,29,28,28,28,28,26,27,28,27,25,27,27,24,25,27,23,23,24,24,27,25,28,27,25,27,28,26,26,28,27,26,27,28,28,27,28,27,27,28,29,28,28,28,29,28,29,28,28,28,28,28,28,27,27,27,26,26,27,26,24,24,23,23,25,23,21,22,24,21,22,23,23,22,22,23,23,22,23,23,24,24,24,25,27,25,25,26,27,27,28,26,27,27,27,27,25,27,25,25,26,27,23,24,26,26,23,24,27,24,22,25,27,24,24,26,25,27,27,27,25,26,25,24,25,24,24,23,24,23,23,23,24,22,21,22,21,20,21,20,21,19,18,18,20,20,21,20,20,21,22,22,22,23,21,22,24,24,22,23,22,23,24,25,23,24,25,26,26,23,24,25,23,22,23,24,22,22,23,23,22,20,22,24,24,24,23,22,23,23,22,22,22,23,22,22,22,22,21,22,21,24,22,23,23,24,24,23,24,25,25,26,26,27,26,27,27,26,28,28,28,28,28,28,28,28,28,28,28,29,28,29,29,29,29,29,29,29,29,29,30,29,29,28,29,29,28,28,28,28,28,28,27,28,29,29,29,29,29,30,30,29,29,29,29,29,29,29,29,30,30,30,29,29,30,29,30,29,30,29,30,30,29,30,29,29,29,29,30,30,29,30,29,29,29,29,29,28,28,26,27,27,25,27,25,24,25,24,24,23,21,23,22,23,22,22,23,22,23,21,22,22,22,21,22,23,22,23,22,22,21,21,19,20,18,19,21,21,22,21,22,23,21,24,24,24,23,22,24,22,24,23,24,23,23,23,22,23,22,22,22,21,20,21,21,19,20,21,18,17,19,18,14,14,15,13,10,9,12,13,12,11,15,17,18,20,19,20,19,19,20,18,18,18,16,16,18,15,16,17,18,18,20,19,21,23,22,23,24,22,25,24,24,25,27,26,27,27,26,26,27,25,26,26,24,25,26,26,27,26,26,28,28,28,29,28,28,28,29,29,29,29,28,28,29,28,28,28,28,28,28,28,28,27,26,27,27,26,26,26,25,25,25,24,24,24,23,23,21,21,21,21,21,20,20,17,18,19,17,17,19,20,17,19,20,19,20,22,22,22,23,21,23,25,22,23,25,26,24,27,27,25,27,27,28,28,28,27,27,28,28,28,28,28,28,29,29,29,28,28,28,29,28,28,29,29,28,29,28,28,28,28,28,28,28,28,27,28,28,28,28,28,27,27,28,27,26,27,27,26,26,27,26,24,25,26,23,24,24,23,22,23,23,23,22,20,24,23,22,24,24,25,25,23,23,26,23,25,26,26,27,26,26,26,28,26,26,27,26,27,27,26,27,27,27,25,27,26,24,25,26,23,25,24,25,24,24,25,23,24,23,25,24,24,26,25,25,26,26,25,26,27,25,24,26,25,25,24,24,24,23,23,23,23,24,23,22,22,23,23,23,23,22,22,21,22,22,21,21,21,19,20,19,19,18,17,16,17,16,13,13,15,14,12,11,11,12,10,9,9,9,6,4,4,3,2,1,0,1,2,4,4,6,8,6,6,8,8,9,11,11,13,12,13,15,16,15,16,17,16,15,17,18,16,15,18,18,16,15,18,19,18,20,15,18,16,19,17,14,16,17],[26,28,26,28,28,28,29,29,28,28,28,27,28,28,28,28,29,29,29,29,29,28,30,29,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,30,29,29,29,30,29,29,29,28,29,28,28,28,29,28,29,26,28,25,27,28,28,29,29,28,28,28,29,29,28,29,29,29,29,29,29,29,29,29,30,29,28,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,30,30,28,29,29,28,29,29,28,28,29,28,26,29,28,26,27,28,26,25,25,26,28,26,29,28,27,28,28,28,27,29,29,28,28,29,29,28,29,28,29,29,30,29,29,30,29,30,29,30,29,29,29,29,29,29,29,28,27,28,28,27,25,26,26,26,27,24,24,24,26,23,24,24,24,24,24,24,23,24,24,25,26,25,24,27,27,26,25,28,28,28,29,27,28,28,28,27,26,29,27,26,28,28,26,26,28,28,26,26,28,26,25,27,28,26,26,27,27,28,28,28,27,28,26,26,27,26,24,24,25,24,23,23,24,24,23,22,22,22,20,22,22,20,18,19,22,22,22,21,22,21,21,24,22,23,22,24,24,24,24,25,25,24,26,27,25,27,26,28,27,24,25,27,24,23,24,26,24,23,24,24,24,22,25,26,25,27,25,23,25,24,23,23,24,24,22,23,24,23,20,24,23,24,24,24,24,26,25,25,27,27,26,27,27,28,27,28,26,28,29,29,29,28,29,29,29,29,29,29,28,29,29,29,29,30,29,29,30,30,29,30,30,30,30,29,29,29,29,28,28,29,29,28,28,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,29,30,29,30,29,29,29,29,29,28,29,26,27,28,26,27,28,25,26,26,25,24,24,24,24,25,25,23,24,24,23,22,23,23,23,24,23,23,25,24,25,24,24,23,22,23,21,22,23,23,23,22,25,26,23,26,26,25,24,25,25,25,24,24,25,24,23,24,23,23,24,24,23,23,21,22,23,21,19,21,19,18,18,17,14,14,15,13,11,10,14,14,13,13,16,18,18,21,19,21,20,20,20,19,18,20,18,18,18,18,18,19,19,19,21,22,22,21,22,24,24,23,25,25,25,26,27,27,28,28,27,28,28,27,27,28,25,26,27,27,28,27,27,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,29,28,29,28,29,28,29,27,27,28,27,25,26,26,24,23,25,24,22,22,24,23,21,21,22,20,19,20,20,21,21,21,19,21,23,22,20,23,24,24,23,24,24,25,25,24,26,27,27,28,29,28,28,29,29,29,28,28,29,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,28,29,29,29,29,29,29,29,29,29,28,28,29,29,29,28,28,28,27,28,27,26,26,28,27,24,25,27,24,23,25,25,26,24,25,25,25,26,26,24,25,27,25,27,27,25,28,28,28,27,28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,26,25,28,26,25,26,26,25,25,27,26,27,27,28,27,27,28,27,28,28,28,27,28,28,27,28,27,27,26,25,26,25,24,25,23,24,26,26,26,23,25,24,25,25,24,25,23,26,25,24,24,23,24,20,22,21,21,19,18,19,18,17,14,16,15,13,12,12,13,13,11,10,10,8,6,6,5,3,3,1,0,1,3,3,5,7,5,4,7,7,7,9,8,12,12,15,17,17,14,15,19,17,15,20,20,16,16,21,19,17,15,19,20,18,21,16,19,17,20,18,16,17,18],[27,28,27,28,28,28,29,29,29,28,28,28,29,28,29,28,29,28,28,29,29,29,30,30,29,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,29,29,29,30,29,29,29,28,29,28,29,28,29,28,29,29,29,28,28,27,28,29,29,28,29,29,29,28,29,29,28,29,29,29,29,28,29,29,29,29,30,29,28,29,30,29,29,30,29,28,29,29,29,28,28,29,29,29,29,29,29,30,29,30,29,28,29,29,27,27,28,28,26,28,28,24,26,29,25,25,26,25,28,25,29,28,26,28,29,28,26,29,29,27,29,29,29,28,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,28,28,28,28,24,26,27,25,26,24,25,25,27,24,25,26,24,24,25,26,24,26,25,26,27,26,25,27,28,27,26,28,29,29,29,26,29,28,29,28,27,29,27,25,29,29,26,25,29,28,25,27,29,27,25,28,29,26,25,29,27,28,28,29,28,27,27,27,27,26,26,26,27,26,25,25,25,25,24,23,24,23,22,22,23,24,22,21,22,22,24,22,22,23,24,24,24,24,23,25,26,24,25,26,26,25,27,27,25,28,26,28,28,24,26,28,26,23,26,27,25,24,27,25,25,24,26,27,27,27,26,25,26,25,24,25,25,26,22,25,25,23,20,24,25,25,25,25,26,27,27,26,27,27,28,28,28,28,28,28,28,28,29,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,30,29,29,29,28,29,29,29,29,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,27,28,28,27,27,27,26,27,27,27,27,25,26,25,25,24,24,24,24,24,26,23,23,25,25,25,25,26,26,25,25,23,23,22,23,21,23,24,24,24,24,24,25,24,26,26,27,25,25,26,26,25,26,27,25,26,26,27,25,24,25,24,22,21,23,23,20,20,21,19,18,19,19,14,13,15,14,10,11,14,16,14,13,18,18,19,23,21,22,22,21,20,19,20,21,17,18,20,19,19,21,20,23,23,21,24,23,24,25,25,25,27,27,27,27,28,28,28,28,27,29,29,28,28,28,27,26,28,28,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,28,28,29,29,28,28,29,28,26,27,27,24,25,26,25,23,24,25,24,21,24,23,21,20,21,18,18,22,21,19,21,24,23,22,24,24,24,23,24,25,26,26,26,27,28,28,29,28,27,28,28,28,29,29,28,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,30,28,29,29,28,28,28,29,29,28,29,29,29,29,29,28,29,29,29,29,28,29,29,28,28,28,28,27,28,27,26,26,27,26,24,26,26,26,25,25,25,25,26,26,26,27,27,26,27,27,27,28,28,28,28,28,28,29,28,29,29,28,28,28,27,29,28,28,28,28,28,27,27,28,27,26,27,27,26,26,27,26,27,27,27,27,26,27,28,27,28,28,27,27,28,28,26,27,28,28,27,26,26,25,25,26,25,26,26,25,26,26,26,26,25,25,24,24,24,24,24,24,23,24,21,22,21,22,21,19,19,19,17,15,18,17,13,13,14,15,12,10,10,9,8,7,6,5,5,4,3,1,0,1,2,4,5,3,4,5,7,6,8,7,10,12,12,15,15,13,13,17,16,14,19,19,16,16,19,18,16,16,18,20,17,19,17,17,16,19,16,15,16,17],[26,27,26,26,27,28,28,28,29,27,28,28,28,28,28,28,29,29,28,29,29,28,29,29,29,29,29,29,29,29,29,30,30,30,29,30,29,30,29,30,30,29,29,30,30,30,29,29,29,29,29,29,29,29,28,28,29,28,28,28,28,27,27,27,28,27,28,28,28,28,28,27,28,26,27,27,28,28,28,28,28,27,28,28,28,28,28,28,28,28,28,28,28,29,29,28,28,29,29,28,29,29,29,28,29,29,29,29,28,29,28,29,28,29,29,29,29,29,29,28,29,28,27,28,28,27,26,29,28,25,26,28,25,24,26,25,27,27,28,28,27,27,28,27,27,28,28,27,28,29,28,28,28,28,28,28,29,28,28,28,28,28,28,28,28,28,29,28,28,28,28,28,26,28,28,27,26,27,26,26,27,25,24,26,26,22,24,26,24,24,25,25,23,23,25,25,26,25,24,26,27,26,25,26,28,27,28,27,27,27,28,27,26,28,26,27,28,28,26,26,27,27,24,27,28,26,24,27,27,25,25,27,26,27,27,28,27,27,27,26,28,27,26,26,26,25,25,26,24,24,23,22,23,24,22,23,22,20,19,22,21,22,21,22,22,21,22,23,22,22,23,23,26,24,24,24,22,25,25,26,26,27,26,27,27,25,26,27,25,24,26,26,24,23,25,25,24,23,24,26,26,26,25,24,26,25,23,25,25,25,23,24,24,24,22,26,25,25,25,25,24,26,25,25,26,27,27,27,27,27,27,27,26,27,27,27,27,27,28,27,27,28,27,28,28,28,28,28,28,28,29,28,28,29,29,29,29,28,29,28,28,28,27,26,27,28,27,28,28,28,28,28,29,29,29,29,29,29,29,29,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,27,28,26,27,27,26,27,27,26,27,27,26,26,24,24,26,25,24,24,24,24,24,25,23,23,24,23,24,23,27,26,24,25,24,23,22,23,21,24,23,24,24,23,24,25,24,26,26,26,24,25,26,26,25,25,26,25,24,25,25,24,24,24,23,23,23,22,22,21,21,21,19,20,19,18,16,15,15,14,13,11,15,16,16,15,18,22,20,22,22,21,20,20,19,20,20,19,19,20,20,19,18,20,19,22,20,22,21,22,22,22,23,22,25,25,24,26,27,26,27,27,26,27,28,26,27,28,25,26,26,27,27,27,27,28,28,28,28,28,27,28,28,28,27,27,28,27,27,28,28,27,28,28,28,28,28,27,27,28,28,26,27,28,27,24,25,26,23,23,25,24,22,23,23,23,23,23,22,21,20,18,20,20,21,20,19,21,21,22,21,22,21,22,23,21,24,24,25,24,26,27,27,28,28,26,27,27,27,28,28,28,28,28,28,28,28,29,28,28,28,28,28,29,28,28,28,28,28,28,28,28,28,27,28,27,27,27,28,28,27,28,28,28,28,28,27,28,28,28,28,27,27,28,27,27,26,26,27,27,27,25,25,26,24,23,24,25,25,24,23,24,23,24,24,24,26,25,24,27,26,26,26,26,27,27,27,28,27,27,27,28,26,27,27,26,28,27,28,27,27,27,27,26,27,27,25,25,26,25,26,27,25,27,26,27,27,26,27,26,27,27,27,26,26,27,26,26,27,27,28,26,26,26,25,24,25,25,26,25,25,25,25,25,25,25,25,24,23,25,24,24,22,23,22,21,21,21,19,20,18,19,18,16,15,18,17,14,15,14,15,14,12,11,10,8,6,6,5,5,4,3,2,1,0,1,2,3,3,4,4,6,7,7,8,10,10,11,14,13,12,14,15,15,14,17,16,15,14,18,17,14,13,18,19,16,18,15,16,15,18,16,14,15,17],[26,26,26,27,27,28,27,28,28,27,27,27,28,27,28,28,29,28,28,29,29,29,29,29,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,29,30,29,29,29,28,29,29,28,29,28,29,29,29,29,29,28,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,30,29,30,30,30,29,30,30,30,29,30,30,29,29,30,29,29,29,29,29,30,30,29,30,30,29,30,30,29,30,29,29,29,29,29,29,30,29,27,27,30,27,27,28,28,29,27,30,29,28,29,30,29,28,30,29,29,29,30,30,29,29,30,29,29,30,29,29,29,30,29,30,30,29,30,29,29,30,30,29,30,28,29,29,29,27,29,29,27,29,26,25,27,28,25,27,28,27,26,27,27,27,26,27,27,28,28,27,28,29,28,29,28,29,28,29,28,29,29,29,28,27,29,28,28,30,29,28,27,29,29,27,28,29,29,27,30,30,29,28,30,29,30,29,29,29,29,29,29,29,29,28,28,28,28,27,27,27,26,26,24,25,26,25,25,26,25,22,25,23,24,25,24,25,25,25,26,26,26,26,27,27,27,27,28,26,26,29,28,27,29,28,29,29,27,27,29,28,26,28,29,27,26,28,27,26,26,27,29,28,29,28,26,28,27,26,26,27,26,25,26,25,26,24,26,25,27,27,26,27,28,28,27,27,28,28,28,28,28,28,28,28,28,28,29,29,27,28,28,29,29,28,28,28,28,29,29,29,29,28,30,29,29,29,30,29,30,30,30,29,29,28,28,29,29,29,29,28,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,27,28,28,27,28,28,27,28,28,27,27,27,26,27,25,24,25,24,25,24,25,24,24,26,25,24,25,27,26,23,25,23,23,22,23,20,24,23,25,24,24,24,26,23,27,27,28,26,25,28,27,26,27,28,27,26,27,26,26,26,26,24,26,24,24,24,23,22,21,19,21,19,19,14,15,15,14,13,12,14,16,15,14,17,19,20,23,22,24,23,24,22,22,22,23,21,22,22,21,21,23,22,25,24,23,24,25,25,26,26,26,28,28,28,28,28,28,29,29,29,28,29,28,29,29,27,28,28,27,29,28,29,29,29,29,30,30,29,29,29,29,28,29,29,28,29,30,29,29,29,29,29,29,29,28,28,29,29,28,29,29,28,27,28,28,26,26,27,26,26,26,26,25,24,25,23,23,21,22,21,21,22,23,21,23,25,25,23,24,25,24,25,24,26,26,26,27,28,28,29,29,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,29,30,29,29,29,29,28,29,29,28,28,28,28,28,28,28,29,29,29,30,28,29,29,29,30,29,29,29,28,29,29,27,27,29,28,28,27,28,27,27,27,27,26,25,25,25,26,26,26,26,27,27,26,27,27,27,28,27,28,28,28,28,29,28,28,30,29,29,28,29,29,29,29,29,29,28,28,27,28,28,28,28,28,27,27,27,26,26,26,27,28,27,27,27,28,28,28,28,28,28,28,28,28,29,29,29,26,28,25,26,27,26,26,26,26,27,26,27,26,25,25,24,25,25,25,24,23,22,25,23,23,23,21,24,19,23,20,20,16,19,18,15,15,14,16,15,11,12,10,8,8,7,6,6,5,4,3,3,1,0,1,2,3,3,2,4,5,5,5,7,7,9,12,13,10,10,14,13,11,15,14,13,13,15,14,13,12,15,16,15,17,15,16,13,17,15,12,14,15],[25,27,26,26,27,28,28,28,28,27,28,27,28,28,28,28,28,28,28,28,28,28,29,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,29,30,30,29,29,29,30,29,29,29,28,30,29,29,29,29,29,29,29,30,29,29,28,28,29,29,28,29,29,29,28,30,30,29,29,29,29,30,29,29,29,29,29,29,29,30,29,29,30,30,30,29,29,29,30,30,29,29,29,29,29,30,30,30,30,29,30,30,29,30,29,28,29,29,29,28,30,29,27,28,29,28,25,27,26,28,28,29,29,28,28,29,29,28,29,29,28,29,29,29,29,30,29,29,29,30,29,30,28,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28,26,27,27,26,27,28,26,26,28,27,25,27,28,26,25,27,25,27,27,26,27,28,27,27,28,29,28,29,28,29,29,29,28,29,29,28,28,29,29,27,28,29,28,28,28,29,28,27,29,30,28,27,29,28,29,29,29,29,29,28,28,27,28,26,27,27,27,25,26,26,26,26,25,26,25,24,24,23,23,21,24,24,23,24,24,24,25,25,26,26,25,25,25,27,25,25,27,25,26,27,27,27,28,28,29,28,27,27,28,27,26,27,28,26,25,27,26,26,26,27,28,27,28,27,26,27,27,26,25,27,26,24,25,25,26,22,25,24,26,27,25,26,28,28,27,28,28,29,28,28,29,29,29,28,29,29,29,29,29,29,28,30,29,28,29,29,29,29,30,30,29,30,30,29,29,29,30,30,29,30,29,30,30,29,29,30,30,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,28,29,28,29,29,29,28,28,28,27,27,26,26,25,26,24,25,25,24,25,27,24,24,26,26,23,25,27,27,26,26,24,23,23,22,19,25,23,24,25,24,26,27,25,28,27,29,27,26,28,28,25,27,28,26,25,26,27,24,25,25,23,24,22,23,24,24,21,22,20,19,18,19,17,15,14,14,14,13,14,15,15,15,16,21,21,24,23,23,22,22,22,22,22,21,21,23,21,21,20,20,21,20,21,23,25,25,24,25,26,25,27,28,27,28,28,27,29,29,28,28,29,27,29,29,27,28,28,28,29,27,29,30,29,30,30,30,28,29,29,29,28,28,29,28,28,29,28,29,29,29,29,29,30,29,29,29,29,28,29,29,28,27,27,27,26,25,27,26,25,25,25,24,24,23,23,24,23,22,20,21,22,24,20,22,23,22,22,25,24,24,25,25,26,27,28,27,27,28,29,29,29,28,29,28,29,29,29,28,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,28,29,29,29,29,28,29,29,29,29,29,29,29,28,28,29,28,28,28,28,28,27,28,27,26,27,26,26,25,25,25,25,27,27,27,28,28,28,28,28,28,28,28,29,28,28,29,29,28,28,29,29,29,29,28,29,29,29,29,29,28,28,27,28,28,27,27,28,27,27,28,27,28,28,29,28,27,28,28,28,28,29,28,28,29,28,28,28,28,29,28,28,27,27,26,26,26,27,28,26,26,27,26,28,26,26,26,26,27,26,25,23,24,24,23,21,22,23,22,19,21,21,20,15,19,19,15,15,17,17,16,13,13,11,10,9,8,7,7,6,4,4,3,2,1,0,1,1,1,1,2,3,4,4,6,6,9,9,11,8,9,12,12,10,14,14,11,11,16,13,12,10,13,16,14,16,13,16,15,18,16,13,15,16],[25,25,25,25,26,27,26,27,26,26,26,26,27,27,27,27,28,28,28,28,28,28,28,29,28,29,29,29,29,29,29,29,30,30,29,29,29,29,30,30,30,29,29,29,30,30,29,29,29,29,29,29,29,30,29,29,29,29,29,28,29,28,28,27,28,28,28,29,28,29,29,28,28,27,27,28,29,28,29,29,27,28,29,28,28,29,29,30,30,29,29,29,29,29,29,29,29,29,30,29,29,29,30,28,29,29,29,28,28,29,29,29,29,29,29,30,28,30,29,28,29,29,27,28,28,28,27,29,28,26,28,29,26,24,28,27,28,27,29,29,27,28,29,28,27,29,28,27,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,29,28,28,28,28,27,28,28,26,28,26,26,27,27,25,26,27,26,25,26,26,26,26,26,26,27,27,26,28,29,27,27,28,29,28,29,28,29,29,29,28,28,29,27,27,28,28,26,27,28,28,26,28,28,27,26,28,29,27,26,28,27,29,28,29,28,28,28,27,28,28,26,26,27,27,27,25,25,24,25,24,25,25,24,25,25,24,22,24,25,23,24,24,23,24,25,25,24,26,25,26,27,25,25,27,26,26,27,27,26,28,28,28,28,26,27,28,26,25,26,28,25,26,26,26,26,25,26,27,27,28,27,26,27,26,25,26,26,24,24,24,23,23,22,23,22,24,25,25,26,27,27,27,27,27,28,28,28,28,28,27,27,27,29,28,28,28,28,27,28,27,28,28,28,29,29,29,28,28,28,29,29,28,29,29,29,29,29,29,28,28,29,27,28,28,28,29,29,28,29,29,28,29,29,30,30,30,29,30,29,29,29,29,30,30,30,29,30,29,30,29,30,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,28,29,29,28,28,27,27,27,26,27,28,27,28,27,27,27,26,26,25,25,24,24,23,23,24,26,22,22,26,25,23,24,27,26,24,25,22,21,20,22,20,22,21,22,22,23,23,26,23,27,26,27,26,24,27,27,24,26,28,26,25,26,26,24,25,24,22,23,22,21,21,23,21,19,19,20,18,19,17,17,15,14,15,14,14,15,15,15,18,20,22,22,24,22,21,21,22,21,21,22,21,22,20,22,20,22,23,23,23,23,24,24,23,25,26,26,27,27,28,27,27,27,29,28,29,28,28,28,28,28,27,28,28,28,29,28,28,29,29,29,29,29,29,28,29,29,28,29,29,28,28,29,29,28,29,29,28,29,29,27,28,29,28,28,28,28,27,27,27,27,26,26,27,25,25,25,25,24,24,23,21,22,21,19,22,21,20,22,21,22,23,24,23,24,24,23,25,25,26,26,27,27,27,27,28,28,28,28,28,28,28,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,28,29,28,28,28,28,28,28,29,28,28,28,28,28,28,29,28,28,29,29,28,28,28,28,28,28,28,27,27,28,26,27,27,26,27,26,26,25,24,26,24,25,26,26,26,27,27,26,27,27,27,27,26,27,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,28,28,27,28,27,27,27,27,27,26,26,28,26,25,25,25,26,26,25,27,27,28,27,27,27,28,28,27,28,26,28,28,26,25,26,25,25,26,25,25,25,25,27,25,26,26,25,26,25,25,25,25,24,21,22,23,22,22,21,21,22,20,20,19,20,18,18,18,16,17,17,17,17,13,13,12,11,10,7,8,7,6,5,4,3,2,2,1,0,1,2,2,2,3,4,4,5,6,7,8,10,8,8,12,10,11,14,12,10,12,14,12,11,12,16,12,13,15,15,14,14,16,14,12,14,16],[26,27,26,27,27,28,28,28,28,28,28,27,28,27,28,28,28,28,28,29,29,29,29,29,29,29,29,28,29,30,29,30,30,30,29,30,29,29,30,29,30,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,28,28,29,28,28,27,28,27,28,28,28,27,28,27,28,26,28,26,26,28,28,27,29,28,28,27,28,28,28,28,28,28,29,28,29,29,28,29,29,29,28,29,30,29,29,29,29,29,28,29,29,28,28,29,29,29,29,28,29,30,28,30,29,29,29,28,27,28,28,28,27,29,28,26,27,29,26,26,27,28,29,27,29,29,27,28,29,28,28,29,29,28,28,29,29,28,28,28,28,28,29,29,28,29,29,28,29,29,29,28,29,28,28,28,29,29,27,28,29,28,26,27,27,27,28,26,25,27,27,25,26,27,25,25,27,27,25,26,27,28,28,28,26,28,29,28,27,28,29,28,28,27,28,27,29,28,27,29,28,27,28,29,27,26,28,28,26,27,28,27,26,27,28,26,26,28,27,27,29,29,27,29,28,27,27,28,26,27,27,26,25,26,25,26,25,23,24,26,25,24,25,25,23,24,24,23,23,24,23,24,24,25,24,24,25,26,26,25,26,27,27,26,27,27,26,28,25,27,28,26,26,27,25,24,25,27,25,24,25,26,26,24,26,27,25,27,26,25,26,26,25,25,25,25,24,25,25,26,22,26,24,25,26,25,26,27,27,26,26,27,27,27,26,28,27,27,27,28,28,28,29,28,28,29,28,28,28,28,28,29,29,29,28,29,29,29,29,29,29,29,30,30,30,29,29,29,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,29,30,29,30,30,29,29,29,29,30,29,30,30,29,29,30,29,29,28,26,28,28,27,27,28,26,27,27,27,26,25,25,26,25,25,23,23,23,24,25,23,24,26,25,25,25,26,27,25,26,23,23,22,22,21,24,22,24,24,24,25,27,24,27,27,28,26,25,27,27,25,27,28,25,26,27,25,25,24,25,23,24,23,23,24,23,21,21,19,17,19,19,15,16,16,14,13,16,14,16,16,14,18,20,21,24,24,24,24,23,24,23,22,22,21,23,22,21,23,23,22,24,24,22,22,25,24,23,24,23,25,25,26,27,27,27,28,28,28,28,28,28,29,28,27,27,28,27,28,28,27,28,29,28,29,29,28,28,29,28,28,28,28,27,28,28,28,29,29,29,28,28,29,27,27,28,28,27,27,27,26,25,26,26,24,24,25,24,23,23,24,23,23,24,23,22,22,21,21,21,22,22,21,21,23,24,22,22,23,25,24,23,24,26,26,25,26,27,28,27,27,27,28,28,27,28,29,28,28,29,28,28,28,28,28,29,29,29,28,29,28,29,28,29,29,29,28,28,28,28,27,27,28,27,27,27,27,28,28,28,28,28,28,27,28,28,28,27,28,28,27,28,27,26,26,27,26,25,25,25,25,23,25,25,24,24,23,25,24,25,24,26,26,27,27,27,27,26,27,28,28,26,27,28,28,27,27,28,27,27,28,27,27,27,27,27,27,27,26,26,27,26,25,26,27,27,27,27,27,27,27,27,26,26,28,27,26,28,27,27,27,28,27,27,27,27,27,27,25,26,25,25,25,26,24,27,26,26,26,26,27,26,26,25,25,25,24,24,24,23,23,21,23,22,21,22,22,20,20,21,19,19,20,17,17,15,17,16,13,13,12,9,9,7,8,7,5,5,4,4,3,3,2,1,0,1,2,2,2,3,4,5,6,6,8,9,7,8,12,11,9,14,12,10,11,14,12,11,12,15,15,13,16,14,14,13,17,14,12,13,16],[25,26,26,27,27,28,29,29,28,28,28,27,29,28,29,28,29,29,28,29,29,29,29,30,29,30,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,29,29,29,29,29,29,29,28,29,28,29,28,28,28,29,28,29,27,28,26,26,28,29,28,29,28,27,28,29,28,27,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,30,30,29,29,29,29,29,30,29,30,30,29,30,29,29,30,29,28,28,29,29,27,29,29,26,27,29,26,25,26,26,28,27,29,29,27,28,29,28,27,29,29,28,28,29,29,28,29,29,29,29,30,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,27,28,29,28,25,27,27,26,27,25,24,26,27,24,25,26,25,24,25,25,24,25,26,26,28,27,24,28,28,27,26,28,29,28,29,28,28,28,29,28,27,29,28,26,28,29,27,26,28,28,26,26,28,27,25,27,28,26,26,27,27,28,28,29,27,28,27,27,27,26,25,26,26,25,24,25,25,25,24,23,24,24,23,23,24,22,22,22,22,23,23,23,23,23,23,25,24,24,24,26,25,24,24,26,25,25,27,27,26,28,26,28,27,25,25,27,25,25,24,26,25,25,25,25,25,24,26,27,25,27,26,24,25,26,24,24,25,26,23,25,25,26,23,25,23,25,25,24,26,26,26,25,26,27,27,27,28,28,27,28,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,30,30,29,30,30,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,27,29,28,27,28,28,26,27,26,26,25,25,25,26,24,24,25,25,24,24,26,24,23,25,26,25,24,27,26,24,24,22,23,22,22,19,24,23,24,24,24,23,26,25,26,27,28,25,25,28,27,25,26,27,25,25,26,26,25,25,25,23,24,22,24,24,22,20,23,20,20,19,21,17,15,15,14,14,14,14,16,15,15,18,19,20,23,23,23,22,21,23,22,22,21,20,21,20,20,20,22,22,22,23,23,24,23,25,25,24,24,27,26,26,27,27,27,28,28,27,28,29,27,28,28,27,27,27,27,28,28,27,29,29,29,29,29,29,28,29,29,28,29,29,28,28,29,29,29,29,29,29,29,29,28,28,28,28,27,27,27,26,24,25,26,25,24,25,25,24,23,24,24,23,22,23,23,21,22,22,22,22,24,22,22,22,23,22,23,24,25,25,23,25,26,26,26,26,27,28,27,28,28,28,28,28,29,29,28,28,29,29,29,28,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,28,28,29,29,28,28,29,28,28,29,29,29,29,29,29,28,29,28,28,28,28,27,27,27,28,25,26,27,27,25,26,26,24,24,25,25,25,24,26,25,25,26,26,25,26,27,27,27,28,26,28,28,28,27,28,28,28,28,29,28,28,28,28,27,27,28,27,26,28,27,26,25,28,26,25,26,28,25,26,27,27,28,28,27,27,28,28,28,28,28,28,27,28,28,26,28,28,28,26,27,26,26,26,25,24,27,25,27,27,26,27,26,28,27,25,26,25,26,25,24,23,23,24,22,21,20,22,21,18,20,20,18,14,20,17,15,15,16,16,16,13,12,12,11,9,8,6,6,6,6,4,3,3,2,2,2,1,0,1,2,2,3,3,5,5,6,8,9,7,8,10,10,9,12,12,10,10,15,13,11,11,14,16,13,17,12,14,15,18,15,14,16,16],[26,26,26,26,26,27,27,27,27,28,27,27,28,28,28,28,28,28,28,29,29,28,29,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,29,28,29,28,28,28,28,29,29,29,29,28,28,28,28,28,28,28,29,29,29,29,29,30,29,29,29,29,29,30,29,29,30,29,29,29,30,29,29,29,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,27,29,29,27,27,29,27,27,26,25,28,28,29,28,28,29,29,28,27,29,29,28,29,29,29,28,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,27,28,27,26,28,26,25,26,28,26,27,26,27,26,26,27,27,26,27,26,27,28,27,28,29,28,27,27,29,29,29,28,29,29,29,28,28,29,28,27,29,29,27,28,29,28,28,28,29,27,27,29,29,27,27,28,28,28,29,29,29,28,28,28,28,28,27,27,28,27,26,27,27,26,27,25,26,24,25,24,24,25,22,26,25,25,26,25,26,26,26,27,26,27,26,26,27,27,26,26,26,26,27,27,27,28,28,29,28,27,27,28,27,27,26,28,27,26,26,27,26,25,27,27,27,28,27,26,27,27,25,25,26,26,25,26,26,24,22,24,23,25,27,25,27,28,27,27,28,28,28,28,29,29,28,28,28,29,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,30,30,29,29,30,30,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,29,29,30,29,30,29,29,27,28,28,27,28,29,27,28,28,27,28,26,26,26,24,23,26,25,23,24,26,24,22,26,26,24,24,27,27,24,25,24,23,22,21,19,23,23,22,23,25,25,25,25,28,27,28,26,26,28,27,25,27,27,26,25,27,27,24,26,25,24,24,23,22,23,24,22,21,21,22,19,19,17,16,14,14,14,14,14,16,15,15,19,20,22,23,24,23,24,23,23,24,22,23,23,24,22,22,22,24,23,24,24,25,26,25,25,27,27,27,28,27,28,28,28,28,29,28,28,28,29,28,29,29,27,28,28,29,29,29,29,29,29,29,30,30,28,29,29,29,28,28,29,28,28,29,29,28,29,29,29,29,30,28,28,29,29,28,28,28,28,27,28,28,27,26,27,26,25,25,26,25,25,24,23,24,22,22,22,23,24,24,22,24,25,24,25,26,27,26,26,26,27,27,28,28,28,28,28,29,29,28,29,28,29,29,28,28,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,28,29,29,28,29,28,28,28,28,29,29,28,28,29,28,29,28,29,29,28,29,28,29,29,29,28,28,28,28,28,28,28,27,28,27,26,28,27,26,25,26,26,26,27,27,28,28,28,27,28,27,28,28,28,28,28,28,28,28,28,28,29,28,28,28,28,29,28,28,28,28,28,28,28,28,28,27,28,27,26,27,28,27,28,27,27,28,27,28,28,27,28,28,28,28,29,28,28,28,28,28,27,27,26,26,25,26,24,26,27,26,26,27,25,28,26,26,25,27,26,27,26,25,25,26,26,23,22,24,25,20,22,23,21,16,21,20,15,16,19,18,16,14,13,12,12,9,10,9,7,7,5,4,4,3,2,2,3,1,1,0,1,3,3,4,5,6,8,8,10,7,8,10,10,9,12,13,10,10,14,13,10,10,13,15,14,16,14,15,14,18,16,14,15,18],[25,25,25,26,26,27,27,27,27,28,26,27,27,27,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,29,30,30,29,29,29,29,29,29,29,28,29,28,28,28,29,29,29,29,29,28,29,28,28,29,29,28,30,29,29,29,30,29,29,29,29,30,30,29,30,29,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,29,29,29,29,29,30,29,30,30,29,30,30,29,29,29,28,29,29,29,27,29,29,27,28,30,27,26,28,28,29,28,30,28,28,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,30,30,30,30,29,30,29,29,29,29,29,29,29,29,29,27,28,28,27,29,27,25,28,29,25,26,28,27,26,27,28,26,27,28,27,28,28,27,28,29,29,28,29,30,29,30,28,29,29,29,29,28,30,29,28,29,29,28,28,29,29,27,28,29,28,27,29,29,28,27,29,28,29,29,30,29,29,28,28,28,28,28,28,28,27,27,27,27,25,26,26,25,25,23,25,25,24,23,25,25,25,25,24,25,26,26,26,26,26,26,27,28,26,26,27,27,28,28,28,27,29,28,29,29,27,28,29,27,27,28,29,27,26,28,27,27,26,27,28,28,29,28,27,28,28,26,27,28,26,24,27,26,25,22,24,25,26,27,27,28,28,27,28,28,28,28,28,28,29,28,28,28,28,29,29,28,28,28,28,29,28,28,28,28,29,29,29,29,29,29,29,29,29,30,29,30,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,30,29,30,30,30,30,29,30,30,30,30,30,30,29,29,30,29,29,29,27,28,28,28,27,28,28,28,28,28,28,26,27,26,25,24,26,26,25,26,26,25,25,26,27,26,26,26,27,26,26,23,24,22,24,22,23,24,24,25,26,26,26,26,27,27,28,27,26,27,27,27,27,28,27,26,28,27,26,26,26,24,25,24,23,23,23,23,21,20,23,21,20,18,20,18,16,16,16,16,18,18,17,21,22,23,25,23,25,25,24,24,23,24,23,22,24,24,23,21,24,25,25,25,24,26,25,26,27,27,26,28,28,27,28,29,28,29,29,29,29,29,28,29,29,28,28,29,29,29,29,29,29,30,29,30,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,28,29,29,29,27,28,28,27,27,28,27,25,26,26,26,25,25,24,24,23,22,22,22,24,23,22,23,25,26,25,26,26,26,27,26,27,28,28,28,28,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,30,30,30,29,30,29,30,29,30,29,29,29,30,29,29,29,29,29,29,29,28,29,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,27,28,28,28,27,26,28,26,26,27,26,26,26,27,27,27,28,28,27,28,28,28,29,28,29,29,29,28,29,29,28,29,28,29,29,29,29,29,29,28,29,28,28,28,29,27,28,28,28,27,28,28,26,27,27,28,28,27,28,28,28,28,29,28,28,29,28,27,28,28,29,28,27,28,26,26,27,26,26,26,25,27,27,27,27,26,27,27,26,25,26,26,25,23,25,24,24,23,23,24,24,22,22,22,20,21,20,18,19,19,19,19,15,16,14,13,12,10,9,10,8,8,6,5,4,4,3,3,2,2,1,0,1,2,3,4,6,6,6,9,7,7,10,10,9,13,13,9,11,14,12,11,10,14,13,13,14,14,15,14,16,15,12,15,17],[24,25,25,26,27,27,28,29,28,28,28,28,29,28,29,28,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,29,29,29,30,29,29,29,29,29,29,28,29,29,29,29,30,29,29,29,29,29,30,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,30,30,30,30,29,30,30,29,30,30,30,30,30,29,30,29,29,28,30,29,28,28,30,28,28,28,28,29,29,29,30,29,29,30,30,28,30,30,29,29,30,30,29,29,30,30,29,30,30,29,30,30,30,30,30,30,29,30,30,29,30,30,30,29,29,30,29,28,29,29,27,29,27,26,28,29,27,27,29,27,27,28,28,27,26,28,27,29,28,27,28,29,28,28,29,29,29,29,29,30,29,29,29,29,30,28,28,30,30,28,28,29,29,27,28,30,28,27,29,30,28,29,30,29,29,30,30,28,29,29,28,29,29,28,28,29,28,26,28,27,27,27,26,27,27,25,26,26,26,23,26,25,26,26,26,26,27,26,26,26,26,27,27,28,26,27,28,26,27,28,28,27,29,28,29,29,28,28,29,28,26,28,29,27,26,28,28,27,27,27,29,28,29,28,27,28,28,27,27,28,27,25,27,27,26,25,26,26,26,27,27,28,28,28,28,28,28,29,28,28,28,28,29,28,28,29,29,29,29,29,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,28,29,29,28,28,29,28,28,28,28,27,27,28,27,26,25,26,26,25,26,27,25,25,26,26,26,26,28,28,26,26,23,25,24,24,23,25,24,25,25,26,25,27,26,27,28,28,27,26,28,28,26,28,29,26,27,28,27,26,26,26,25,26,25,25,25,25,24,24,22,21,21,22,19,18,20,19,16,17,17,19,18,18,21,22,23,26,25,26,26,25,25,25,25,25,23,25,24,23,22,23,25,26,26,25,26,27,26,26,27,27,28,28,28,29,29,29,29,29,29,30,29,29,29,29,28,28,29,28,29,29,29,29,30,30,30,30,30,29,30,30,30,30,30,30,29,30,29,30,30,29,30,30,30,29,29,29,29,28,29,29,28,27,28,28,26,26,28,27,26,26,27,26,25,26,26,25,24,24,23,25,26,25,22,24,25,26,25,25,25,27,26,26,26,27,28,27,28,29,29,29,29,29,29,29,29,29,30,29,29,30,29,29,29,30,30,29,30,30,30,29,29,29,29,30,30,30,30,29,29,30,29,30,30,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,27,28,29,28,26,28,28,26,25,28,27,27,26,26,25,26,28,27,26,28,28,28,28,29,29,29,28,29,28,29,29,29,29,29,29,29,29,29,28,28,29,29,27,29,29,28,28,29,29,27,28,29,28,27,28,28,28,29,28,28,29,29,28,29,29,28,28,29,28,28,28,28,28,29,28,27,28,27,26,26,27,27,27,27,27,28,26,29,28,27,27,26,26,26,26,26,25,25,24,23,23,24,24,21,23,22,20,19,22,22,17,19,20,20,15,15,14,14,13,12,10,10,10,8,8,7,5,6,5,4,4,3,3,3,1,0,1,2,3,4,5,6,7,7,6,8,8,7,11,11,9,10,13,11,10,13,14,14,13,15,14,14,15,17,15,13,16,17],[24,25,24,25,26,26,27,27,26,27,26,26,28,27,28,28,29,28,28,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,29,30,30,30,29,30,30,30,31,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,31,30,30,31,31,30,31,31,30,31,31,30,31,31,30,30,30,30,30,30,30,29,30,30,28,28,30,28,26,29,27,30,27,30,30,28,30,30,29,28,31,30,29,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,28,30,29,27,30,28,26,27,29,27,26,28,28,27,27,28,27,25,27,27,28,28,26,28,29,29,28,29,30,30,30,28,30,30,30,29,28,30,28,28,30,30,27,28,30,30,28,29,30,29,28,30,30,29,28,30,29,30,30,30,30,30,30,29,30,30,29,29,29,28,27,28,28,26,26,26,26,25,24,26,26,24,22,25,25,26,26,25,26,27,26,25,27,27,26,25,28,27,25,27,27,26,28,28,27,30,28,30,30,28,28,30,28,27,29,30,27,27,29,28,27,26,28,29,29,29,28,27,29,29,26,28,28,27,25,28,28,26,24,25,26,28,28,28,29,29,29,28,29,30,30,29,30,30,30,30,29,29,30,30,29,29,29,29,30,29,29,29,29,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,30,29,30,29,29,29,27,28,27,26,26,27,28,26,27,28,27,25,27,27,27,27,27,28,27,27,25,25,25,25,23,25,25,26,27,27,27,27,27,28,29,29,28,28,29,29,28,29,29,28,28,29,28,28,27,28,26,26,25,25,26,25,25,23,24,23,22,22,21,21,20,17,18,16,16,19,19,18,21,23,23,25,24,26,26,25,24,24,25,24,22,23,24,24,20,22,25,24,23,25,27,25,25,27,28,26,28,29,28,28,30,29,30,30,29,30,30,29,29,29,27,27,29,29,30,29,29,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,27,29,29,27,27,29,28,26,27,28,25,25,26,26,24,23,24,24,24,24,25,23,25,25,25,24,26,27,25,25,26,28,29,28,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,28,29,30,29,28,29,29,28,26,29,28,27,26,27,25,28,28,28,27,29,29,27,28,29,29,29,29,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,30,30,29,29,30,29,28,29,29,28,28,29,28,29,28,29,29,29,29,29,29,30,29,29,29,30,29,29,29,30,30,29,28,28,28,28,28,28,28,29,28,28,28,27,28,28,27,27,27,26,26,26,25,24,26,25,24,23,24,25,22,23,23,21,20,22,20,18,20,20,19,16,16,15,15,14,13,11,11,12,9,9,8,6,6,5,5,5,3,4,4,2,1,0,1,2,3,4,5,6,5,6,7,7,7,10,9,8,10,12,9,9,11,13,12,11,14,14,14,15,15,15,13,16,18],[22,23,22,24,25,25,27,27,26,26,26,26,28,26,28,28,29,28,28,29,28,29,29,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,30,28,29,29,29,29,28,29,28,28,29,27,28,27,28,28,29,29,29,29,29,29,29,29,29,29,29,29,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,28,30,30,28,28,30,28,26,28,27,28,28,29,29,29,29,30,29,28,30,30,29,29,30,30,29,29,29,30,29,30,30,30,29,29,30,30,30,29,29,29,30,29,29,29,29,29,29,30,30,28,29,29,27,29,27,25,27,29,26,26,28,27,25,26,28,26,25,26,26,28,28,26,28,29,28,27,29,29,29,29,29,29,29,30,29,28,30,29,27,29,29,28,27,29,30,26,27,29,29,27,28,29,28,27,28,28,29,29,29,28,29,29,29,29,29,27,28,28,28,26,28,26,26,26,26,26,24,24,24,26,24,23,24,24,26,25,25,25,26,25,25,26,26,25,26,28,25,26,28,26,26,28,29,26,29,27,29,29,26,26,29,27,25,27,28,26,25,28,28,26,26,27,28,26,28,27,26,27,28,26,25,28,27,25,26,27,27,25,26,25,27,27,26,27,28,27,27,28,28,28,28,28,28,28,28,28,28,29,29,28,29,29,29,30,29,29,30,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,29,29,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,30,28,28,29,28,28,28,28,28,28,27,28,27,26,27,26,26,25,28,27,25,25,28,26,25,27,28,26,26,28,27,27,27,25,25,24,25,24,25,25,26,26,26,26,27,26,28,28,29,27,27,28,28,27,28,28,27,27,27,27,26,26,26,25,26,25,25,26,26,24,26,24,23,23,24,22,20,21,20,18,17,19,21,19,18,22,23,24,26,24,26,26,25,25,24,25,25,23,24,22,23,21,23,25,25,25,25,26,26,26,26,26,26,28,27,27,29,29,28,29,28,28,28,29,28,29,28,27,27,28,28,29,29,28,29,29,30,30,30,29,29,30,29,29,29,29,30,29,30,29,29,30,29,29,29,29,29,29,28,29,27,28,29,28,25,27,28,25,25,27,27,25,25,26,26,24,25,25,25,24,25,23,25,25,25,25,25,25,25,25,26,26,26,26,25,26,27,27,27,28,28,29,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,29,29,29,29,29,30,29,30,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,28,28,29,29,29,29,29,28,28,28,28,27,28,28,27,26,27,27,25,25,27,26,26,26,27,26,26,28,27,26,28,28,27,27,28,28,29,29,29,28,28,29,28,28,29,29,28,28,28,28,28,28,28,27,28,28,27,27,28,27,26,27,28,27,27,28,28,29,28,28,28,28,28,28,28,29,28,27,28,28,27,27,28,28,28,27,27,27,27,26,25,27,27,27,27,26,28,26,28,27,27,27,26,26,26,25,25,25,26,25,25,23,25,24,22,23,24,21,19,23,21,18,19,21,21,17,16,16,16,14,13,11,11,13,9,10,7,6,7,6,5,5,5,4,4,4,3,1,0,1,2,3,4,4,4,4,6,6,6,8,8,6,8,10,8,7,8,12,11,9,14,11,13,14,16,12,11,16,16],[23,24,22,24,25,25,27,27,26,27,26,26,28,26,28,27,29,28,27,29,29,28,29,29,29,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,29,30,29,29,30,29,29,29,29,29,29,29,28,29,29,29,29,29,29,30,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,29,29,29,29,29,29,29,29,30,30,30,29,29,30,29,29,29,29,29,29,29,29,30,30,29,30,30,29,29,29,29,29,29,29,28,30,29,28,28,30,28,27,29,28,30,28,29,29,28,29,30,29,28,30,29,29,29,29,30,29,30,29,29,29,29,29,29,29,29,29,30,29,29,29,29,30,29,30,29,29,28,29,29,29,28,29,29,27,29,27,26,28,29,26,26,29,27,26,28,29,26,25,28,27,29,29,27,28,29,28,27,29,30,29,29,27,29,29,29,28,28,30,29,26,30,30,27,27,29,29,26,28,30,29,26,29,30,28,27,30,29,29,29,29,28,29,29,29,29,29,27,28,29,28,27,28,27,27,26,26,26,27,26,26,26,25,24,24,25,27,25,24,25,26,25,25,27,27,25,25,28,26,25,27,26,28,27,29,27,29,26,30,29,26,26,29,27,25,28,29,26,24,29,28,26,25,27,28,28,29,28,26,29,28,25,27,28,27,25,27,27,24,22,25,25,27,28,27,29,28,28,28,28,28,29,29,29,29,29,29,29,29,29,30,30,29,30,30,30,29,30,29,29,30,30,29,29,30,30,29,30,29,29,29,30,30,30,30,30,29,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,29,30,29,29,29,29,30,30,29,30,30,30,30,30,30,29,29,30,29,29,30,29,28,29,28,28,28,29,28,29,29,29,28,28,28,26,24,24,27,26,25,25,27,26,25,27,27,27,26,27,28,26,27,24,25,25,24,23,26,26,26,25,27,26,27,26,28,27,29,27,27,27,28,27,28,29,27,27,28,27,26,27,26,26,25,23,25,24,24,24,24,23,22,23,22,21,20,20,19,18,17,18,20,21,18,23,24,23,26,24,27,26,25,24,24,24,23,22,24,24,23,22,23,24,24,24,24,26,26,25,26,26,26,27,28,27,28,29,28,30,30,27,29,29,29,29,28,27,26,29,28,30,28,29,30,29,30,30,30,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,27,28,30,28,26,28,28,25,25,28,27,24,25,28,25,23,25,26,24,24,24,23,22,25,23,22,24,26,25,23,25,26,25,25,26,26,26,26,26,28,28,29,28,29,28,29,29,29,29,29,29,29,30,29,30,29,30,29,29,29,29,29,30,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,29,29,28,29,28,29,29,30,29,29,29,29,28,29,29,27,27,29,29,26,27,28,26,25,28,27,26,25,26,25,26,28,26,26,29,29,27,27,29,28,29,29,28,28,29,29,29,29,29,29,29,28,29,29,29,29,29,27,29,29,28,27,29,29,26,28,29,27,26,27,27,28,28,28,28,28,29,28,28,29,29,29,28,29,28,28,28,29,29,29,28,27,27,27,27,27,27,28,27,27,28,26,28,27,26,27,26,26,26,25,24,23,26,24,23,23,24,23,23,23,22,22,20,22,21,18,20,22,21,17,17,16,16,15,15,12,13,14,9,10,9,6,8,6,6,6,4,4,4,4,3,2,1,0,1,2,3,3,3,4,4,4,5,7,6,5,6,8,6,6,8,10,9,9,11,11,12,14,13,13,12,15,16],[23,24,23,24,25,25,27,27,26,27,27,26,28,27,29,28,29,29,28,30,29,29,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,30,30,29,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,28,29,28,30,29,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,27,30,30,28,28,30,29,27,28,29,27,27,28,27,29,29,28,29,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,30,30,29,30,30,30,29,30,29,29,29,30,30,29,29,29,30,30,29,30,30,29,28,29,29,28,27,28,28,26,26,25,25,25,25,25,26,27,27,26,26,28,28,27,28,28,27,27,29,28,28,29,28,28,30,30,29,30,29,30,30,29,29,30,29,28,29,30,29,28,29,29,29,27,29,30,29,29,29,28,29,29,28,28,28,28,26,28,28,27,25,27,26,28,28,27,29,29,29,28,29,29,29,29,30,30,29,29,29,30,30,29,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,30,30,31,31,31,31,31,31,30,31,31,30,30,29,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,30,29,29,29,29,29,28,29,27,27,26,28,28,26,27,29,28,27,29,29,27,27,29,29,28,27,26,26,26,24,24,26,26,26,27,27,27,28,28,29,29,29,29,29,29,29,28,29,30,29,28,29,29,27,28,27,28,27,27,26,27,27,26,26,25,25,25,25,22,21,22,20,20,18,20,22,21,18,23,24,24,25,25,26,27,27,25,25,27,25,23,25,25,24,24,26,26,27,27,27,27,28,28,29,28,28,30,29,29,30,30,29,30,29,30,29,30,29,29,29,29,29,29,30,30,30,30,30,30,30,31,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,28,29,30,29,28,29,29,28,28,28,28,27,28,27,26,25,25,25,25,27,27,25,27,27,27,27,28,28,27,28,28,29,28,29,29,29,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,28,28,29,28,27,26,28,27,28,29,28,28,29,29,28,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,28,30,29,28,29,29,28,29,29,29,30,29,29,30,30,30,29,29,29,30,29,29,30,29,29,30,29,29,29,28,28,29,27,27,28,28,29,28,27,28,28,28,28,27,27,29,27,28,26,27,27,26,27,24,25,26,27,23,24,24,22,20,23,23,19,20,21,21,18,17,18,17,15,14,12,12,14,11,11,10,8,9,7,7,7,6,5,5,4,4,3,2,1,0,1,2,3,2,4,4,4,4,5,5,4,5,7,6,5,5,7,8,8,11,9,11,13,15,12,12,14,14],[22,24,24,25,25,25,26,27,26,27,27,27,28,26,28,27,28,28,28,29,29,28,30,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,30,29,29,29,29,29,29,29,28,29,29,29,29,28,29,28,28,28,28,28,28,28,29,28,28,29,29,29,29,29,29,29,28,29,29,30,29,29,29,29,28,29,30,29,29,30,29,29,29,30,29,29,30,30,29,29,29,29,29,29,29,29,29,29,29,29,30,29,28,30,29,29,29,29,29,29,28,29,29,29,28,29,28,29,28,29,29,28,29,29,29,28,30,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,29,28,29,29,29,28,29,29,29,29,30,29,29,29,27,29,28,27,28,29,27,27,29,28,27,28,29,27,27,28,28,29,28,27,29,29,29,28,29,30,30,30,28,30,28,29,29,27,29,28,27,29,29,28,28,28,29,27,28,29,29,28,29,29,29,27,29,28,29,28,29,28,28,28,29,28,29,29,28,29,29,28,28,28,26,27,26,26,24,26,27,27,25,24,25,25,27,25,26,27,28,26,27,27,27,27,27,28,28,27,28,28,27,28,29,27,29,27,29,29,27,28,29,28,26,27,29,27,26,29,29,27,26,27,29,27,28,28,27,28,28,27,26,27,27,25,27,27,24,23,25,25,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,30,30,29,29,30,29,29,30,30,29,30,30,30,30,29,30,29,29,29,30,29,29,29,28,28,29,29,28,29,28,28,29,29,30,29,29,30,30,29,30,29,29,29,29,29,29,30,30,30,30,29,30,29,30,29,29,29,29,30,29,30,30,29,30,30,30,30,29,29,30,29,30,29,29,29,28,29,28,29,28,28,29,28,28,28,28,27,27,27,27,25,25,27,26,25,26,26,26,25,28,27,26,26,28,27,27,27,24,24,24,24,24,25,25,26,25,26,26,28,26,28,27,28,27,27,27,28,27,27,28,28,28,27,28,26,27,26,26,27,25,26,26,25,24,25,23,23,23,22,22,21,19,18,19,16,19,22,21,18,22,20,24,24,24,25,26,26,26,24,26,23,24,25,24,25,26,26,26,27,26,26,27,28,27,28,28,27,29,28,29,29,29,28,29,30,28,30,30,29,29,29,28,28,29,28,29,28,28,29,30,29,30,30,29,29,30,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,28,29,28,27,28,28,27,27,28,28,26,25,27,26,25,25,26,25,24,25,24,24,26,26,24,25,26,28,27,27,26,27,27,27,26,27,28,27,28,29,29,29,28,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,28,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,29,29,29,29,28,28,29,28,29,29,29,29,28,29,29,28,28,29,27,28,28,29,27,26,27,27,27,25,27,26,25,27,28,27,28,29,28,28,28,27,29,29,28,28,28,29,29,28,29,29,28,28,28,29,29,28,29,27,29,28,27,27,29,28,27,28,29,27,27,28,29,28,29,28,27,28,28,28,28,28,29,28,28,28,28,27,27,28,29,28,28,27,27,27,27,28,26,28,27,27,29,27,28,28,26,27,28,27,27,26,26,25,26,25,23,24,25,24,22,23,23,21,20,22,21,20,21,22,21,18,17,15,15,15,13,11,11,15,10,11,8,7,9,7,7,8,6,5,5,5,3,4,2,2,1,0,1,2,1,2,2,3,4,4,4,5,4,5,5,4,5,6,7,6,9,8,9,10,12,9,10,12,13],[21,23,23,24,25,25,26,26,26,26,26,26,28,26,28,27,28,27,26,28,28,27,29,29,28,28,29,28,29,29,28,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,30,29,29,30,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,29,30,29,30,30,29,29,30,29,28,30,29,30,28,29,30,28,30,30,29,28,30,30,29,30,30,30,30,30,30,30,30,30,29,29,29,29,30,29,29,30,29,29,30,30,30,30,29,29,30,30,30,29,30,30,28,29,29,27,29,29,27,29,30,29,27,29,29,27,27,29,28,28,29,27,29,29,29,28,30,30,29,29,28,30,30,30,29,28,30,29,28,30,30,28,28,29,30,28,29,30,29,29,30,30,29,28,29,29,29,28,29,29,29,28,29,29,29,29,29,29,29,29,29,28,27,28,27,27,26,25,26,27,27,24,25,25,27,26,24,28,27,27,26,28,28,26,28,29,27,27,29,28,29,29,29,28,29,28,30,30,28,28,30,29,27,28,30,29,27,29,29,28,27,29,29,29,29,29,28,29,29,28,29,28,28,26,28,28,27,25,27,27,28,28,28,29,29,29,29,29,28,29,29,29,29,29,29,29,29,30,29,29,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,29,29,30,29,30,30,30,29,29,28,29,29,28,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,29,29,29,29,29,30,30,29,29,30,30,30,30,30,29,30,30,29,29,29,29,28,28,28,29,30,29,29,29,29,29,28,29,27,27,27,28,27,27,27,29,27,26,28,28,28,27,29,28,26,27,24,25,25,25,24,26,26,26,26,26,27,27,27,28,28,28,28,27,28,29,28,28,29,28,28,28,28,28,27,27,27,26,25,26,26,26,26,24,24,25,24,23,22,21,20,18,18,15,18,22,21,19,23,24,24,25,25,26,26,25,26,25,26,25,23,26,25,24,23,25,27,24,25,26,27,26,28,27,28,28,29,29,28,28,29,29,29,29,29,30,29,29,29,29,28,28,29,29,30,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,29,30,30,29,27,29,29,28,28,29,29,26,27,28,26,26,27,26,25,24,25,22,25,25,25,23,26,26,26,25,27,27,26,27,27,28,28,27,28,28,29,29,30,30,29,30,29,30,29,30,30,30,30,30,30,30,29,29,29,29,30,30,30,29,29,30,30,30,29,29,30,29,30,29,29,30,29,29,30,30,29,30,29,29,30,29,29,30,30,30,29,30,30,29,30,30,28,29,30,29,28,29,29,29,27,28,29,27,27,27,26,27,29,27,27,29,29,27,29,30,29,29,29,29,29,30,30,30,30,30,30,30,29,29,30,29,30,30,29,30,30,29,28,30,29,28,28,29,28,27,29,28,29,29,29,29,29,29,28,29,29,30,29,29,30,29,29,29,29,30,29,28,28,29,27,28,28,28,29,28,28,27,27,28,27,27,28,27,26,26,27,25,22,27,26,23,23,26,25,22,24,23,22,20,23,21,18,20,23,21,18,17,15,15,14,14,12,11,14,12,12,10,8,11,9,10,10,7,7,7,7,5,4,4,3,2,1,0,1,2,2,2,2,3,4,4,4,4,5,5,5,5,6,7,9,9,9,11,11,12,12,11,13,15],[22,24,24,26,26,26,27,27,27,27,27,28,28,27,28,28,28,28,27,29,29,28,29,29,29,29,29,29,29,29,29,30,30,30,29,30,30,30,30,30,30,29,29,29,30,29,29,29,29,29,29,29,29,30,29,29,29,30,29,29,29,28,29,28,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,29,30,30,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,29,28,30,29,28,29,29,29,29,28,29,30,28,27,29,28,29,27,29,29,27,29,29,29,29,30,29,29,29,30,30,29,30,29,29,29,29,28,29,28,28,28,29,28,29,29,28,29,29,29,29,29,28,29,30,29,28,29,30,27,29,28,26,29,29,26,27,29,28,26,27,29,27,27,28,27,29,28,27,29,29,28,28,29,30,29,29,29,29,29,30,29,29,30,28,27,29,29,28,27,29,29,28,29,29,29,28,29,29,29,27,29,28,29,28,29,29,28,28,28,29,28,28,29,29,28,28,28,28,28,27,26,27,25,23,25,26,24,20,25,25,27,26,25,26,27,26,27,28,28,27,27,28,28,27,29,28,28,29,30,28,29,29,29,30,27,28,29,29,27,28,29,28,27,29,29,27,26,29,29,28,29,28,26,28,28,27,26,28,27,25,27,26,25,24,24,26,27,27,27,28,28,28,28,28,28,29,28,28,29,28,28,28,29,29,29,29,29,29,29,30,29,29,29,29,30,30,29,29,30,29,29,30,29,29,30,30,29,30,29,29,29,28,28,29,29,28,29,29,29,29,29,29,29,29,30,30,30,29,30,29,30,29,29,29,30,30,30,29,29,29,29,30,29,29,29,29,30,29,29,30,29,29,29,30,30,29,29,30,29,30,29,29,29,28,28,28,28,28,28,29,28,29,28,28,28,27,27,27,25,26,27,26,25,27,27,26,26,28,27,27,26,29,28,27,27,24,26,25,26,23,26,25,26,26,26,26,27,26,28,28,28,26,28,28,28,26,27,29,27,27,28,27,27,27,26,26,26,25,25,25,25,24,24,24,23,22,23,22,22,21,19,19,17,18,23,20,18,23,21,24,24,23,25,26,24,25,24,25,24,24,24,25,24,24,26,27,26,26,26,27,27,27,28,28,28,29,29,28,29,29,29,29,30,29,30,29,29,29,29,29,28,30,29,30,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,30,29,29,29,29,29,29,29,30,29,27,29,29,28,27,29,28,26,26,27,26,25,26,26,25,24,25,23,25,27,26,24,27,27,27,27,28,28,27,27,28,28,28,28,29,29,29,29,29,29,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,29,29,29,28,28,29,28,28,29,29,29,29,28,29,29,28,29,29,28,29,28,29,29,29,29,29,29,29,29,29,29,28,28,29,28,28,28,29,27,26,28,28,26,26,28,26,27,28,27,27,29,29,27,29,29,28,28,29,29,28,29,29,29,28,29,29,28,28,28,28,29,29,29,28,29,29,28,27,29,28,27,28,29,27,27,28,28,28,28,28,27,28,28,28,27,28,29,28,29,29,28,28,28,29,28,28,27,26,27,27,27,27,26,28,27,26,28,27,28,27,27,28,27,25,27,27,26,26,26,26,23,24,25,26,23,23,23,23,22,22,22,20,21,22,21,19,17,16,15,15,13,13,13,15,12,12,11,11,11,10,11,11,8,7,8,7,6,5,4,3,2,2,1,0,1,2,2,2,2,4,3,3,3,4,4,4,4,5,6,5,9,7,9,10,13,11,10,13,13],[22,23,24,25,25,25,27,27,26,27,27,27,28,27,29,27,29,29,28,29,29,29,30,29,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,30,30,29,30,29,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,29,30,30,29,28,29,29,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,29,30,29,30,30,29,29,30,29,29,30,30,29,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,29,28,30,30,28,28,30,29,27,28,29,27,26,29,28,29,28,27,29,30,29,28,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,30,30,29,30,29,29,29,29,29,29,29,30,29,29,29,29,29,30,29,30,29,29,29,29,29,28,28,28,28,27,25,26,26,25,24,25,26,28,27,26,27,29,27,27,28,28,27,27,29,27,26,28,27,28,29,29,28,30,29,30,30,29,29,30,29,28,28,30,29,28,29,29,28,27,29,29,28,29,29,27,28,29,28,28,29,28,27,28,29,28,25,27,26,28,28,27,28,28,28,28,29,29,29,29,29,29,28,29,28,28,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,30,29,29,28,29,29,28,29,27,27,25,29,28,27,27,29,28,27,29,29,27,27,29,29,27,26,25,26,26,25,26,27,26,27,27,28,28,28,28,29,29,30,28,29,30,29,28,29,30,29,28,29,28,27,28,27,27,27,26,26,27,26,25,26,25,24,23,25,23,21,21,19,17,16,20,23,21,18,23,24,23,26,24,26,28,27,27,26,27,26,23,25,25,25,23,24,27,25,24,26,27,28,27,29,28,28,30,29,28,29,30,29,29,30,29,30,30,29,29,30,28,28,30,30,30,30,29,30,30,30,31,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,30,28,29,29,28,28,29,29,27,27,28,28,27,27,27,27,25,25,24,25,27,26,25,27,27,26,27,28,27,27,26,27,28,28,28,29,29,29,29,30,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,29,29,30,30,30,30,29,30,30,29,29,29,29,29,29,29,30,29,30,30,29,29,30,30,29,29,29,29,29,28,29,28,28,28,28,28,27,26,28,27,29,29,28,27,29,29,26,28,29,29,29,30,30,29,30,30,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,28,30,29,27,28,30,28,27,29,29,30,29,29,29,29,30,29,30,29,30,29,29,29,29,29,29,29,29,29,29,28,29,28,27,28,28,29,28,27,29,27,29,27,26,26,26,24,26,27,24,26,26,26,23,24,26,26,24,24,23,23,20,24,22,19,21,23,22,19,18,17,16,16,14,12,12,14,11,11,10,8,10,9,8,9,7,6,6,6,5,5,3,3,2,2,2,1,0,1,1,1,2,2,2,2,2,3,3,3,3,3,5,5,7,6,8,9,12,10,9,11,12],[22,24,25,24,26,26,27,27,26,27,27,26,28,26,28,27,28,28,28,29,28,28,29,29,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,29,30,29,29,29,29,29,29,29,29,28,28,28,28,28,28,28,28,28,29,29,28,29,28,29,28,29,28,29,29,29,29,29,30,29,29,29,29,30,29,29,29,29,29,29,29,29,29,30,29,29,30,30,29,29,29,29,29,29,29,29,30,29,29,29,29,29,30,30,29,30,29,30,29,29,29,28,29,29,27,28,29,28,25,28,27,29,26,30,29,28,29,29,29,28,30,29,29,29,30,29,29,29,29,29,29,29,28,29,28,29,28,29,28,29,29,29,29,29,29,29,30,29,29,29,29,28,29,29,26,29,28,26,28,29,26,27,29,27,25,27,29,25,26,28,27,28,28,26,28,29,27,27,28,29,28,29,28,29,29,29,28,28,30,28,27,29,29,27,27,29,30,28,28,29,29,28,29,29,28,28,28,28,28,28,28,29,29,28,29,29,29,28,28,29,29,27,28,27,27,26,27,26,26,26,25,26,25,25,26,25,27,26,25,25,27,25,26,27,27,24,26,28,25,25,27,26,27,28,29,27,29,28,29,29,27,28,29,28,26,29,29,27,26,28,28,27,26,28,29,29,28,29,27,28,28,26,27,28,27,25,27,27,25,24,25,25,27,28,27,27,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28,28,28,28,28,28,27,28,28,28,28,29,28,29,28,28,28,28,29,29,28,29,29,29,29,28,29,28,28,29,28,28,29,29,28,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,28,27,27,27,27,27,28,28,28,29,28,28,28,28,26,26,24,26,26,25,26,27,26,25,28,27,26,26,27,27,26,27,23,24,24,23,22,25,25,25,26,26,25,26,26,27,27,28,27,28,27,28,27,28,28,27,27,28,28,27,27,27,26,26,25,26,25,24,25,23,21,23,22,22,20,20,19,19,19,16,19,19,20,18,21,23,23,24,25,25,26,24,24,24,25,23,23,24,23,23,22,24,24,23,23,25,26,25,26,27,28,25,28,28,27,28,29,28,29,29,27,28,28,27,27,28,27,27,28,29,29,28,28,29,29,29,30,29,29,29,29,29,28,28,29,29,28,29,28,29,29,29,29,29,29,29,29,30,29,28,29,29,29,27,29,29,27,27,29,28,24,26,27,26,24,26,25,25,24,24,23,21,25,26,23,24,26,25,23,26,27,24,25,26,26,28,28,28,28,29,29,29,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,28,28,29,28,29,27,28,27,28,28,28,27,27,28,28,29,29,29,30,29,30,29,29,29,29,29,29,29,29,29,28,28,29,29,27,26,28,28,27,27,27,26,27,28,27,27,28,29,27,28,28,28,28,28,29,29,29,29,29,29,29,29,28,29,28,29,29,29,29,28,29,29,28,27,29,28,28,28,28,27,27,28,27,28,27,29,28,26,27,28,27,27,29,28,27,28,28,28,27,28,29,28,28,27,27,27,27,27,27,27,27,26,27,26,28,26,26,26,26,24,26,26,24,21,26,26,21,22,24,24,20,23,22,20,19,20,21,17,19,20,20,17,16,16,15,15,14,11,11,13,12,12,10,8,10,8,8,8,7,6,6,6,6,5,4,4,3,2,3,2,1,0,1,2,2,2,3,3,3,4,3,4,3,4,5,6,8,7,8,9,10,9,9,10,11],[22,22,23,24,24,26,26,26,26,26,25,25,26,25,27,26,27,26,27,28,27,28,28,28,28,29,28,29,29,29,29,29,29,30,29,30,29,30,30,30,30,30,29,30,29,30,29,29,30,30,29,29,30,29,30,29,29,29,29,29,29,28,29,28,29,28,28,29,28,29,29,29,29,29,29,29,28,28,28,29,30,29,29,30,29,29,29,29,30,30,29,29,30,29,29,30,30,29,29,29,30,29,29,30,30,29,30,29,28,28,28,28,28,30,28,29,29,29,29,29,29,29,29,29,29,29,29,30,29,28,28,29,28,26,28,28,29,28,29,29,29,29,29,29,29,30,29,29,29,30,29,29,29,29,29,29,29,28,29,28,28,29,28,28,29,28,28,28,29,29,28,29,29,29,29,30,29,29,29,28,29,28,26,29,29,27,26,29,28,26,28,29,26,26,28,27,28,29,27,29,29,28,28,28,29,29,29,29,29,29,29,28,29,29,28,29,30,29,28,28,29,29,28,28,29,29,28,29,29,29,28,28,28,29,28,28,29,27,27,28,29,28,28,29,29,28,28,29,28,27,27,27,27,24,24,26,26,24,24,24,25,27,27,25,25,27,26,26,27,27,25,27,28,27,26,28,27,29,28,29,28,29,28,29,30,28,28,29,29,27,28,29,28,27,28,29,28,27,28,29,28,28,28,27,28,28,27,28,28,27,26,28,27,26,25,27,27,27,27,28,28,28,28,28,28,27,28,29,28,27,28,27,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,27,28,27,27,28,28,28,29,28,28,28,28,27,26,25,27,27,26,27,28,27,26,28,27,27,27,28,28,26,26,23,25,25,24,22,27,26,26,26,27,25,26,26,28,27,28,27,28,26,29,27,27,28,28,28,27,28,28,27,27,26,27,25,26,26,26,24,24,24,25,24,24,23,22,19,19,19,16,19,23,22,18,24,22,24,25,23,26,26,25,26,24,25,25,24,24,25,24,23,23,26,25,25,25,27,25,28,27,28,26,29,29,27,28,29,28,29,29,28,29,29,28,28,28,27,28,28,29,29,28,29,29,29,29,30,30,30,29,29,29,28,28,29,29,29,29,30,29,29,29,29,29,29,29,29,30,29,29,29,29,29,27,29,29,27,27,29,28,26,27,27,27,26,26,26,25,25,25,24,24,26,26,24,25,26,26,25,27,27,26,26,26,28,28,26,28,29,29,29,29,29,28,30,29,30,29,29,29,29,29,29,29,30,29,29,29,28,29,29,30,29,28,29,29,28,28,28,28,27,28,29,27,29,28,28,29,29,27,29,29,28,28,28,29,29,29,29,29,29,29,29,29,29,28,29,29,28,27,29,28,28,27,28,28,27,27,27,27,27,28,26,26,29,29,27,28,28,28,29,29,28,29,29,29,29,29,29,29,28,28,28,28,29,29,29,28,29,29,29,28,29,29,27,28,29,28,27,29,28,28,28,29,29,28,29,28,28,28,29,29,28,29,28,28,27,28,29,28,28,28,28,27,27,27,27,28,27,27,27,26,28,26,27,26,25,25,26,27,24,23,27,26,23,23,25,25,22,24,24,22,21,24,22,20,22,22,21,20,17,17,15,15,15,12,11,13,12,11,10,8,10,10,10,10,7,7,7,6,5,5,4,3,3,2,2,3,2,1,0,1,2,2,2,3,3,3,3,4,4,4,4,5,7,8,9,10,10,10,10,10,12],[22,24,25,26,26,27,27,27,27,27,26,26,27,26,27,28,28,28,27,29,28,27,29,28,28,29,28,29,29,29,28,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,28,29,29,29,29,29,28,28,28,28,28,28,28,29,28,29,28,29,29,28,29,28,29,29,29,29,29,29,29,29,29,30,29,30,29,30,30,30,29,29,30,30,29,29,29,29,30,29,30,29,29,30,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,29,29,29,28,29,29,29,29,29,29,29,30,28,28,29,29,30,27,29,29,29,29,30,29,29,30,29,29,29,30,29,30,30,29,29,29,29,28,29,28,28,29,29,28,29,29,28,29,29,29,29,29,28,29,29,29,29,29,29,28,29,28,27,29,29,26,28,29,28,26,28,29,27,26,28,27,29,28,27,29,29,28,29,29,30,29,29,28,29,29,30,29,28,30,29,28,29,30,29,28,29,29,29,29,29,29,28,29,29,29,28,29,29,29,28,29,29,28,28,28,29,29,28,29,29,29,28,29,28,28,28,27,27,27,23,26,26,25,21,26,26,27,26,25,27,28,26,27,28,27,25,27,29,27,27,28,28,28,29,29,28,29,28,29,30,28,28,29,29,27,28,30,28,27,29,29,28,27,29,29,28,29,29,27,29,28,28,28,28,28,26,28,28,26,25,26,26,28,28,27,28,29,28,28,28,28,29,28,28,28,28,28,28,28,28,28,29,28,29,29,29,28,29,28,28,28,29,29,29,29,28,28,29,29,28,29,29,28,29,29,29,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,29,28,29,29,28,29,29,28,28,28,28,28,27,28,27,27,29,28,29,28,29,28,27,27,26,26,24,27,26,26,27,28,27,26,28,28,27,27,28,28,27,28,25,26,26,25,24,27,26,26,26,27,27,27,26,28,27,28,26,28,28,28,27,28,29,27,28,28,28,27,28,27,26,27,25,25,26,26,25,25,25,25,23,24,23,21,21,20,18,17,19,22,20,18,23,22,24,25,24,26,27,26,26,25,25,24,24,26,25,24,23,26,26,25,26,27,27,26,28,28,27,27,29,29,27,29,29,29,29,29,27,29,29,29,28,29,27,28,29,28,29,28,29,29,29,29,29,29,28,29,28,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,30,29,27,29,29,28,26,29,28,26,26,28,28,26,26,26,26,25,24,24,25,27,26,25,27,27,26,26,28,27,26,27,27,28,27,28,28,28,28,29,29,29,28,29,29,28,29,29,29,29,29,30,29,29,29,29,29,28,30,29,30,29,29,29,29,29,28,27,28,27,28,28,28,28,28,28,29,29,27,28,29,28,29,29,29,30,29,30,29,30,29,29,29,29,28,28,29,28,27,28,28,27,27,28,28,27,27,28,26,26,28,26,26,29,29,28,28,29,28,28,28,28,28,29,29,29,28,29,29,29,28,28,29,29,29,29,28,29,29,28,27,29,29,26,28,28,27,26,28,28,28,28,28,28,28,28,27,28,28,29,28,28,29,28,28,28,28,28,28,28,27,28,28,27,28,27,29,28,27,28,28,29,28,26,27,27,26,27,26,27,24,26,25,22,23,25,25,23,23,23,22,21,23,22,20,21,22,22,19,18,16,14,15,13,12,12,13,12,11,11,10,11,10,10,11,8,7,7,8,7,6,5,4,4,3,2,2,2,1,1,0,1,2,3,3,2,3,3,3,3,3,3,4,6,6,7,8,10,9,9,10,11],[23,24,25,25,26,26,27,27,26,27,27,27,28,27,28,28,28,28,27,29,28,28,29,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,29,30,29,29,29,29,29,29,29,28,28,28,28,28,28,28,28,29,28,29,29,28,28,28,29,28,29,28,28,29,29,29,29,30,29,29,30,29,30,30,29,29,30,29,29,30,30,29,29,29,30,29,30,29,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,30,29,29,29,30,29,29,29,30,29,27,28,29,30,29,30,30,29,29,29,30,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,28,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,28,30,28,26,29,29,27,27,29,28,25,27,29,27,26,28,27,29,29,27,28,30,29,27,29,29,29,29,29,30,29,29,29,29,30,29,28,29,29,29,28,29,29,28,28,29,29,28,29,29,28,27,28,28,28,29,29,29,28,29,29,29,28,29,29,28,28,27,28,27,26,26,27,26,25,25,25,25,24,24,24,24,26,26,25,24,27,26,25,27,27,25,26,28,27,27,28,26,27,28,28,28,29,28,29,29,28,28,29,27,27,28,28,27,26,27,28,27,26,27,28,28,28,27,27,28,27,26,26,27,26,24,26,27,26,24,26,25,26,27,26,27,28,28,27,28,28,28,28,28,28,28,27,28,28,28,28,28,28,28,29,29,28,29,29,28,29,29,29,28,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28,27,27,29,28,28,29,28,28,27,27,26,25,25,27,26,25,26,27,26,26,28,27,27,26,28,27,27,26,24,24,25,23,23,25,25,25,26,26,26,28,27,27,28,29,28,27,28,28,27,28,29,28,26,27,27,25,25,26,24,24,25,24,23,24,25,24,22,23,24,23,22,20,20,19,16,18,20,21,21,18,22,21,24,22,23,23,25,25,24,24,24,23,23,24,23,23,23,23,25,25,24,24,26,27,27,27,26,25,28,28,28,28,29,28,29,29,28,28,29,27,28,28,26,27,29,29,29,29,28,29,29,29,30,30,29,29,29,29,29,28,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,28,29,28,28,28,27,26,27,27,26,26,25,25,26,26,24,25,25,23,25,23,25,25,23,24,26,26,24,27,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,28,28,29,28,28,29,28,28,28,28,28,28,28,28,28,29,29,29,29,30,29,29,29,29,29,29,29,29,28,28,29,28,27,28,28,26,27,29,27,27,25,26,27,26,28,27,27,27,28,27,29,27,27,28,28,29,28,28,29,29,29,29,29,28,28,29,28,29,28,29,28,29,28,27,27,29,28,26,28,28,27,28,28,27,28,27,29,28,27,28,28,28,27,29,28,28,29,29,28,28,28,29,27,27,26,27,26,27,26,28,28,27,27,27,26,27,26,26,25,26,25,26,26,24,23,26,25,22,24,24,24,21,25,23,21,19,23,22,19,21,21,20,19,17,18,15,16,14,13,12,14,11,11,11,9,9,8,9,9,8,8,7,7,6,5,4,4,3,3,3,2,2,2,2,1,0,1,1,1,1,1,2,2,2,2,3,3,4,4,6,7,8,8,8,8,9],[23,22,24,24,24,25,26,25,26,26,25,25,27,26,27,27,27,27,27,29,28,28,29,28,28,29,29,29,29,29,29,30,30,30,29,30,29,30,29,29,30,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,28,28,28,28,28,27,27,26,28,26,27,28,27,28,29,28,28,28,28,28,27,27,28,29,29,28,28,29,29,28,29,28,29,29,28,28,29,28,28,27,28,27,28,28,28,28,28,28,28,28,28,27,28,28,28,27,27,28,28,28,27,28,28,28,28,28,28,28,27,28,28,28,28,28,28,29,27,26,28,28,28,28,28,28,29,29,28,28,28,29,28,28,28,28,28,28,29,28,27,28,28,26,27,26,27,28,28,26,28,28,27,27,28,28,28,28,28,29,28,28,28,28,29,28,29,28,26,29,28,27,26,29,27,26,29,29,27,26,28,27,29,27,26,29,29,27,28,28,28,27,28,29,28,28,28,29,29,29,29,29,29,29,29,28,28,29,28,27,28,28,28,28,29,28,27,28,27,27,27,28,28,27,27,28,28,28,28,28,28,28,27,28,26,27,26,26,27,25,25,25,24,24,24,25,24,26,25,25,26,26,26,26,27,27,25,27,28,27,26,28,26,28,28,29,28,29,28,29,29,28,27,28,27,27,27,28,28,27,27,28,28,26,28,28,27,28,28,27,27,28,27,26,27,27,25,26,27,25,24,26,25,26,27,26,27,28,28,27,27,27,28,28,27,27,27,26,27,27,28,28,27,27,27,28,27,28,27,27,27,28,28,28,28,28,28,28,28,29,28,29,29,29,29,29,29,28,29,28,29,28,28,29,29,28,29,29,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,29,29,28,28,27,28,26,27,28,28,28,29,27,28,26,28,25,25,25,26,27,25,25,27,26,25,27,27,26,26,27,27,26,27,24,24,24,24,22,26,25,26,25,26,26,26,26,27,27,28,27,27,27,28,26,27,28,26,27,28,28,26,25,26,24,25,24,24,24,25,25,22,23,24,22,23,22,20,18,18,18,15,18,22,21,19,23,23,24,22,24,24,24,24,25,23,24,23,24,22,23,23,21,23,25,24,24,25,27,26,27,26,27,27,28,28,27,28,28,27,28,28,28,27,28,26,27,28,27,29,28,29,29,28,28,29,28,28,28,28,28,27,28,27,27,27,27,27,27,28,28,28,28,28,29,28,29,28,29,29,29,29,28,29,28,28,27,28,27,26,28,27,26,26,27,26,26,25,25,24,25,24,24,24,24,25,24,26,24,26,26,26,27,26,26,26,27,27,28,28,28,28,29,29,28,28,29,28,29,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,27,28,28,27,27,26,27,26,26,27,26,26,25,27,27,27,26,26,28,26,28,27,28,29,29,29,29,29,28,29,28,28,27,29,28,27,28,28,28,27,28,29,27,25,27,26,27,27,28,28,28,28,29,28,28,28,27,28,28,29,28,28,29,28,28,28,29,28,28,28,28,29,28,28,27,29,28,27,27,29,28,27,28,28,26,28,28,26,27,27,28,28,27,27,28,27,27,29,27,27,28,28,27,26,28,29,27,28,26,27,25,26,26,27,27,26,26,26,26,27,26,27,26,27,26,27,27,26,22,25,27,22,21,25,25,19,24,24,21,18,23,22,19,20,21,20,19,16,15,14,14,14,11,11,14,12,11,10,9,10,9,9,9,8,8,7,7,6,5,5,4,3,3,3,3,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,3,4,5,6,7,8,8,8,9,9],[24,24,24,24,25,26,27,27,26,27,26,26,27,26,28,27,27,26,27,28,27,27,29,28,28,29,28,28,29,29,28,29,29,30,29,29,29,29,29,29,30,29,29,29,29,30,29,29,29,29,29,29,28,29,29,29,29,29,29,29,28,27,28,28,29,28,28,29,28,29,29,28,29,29,29,29,28,28,29,29,29,28,29,29,29,29,29,29,30,29,29,28,29,29,28,29,29,28,29,29,29,29,28,29,28,28,29,28,28,28,27,28,28,28,28,28,28,28,29,28,28,28,29,28,28,29,29,29,29,29,28,29,28,26,28,28,28,28,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,28,29,28,28,27,28,29,28,28,28,28,27,28,29,29,28,29,29,29,28,29,28,29,29,28,29,28,26,29,29,26,26,29,27,25,28,29,26,26,28,27,28,28,27,29,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,27,29,29,28,28,29,29,28,29,29,29,28,29,29,29,27,28,28,28,28,28,29,27,27,28,28,28,28,29,29,28,27,28,27,27,26,26,27,24,23,26,25,24,22,24,25,27,26,24,26,27,24,26,27,27,25,27,28,26,26,28,27,27,28,29,27,29,27,29,29,27,27,29,28,26,27,29,29,26,28,28,28,25,28,29,27,28,28,26,28,28,27,26,27,27,25,26,26,25,23,25,24,27,27,26,27,28,28,27,28,28,28,28,28,28,28,27,28,28,29,29,29,29,29,29,29,28,29,29,28,29,28,29,29,29,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,28,29,29,29,29,28,27,27,27,27,27,28,28,28,28,27,28,26,26,24,25,22,26,26,25,25,26,25,24,27,26,25,26,27,27,25,27,23,24,24,25,23,26,25,26,25,26,25,26,25,28,27,28,25,27,27,28,26,27,29,25,27,27,28,26,26,25,25,25,23,23,24,24,22,24,22,22,22,23,22,19,20,18,18,16,18,21,20,17,22,21,22,23,23,25,26,24,24,23,24,22,23,25,23,21,22,25,25,24,25,26,26,26,27,27,26,26,29,28,27,29,29,28,29,29,28,29,29,28,28,29,27,28,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,27,29,29,27,26,28,28,24,24,26,26,23,23,25,25,22,23,21,24,24,22,23,25,25,24,24,26,25,26,27,26,27,26,27,28,28,28,28,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,28,29,29,29,29,29,29,29,28,28,27,28,27,27,28,27,28,27,28,29,28,27,28,28,27,29,29,28,29,29,29,29,29,29,29,29,29,28,28,28,27,26,27,27,27,24,27,26,25,23,25,24,25,27,24,25,27,27,26,28,28,27,27,28,28,27,28,29,29,28,28,29,28,28,28,28,29,28,28,27,29,28,27,26,28,27,25,27,28,25,25,28,27,26,27,27,27,27,28,28,28,28,29,28,28,28,27,27,27,28,28,27,27,25,27,25,26,26,25,27,26,25,27,25,28,26,25,25,25,25,25,26,24,24,24,22,23,22,23,23,22,22,22,22,20,22,21,19,19,21,20,18,16,15,13,14,13,11,11,14,12,12,10,10,11,11,11,11,8,8,8,8,6,6,5,4,3,3,3,3,2,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,4,5,5,7,7,7,7,8,8],[24,25,25,26,25,26,28,28,26,28,26,27,28,27,28,28,28,29,27,29,28,28,29,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,29,28,28,29,29,28,28,28,28,29,29,29,28,28,29,27,29,28,28,28,28,28,29,29,28,29,29,29,29,29,29,29,30,29,29,29,29,29,30,30,30,29,30,29,29,30,30,29,29,30,30,30,29,29,29,29,29,29,30,30,29,30,29,30,30,28,29,30,29,29,29,30,29,28,29,30,28,27,28,29,30,28,30,30,29,29,30,29,29,30,30,29,29,30,30,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,29,28,29,29,28,29,28,27,29,29,27,27,29,28,27,28,28,27,26,29,28,30,29,27,29,30,28,27,28,30,29,30,28,29,29,30,29,28,30,29,28,29,29,29,28,29,29,29,28,29,29,28,28,29,29,27,28,28,28,29,29,28,29,29,29,28,28,27,29,28,27,26,28,27,27,26,27,27,25,25,26,26,26,24,24,25,27,26,24,25,28,25,25,27,27,23,26,28,27,26,28,26,27,29,29,27,29,28,29,29,28,28,29,28,27,26,28,27,27,27,28,26,26,27,28,26,28,27,25,27,28,26,24,27,26,25,25,27,25,23,25,25,27,28,26,27,27,27,26,28,28,28,28,28,29,28,28,28,29,28,29,29,29,29,30,29,28,29,29,29,29,29,30,29,29,30,30,29,29,30,29,30,29,30,29,28,29,29,28,28,29,29,29,28,29,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,29,28,27,28,28,28,28,29,28,28,27,28,27,25,26,25,24,24,27,27,25,25,27,27,26,26,27,27,26,26,27,26,25,23,23,24,24,23,26,25,26,25,26,26,27,26,27,27,28,27,28,28,27,26,28,29,26,26,27,27,26,26,25,23,24,24,24,25,24,24,24,22,21,22,23,21,19,17,17,16,17,19,22,21,18,21,21,22,23,23,23,25,24,24,23,26,24,22,24,23,22,23,23,24,24,25,24,25,26,27,28,26,26,29,28,27,29,29,28,29,29,28,29,29,28,28,29,27,27,29,28,29,29,28,29,29,29,30,30,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,30,29,28,29,29,29,29,29,29,29,27,28,28,27,27,28,27,25,25,25,24,24,24,24,25,23,23,23,23,24,24,23,26,25,24,23,27,26,26,26,26,27,27,27,27,28,28,29,29,29,29,29,30,28,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,28,28,29,29,29,29,29,29,28,28,28,29,29,29,28,29,28,29,29,29,29,28,29,29,28,28,29,26,27,28,27,25,26,26,25,25,24,25,26,26,27,26,26,27,26,25,26,27,26,28,29,29,28,29,29,29,29,29,29,28,28,28,28,29,29,28,27,29,29,25,27,29,27,25,25,28,26,26,28,27,29,27,28,28,28,28,29,29,29,29,29,29,29,28,29,28,28,27,26,27,25,28,26,26,27,26,29,27,26,27,26,27,25,25,24,25,25,25,23,24,22,24,23,21,24,24,22,22,23,21,20,20,22,20,18,20,21,19,19,18,17,14,14,12,11,10,13,10,10,10,8,9,8,9,9,7,7,8,7,6,5,4,4,3,3,3,3,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,3,3,4,5,6,5,6,7,7],[24,24,25,25,25,26,26,27,27,27,27,27,28,27,28,28,28,28,28,29,28,28,29,29,29,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,29,29,28,27,28,28,28,27,27,29,28,28,29,28,28,28,28,28,28,28,28,29,29,29,29,30,29,28,29,29,29,29,28,28,29,29,28,29,29,28,28,29,29,28,29,29,28,29,29,29,28,28,28,28,28,29,28,28,28,29,29,29,29,29,29,29,29,29,29,30,29,28,29,29,29,27,28,29,29,28,29,29,29,29,28,29,29,29,29,29,29,29,29,29,29,28,28,28,28,28,27,28,28,28,28,29,28,29,28,28,28,29,29,29,28,29,29,29,29,29,29,28,29,28,27,29,30,27,28,29,28,26,28,29,28,26,28,28,29,28,27,29,29,28,27,28,29,28,29,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,27,28,28,28,28,28,28,28,28,29,28,28,28,29,28,28,27,29,27,27,27,27,27,26,26,25,25,25,25,25,25,27,26,25,25,28,27,26,28,28,26,26,29,27,27,28,27,27,29,28,28,29,28,29,29,28,28,29,29,27,27,29,28,27,27,28,28,26,28,29,27,28,28,28,28,28,26,26,27,26,25,27,27,25,25,26,26,26,27,26,27,28,28,27,28,28,28,28,28,28,28,27,28,28,28,28,28,28,28,29,29,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,30,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,29,29,29,28,28,28,28,28,28,28,28,28,28,27,28,25,27,27,26,25,27,27,25,26,27,27,26,27,27,26,26,27,27,27,26,25,24,25,23,23,26,25,25,27,25,27,27,26,28,27,29,27,28,28,29,27,27,29,27,26,27,28,25,26,26,26,25,26,26,25,26,26,24,23,24,23,24,24,20,19,18,17,17,21,22,22,20,23,23,24,24,24,24,26,25,25,24,25,25,23,24,24,24,23,24,25,25,24,26,27,26,27,28,28,26,29,28,28,29,29,28,28,28,28,27,28,26,27,28,27,28,28,29,28,29,28,29,28,28,29,28,27,28,28,28,26,26,27,28,27,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,28,29,28,28,27,28,27,26,27,26,26,27,26,25,25,25,24,25,24,26,26,24,26,27,26,26,27,27,27,27,27,28,28,28,29,28,28,28,29,28,29,29,28,29,28,28,29,29,29,29,28,29,28,28,29,28,29,29,29,28,28,28,28,28,28,26,26,27,27,28,26,26,27,26,27,27,26,26,27,26,28,27,28,29,28,29,29,29,29,29,29,28,28,29,29,27,28,28,28,27,28,28,26,26,26,27,27,28,28,27,28,27,27,27,29,27,28,28,28,29,28,28,28,29,28,28,29,28,28,28,28,29,28,28,28,29,29,27,28,29,27,26,28,28,26,28,28,28,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,26,27,26,27,26,27,26,27,27,26,26,26,26,26,27,27,25,26,24,26,27,25,22,25,26,21,22,25,26,19,24,24,21,18,23,22,18,20,21,21,19,16,17,14,14,13,12,12,14,12,12,11,10,10,10,9,10,9,8,8,8,6,6,4,4,3,3,3,3,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,3,4,5,5,7,7,7,7,8],[24,23,24,25,25,26,27,26,26,26,26,26,27,26,28,27,28,27,27,28,27,28,29,28,28,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,29,29,29,30,29,29,30,29,29,29,29,28,29,28,28,28,28,29,28,29,29,29,29,29,29,29,29,28,29,29,29,29,29,30,30,29,29,29,30,30,29,28,29,29,28,28,29,29,28,29,29,29,28,29,28,28,28,28,28,27,28,27,28,29,28,29,28,28,29,28,29,29,29,28,28,29,28,29,29,29,27,29,29,26,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,29,27,28,27,28,29,28,28,29,29,29,28,29,29,28,29,30,29,29,29,29,29,29,28,29,29,28,29,29,28,27,29,29,27,29,30,28,27,29,27,28,29,28,28,29,28,28,28,29,27,29,29,29,29,29,29,29,30,29,29,30,30,29,29,29,30,29,29,29,29,29,29,29,29,28,29,28,29,28,28,29,28,27,29,29,29,29,29,29,28,28,29,28,28,27,28,28,27,26,27,25,24,24,26,26,28,27,26,27,28,27,27,29,28,26,28,29,28,27,28,27,29,29,29,29,29,29,30,30,29,29,29,29,28,29,30,29,28,29,29,29,27,28,29,28,29,28,28,28,29,28,27,28,28,26,27,28,26,25,25,26,27,28,26,28,28,29,27,29,28,29,29,29,28,28,27,29,28,29,29,29,28,29,29,29,28,29,29,29,29,29,29,29,29,29,29,30,30,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,29,29,29,29,30,29,30,29,29,29,30,29,29,29,29,29,29,29,29,29,28,29,28,28,28,28,29,29,29,29,28,28,27,27,26,25,24,26,26,25,26,27,26,25,27,27,25,25,27,27,25,26,23,25,22,24,22,26,26,26,24,26,25,25,26,26,28,28,25,28,28,27,26,28,29,27,27,29,28,26,26,26,26,26,25,25,25,26,26,25,24,25,23,24,24,21,18,18,19,17,19,23,23,20,25,24,25,24,24,25,27,26,25,25,26,24,24,24,25,24,23,25,27,23,25,26,27,26,28,28,28,28,29,29,28,29,29,28,29,29,29,29,29,28,28,28,27,29,29,29,30,29,29,30,29,29,29,28,29,28,28,28,29,28,29,29,29,29,29,29,29,29,30,29,29,29,30,30,30,29,29,30,29,29,29,29,28,27,28,28,27,27,27,27,26,26,26,26,24,25,23,25,26,24,24,27,26,25,26,28,26,26,28,26,28,28,27,29,29,28,29,29,29,28,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,28,27,28,27,27,28,27,28,26,27,29,28,27,28,28,27,29,28,29,30,29,30,29,30,29,29,30,29,29,29,29,27,29,29,27,28,27,27,27,26,26,26,24,27,28,25,26,28,28,27,29,28,29,28,28,29,29,29,30,29,29,29,30,29,29,29,29,30,30,29,28,30,29,28,28,29,28,27,28,28,26,26,28,25,27,27,28,29,29,29,29,28,28,29,28,28,29,28,28,28,29,29,27,28,26,27,25,27,25,27,28,26,26,25,26,26,25,26,24,25,23,24,27,24,22,25,27,21,21,25,25,21,24,25,23,19,25,24,21,21,23,22,20,18,16,14,15,15,11,11,15,14,14,11,11,12,11,11,11,9,9,8,8,6,6,5,5,4,3,4,3,3,2,2,2,1,1,1,1,1,0,1,1,1,2,2,2,3,4,4,6,6,6,7,8,8],[25,24,25,26,25,27,28,27,27,28,26,26,28,27,28,28,28,28,28,29,28,28,29,29,28,29,29,29,29,30,29,30,29,30,29,30,29,30,29,29,30,29,29,30,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,28,29,29,28,29,28,29,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,30,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,30,28,29,29,29,29,29,29,28,30,29,28,29,29,29,29,29,30,29,29,29,30,29,29,29,29,29,29,30,29,29,29,29,29,29,28,28,28,29,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,28,27,29,29,27,27,29,28,27,28,29,28,26,29,28,29,29,27,29,29,28,28,29,30,30,30,28,29,29,30,29,28,30,29,28,29,29,29,28,29,30,29,28,29,30,28,29,29,29,28,29,28,29,29,29,29,29,28,28,29,29,28,29,28,29,28,29,28,28,28,27,27,26,24,27,26,25,22,25,25,27,26,24,27,28,25,26,28,27,24,26,28,27,26,28,27,28,29,29,28,29,28,29,30,28,28,29,28,27,28,29,28,26,28,28,28,26,28,29,28,28,28,26,28,28,27,26,27,27,25,26,27,25,23,24,24,27,27,27,27,28,28,27,28,28,28,28,28,28,27,28,28,28,29,29,29,29,29,29,29,28,29,29,29,29,30,30,29,29,29,29,30,29,29,29,29,29,30,29,29,29,29,28,29,29,29,29,29,29,29,29,30,30,29,30,30,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,29,30,30,29,30,30,29,29,29,29,29,28,28,28,29,28,28,28,27,28,27,28,27,26,26,24,24,23,26,26,23,24,27,25,24,26,26,25,25,27,27,26,26,24,24,25,23,21,24,25,26,25,26,26,27,25,27,27,28,25,27,28,28,25,27,29,25,26,28,27,26,26,24,24,26,23,23,25,25,22,23,23,22,22,22,22,19,19,18,17,17,19,22,22,18,22,21,23,24,23,25,26,24,23,25,25,22,22,25,25,22,22,24,25,24,25,24,25,25,28,28,26,27,29,28,27,29,29,28,29,29,28,30,29,29,29,29,28,28,29,28,29,29,29,29,29,29,30,30,29,28,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,27,28,29,28,26,28,28,25,24,27,26,24,24,25,25,22,23,20,24,25,21,22,25,25,24,24,26,25,26,27,25,27,25,26,27,28,27,28,29,28,29,29,29,29,29,29,28,28,30,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,28,28,28,28,29,29,29,28,28,29,28,28,28,28,29,29,29,28,29,29,29,29,29,29,29,29,29,28,28,28,27,27,27,27,26,24,26,27,24,23,25,24,25,27,24,24,27,27,26,28,28,27,28,29,28,27,29,29,28,28,29,29,28,28,28,28,29,28,28,27,29,28,27,26,28,27,24,26,28,25,25,27,27,28,27,27,27,28,28,28,29,28,28,27,28,28,27,27,28,28,27,27,27,25,27,26,26,27,26,27,27,25,26,24,27,27,25,26,24,25,25,25,24,23,25,24,22,22,24,24,21,21,23,21,20,22,22,20,21,21,20,18,18,16,14,14,13,11,11,14,13,13,11,11,13,12,11,13,10,9,8,10,8,7,6,6,4,4,4,3,3,2,3,2,2,2,1,1,1,1,0,1,1,2,2,2,3,4,4,6,6,5,6,7,8],[25,26,26,26,27,27,28,28,27,28,27,27,28,27,28,28,29,28,28,29,28,28,29,29,28,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,28,28,28,28,28,29,27,28,27,28,28,28,28,28,29,28,28,28,29,28,28,29,28,29,29,29,29,28,28,29,29,28,29,30,29,29,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,28,29,29,28,29,28,29,29,28,29,30,28,27,28,28,30,28,30,30,29,29,29,29,28,29,29,29,28,29,29,29,29,28,29,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,29,28,29,29,28,29,28,27,29,29,26,27,28,28,26,27,28,27,27,29,28,29,28,27,28,29,28,27,29,30,30,29,28,29,28,29,29,28,29,29,28,28,29,29,27,28,29,27,27,28,28,27,28,28,28,27,29,29,28,29,29,28,28,28,29,29,28,28,28,28,28,27,28,27,27,26,27,26,25,25,25,26,25,23,25,25,26,24,24,24,27,24,25,26,26,25,25,27,26,26,27,27,28,28,28,27,28,26,29,29,27,27,28,27,26,27,28,26,25,27,27,26,24,27,28,27,28,28,26,27,27,25,25,26,26,25,26,26,24,21,23,23,25,27,26,27,27,27,26,28,27,27,27,27,28,27,27,28,28,28,28,28,29,29,29,29,29,29,30,29,29,29,30,29,29,30,30,30,30,30,30,30,29,30,29,28,29,29,28,28,29,28,29,28,29,29,29,29,29,29,29,29,30,29,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,29,29,30,29,30,30,30,30,30,29,29,29,29,29,29,29,29,29,29,29,28,27,28,28,27,27,28,26,28,26,27,27,25,25,25,22,23,26,25,24,23,25,25,24,25,24,24,24,25,25,24,24,23,23,23,24,21,24,24,24,24,24,25,25,25,26,25,27,26,26,26,27,25,26,28,25,24,26,26,25,25,23,24,23,24,23,23,24,23,22,22,21,21,21,21,18,17,16,15,17,18,21,19,18,21,21,23,24,22,23,25,23,23,22,24,23,22,23,22,22,22,22,22,25,23,24,23,25,26,26,25,26,28,27,26,29,28,27,28,28,28,29,29,29,28,28,27,27,28,28,28,29,28,28,28,29,29,29,28,29,29,29,29,28,28,28,28,29,28,29,29,28,29,29,28,28,29,29,28,28,28,28,29,26,27,28,26,25,27,26,24,24,24,25,23,24,23,24,22,22,21,24,24,22,22,23,24,24,24,25,24,25,26,24,25,23,26,26,27,27,28,28,28,28,28,29,28,28,29,28,28,28,29,28,29,28,28,28,28,29,29,28,28,28,29,28,29,28,28,28,28,29,28,28,28,29,28,28,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,26,28,28,26,25,26,25,23,24,24,24,25,23,23,25,25,25,24,24,26,26,25,26,27,25,28,28,28,27,28,29,28,27,28,28,28,27,27,27,28,28,27,26,28,27,26,25,28,26,24,26,26,24,25,26,26,27,26,27,26,28,27,28,27,28,28,26,27,28,26,27,27,27,26,26,26,26,26,25,25,25,26,26,27,25,26,25,25,25,24,26,25,24,25,25,23,24,25,23,21,23,24,23,21,21,22,20,19,21,21,18,19,21,21,18,18,17,15,15,13,11,11,14,12,12,10,11,10,11,10,12,10,8,8,10,8,8,5,6,4,4,5,4,3,3,3,2,2,2,2,1,1,1,1,0,1,2,2,2,3,4,5,6,8,6,6,7,8],[24,23,25,24,25,26,26,26,26,26,26,27,27,25,26,26,27,27,26,28,27,27,28,28,27,29,28,28,29,29,28,29,29,29,29,30,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,28,29,28,28,29,29,28,28,28,28,28,28,28,28,28,28,29,28,28,28,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,28,28,29,28,28,29,29,29,29,29,29,29,28,29,28,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,29,28,28,29,28,29,28,29,29,28,28,29,28,26,27,27,28,28,29,29,28,28,29,28,29,29,29,29,28,29,29,28,29,28,28,28,29,28,28,28,28,29,29,29,28,29,29,29,28,29,29,28,27,28,29,28,28,29,28,27,28,27,24,28,28,24,26,28,27,24,26,27,25,26,27,26,28,27,25,27,28,28,27,27,28,27,28,28,28,28,28,28,28,29,28,28,28,29,28,28,28,29,28,27,28,28,27,27,28,27,26,27,28,28,28,29,28,28,28,29,28,28,28,28,27,27,27,27,26,26,26,26,25,25,24,24,23,23,24,24,23,26,25,24,24,26,24,25,26,25,24,25,27,25,25,27,25,27,28,28,27,28,27,28,28,27,27,28,27,26,27,27,27,25,26,26,26,25,26,27,26,27,27,25,26,27,25,25,26,26,26,25,25,26,22,26,25,26,27,24,26,26,26,25,27,26,26,26,27,27,27,27,28,28,28,29,29,28,28,28,29,28,28,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,28,28,27,28,28,28,28,28,28,28,29,30,29,28,29,29,29,29,29,29,29,29,29,29,30,30,30,29,30,29,30,29,29,29,28,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,28,28,28,27,27,27,26,27,28,26,27,27,27,26,26,24,25,24,23,25,24,24,23,26,25,24,24,24,24,24,25,24,24,23,23,20,21,22,20,24,23,23,24,24,24,25,26,27,26,27,26,27,27,27,26,27,27,26,24,26,26,24,25,25,24,24,25,24,25,25,23,24,23,23,22,23,21,20,18,18,16,17,18,21,21,21,23,23,23,24,24,23,25,23,24,23,24,24,22,22,22,23,23,23,24,23,22,24,25,24,26,26,26,24,28,28,26,28,28,27,28,27,28,27,28,25,27,27,26,28,27,28,27,28,27,28,28,28,29,28,26,28,27,27,27,27,28,28,28,29,28,28,28,28,28,28,29,27,28,28,28,28,28,28,28,27,27,27,27,27,26,26,26,25,25,25,26,25,23,24,24,23,24,23,23,24,23,24,24,23,23,26,24,25,26,24,26,27,26,28,27,28,28,27,27,27,28,27,28,28,29,28,28,29,29,29,28,28,28,28,29,29,29,29,29,28,28,29,28,28,27,27,28,27,28,26,27,27,27,28,27,27,28,28,27,28,28,28,29,28,28,28,28,27,28,28,28,26,28,27,27,26,27,25,26,26,25,25,25,25,24,24,27,26,25,26,26,26,25,28,26,27,28,28,28,28,27,28,28,28,28,28,28,28,27,27,27,28,27,27,28,27,26,26,28,26,24,27,26,25,26,27,26,26,26,28,27,26,28,28,26,28,28,28,27,28,28,27,27,27,26,26,26,25,26,25,25,26,27,26,26,25,24,25,24,25,24,23,23,23,25,23,23,20,23,24,19,21,21,22,18,21,21,21,17,21,20,18,21,21,20,19,17,17,15,16,13,12,11,13,14,12,11,11,11,10,9,12,11,8,9,10,8,7,5,6,4,4,5,4,3,3,4,2,2,2,2,2,1,2,1,1,0,1,1,2,3,4,5,5,7,6,6,7,8],[24,24,25,25,25,26,27,27,26,27,26,26,27,26,28,27,28,28,28,29,28,28,30,29,28,29,29,29,29,29,29,30,29,30,30,30,29,30,30,30,30,29,29,29,30,30,30,30,29,30,29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,27,28,28,28,28,28,28,28,28,28,28,28,27,28,28,29,28,29,29,29,28,29,28,29,29,28,27,29,28,27,28,28,28,28,28,28,28,28,28,28,28,29,28,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,28,29,28,26,26,28,27,28,28,28,29,28,28,28,29,29,28,28,29,28,28,29,28,27,28,27,28,27,27,26,28,28,28,28,28,28,27,27,28,28,28,28,29,28,28,28,29,29,28,28,29,28,27,29,28,28,27,28,28,27,28,28,28,27,28,27,28,27,28,29,29,28,28,28,29,28,28,29,28,28,29,28,29,29,28,29,29,28,28,29,28,29,29,28,28,29,29,28,28,29,28,27,28,27,27,28,28,27,28,28,28,28,28,28,28,28,28,28,27,27,26,27,27,26,25,26,25,24,24,25,25,26,26,25,26,27,25,26,27,27,26,27,28,27,27,28,27,28,28,28,28,28,28,29,29,28,28,28,28,27,27,28,28,27,27,27,28,26,27,28,27,28,28,27,27,28,27,26,27,27,25,27,27,26,24,26,26,26,28,26,27,28,28,27,28,27,28,28,28,27,27,27,28,28,28,28,28,28,28,29,28,28,28,29,28,29,28,29,29,29,29,29,29,29,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,30,30,29,29,29,29,30,29,29,29,29,29,29,29,29,28,28,27,28,27,28,27,28,28,28,28,28,28,26,26,26,26,25,26,26,25,25,26,24,25,26,26,24,26,26,25,25,25,23,24,24,23,21,25,25,25,24,25,26,26,25,27,27,28,27,27,28,27,26,27,28,27,26,27,27,25,26,26,25,26,26,24,26,25,25,25,23,25,23,23,24,22,19,18,18,18,21,22,22,21,24,24,24,24,24,25,25,25,25,24,25,24,23,23,24,24,22,23,25,24,24,26,27,26,28,27,27,27,29,28,28,28,28,28,28,28,28,28,29,27,28,28,28,29,28,29,28,28,28,28,28,28,29,28,27,27,28,27,26,27,28,27,26,28,27,28,28,29,28,29,29,28,29,29,29,29,29,29,28,28,28,28,28,27,27,27,26,26,26,26,26,26,25,25,25,25,24,23,25,24,24,26,26,25,26,27,26,26,27,25,27,28,28,28,28,28,29,29,28,28,29,28,29,28,29,28,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,26,26,26,27,26,27,26,26,27,27,26,27,27,27,28,27,28,28,29,29,28,29,28,29,28,28,28,29,28,27,28,28,28,27,27,28,27,26,27,27,26,27,28,26,28,28,27,27,29,28,27,28,28,29,29,28,28,28,28,28,28,27,27,28,28,28,28,28,28,29,28,27,28,29,27,27,27,28,26,27,28,27,28,27,28,29,28,28,27,27,27,29,28,27,28,28,28,27,28,28,27,27,27,27,26,27,26,27,27,26,26,26,27,26,26,26,26,26,26,26,26,25,23,25,26,22,22,25,25,20,24,24,22,19,24,23,21,21,22,20,21,17,17,16,15,16,12,11,15,14,13,11,12,11,11,10,12,11,9,8,10,7,7,6,6,4,4,5,4,3,3,4,3,2,2,3,2,2,2,3,1,1,0,1,2,3,4,5,6,7,7,6,6,8],[25,25,25,26,26,27,28,27,27,27,27,26,28,27,28,28,29,28,28,29,29,28,29,29,29,29,29,29,29,29,29,30,29,30,29,29,29,29,30,30,29,29,29,29,29,30,30,29,30,29,29,29,29,30,29,29,29,30,29,29,29,28,29,28,29,29,29,29,28,29,30,29,29,29,30,29,30,29,29,29,29,29,30,30,30,30,30,30,30,30,29,29,30,30,29,30,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,30,29,29,28,29,30,29,29,30,29,28,30,29,27,28,29,29,29,29,29,30,30,29,29,30,30,29,30,30,30,30,30,30,29,29,29,30,29,29,28,29,29,29,29,29,29,29,29,29,29,30,29,30,30,29,30,29,29,29,28,30,29,28,29,30,28,28,29,29,28,29,29,29,28,29,28,29,29,28,29,30,29,29,29,30,29,29,30,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,29,29,29,29,29,29,29,28,28,30,29,29,29,29,29,29,29,28,28,28,28,28,27,26,27,27,26,25,26,26,28,28,26,28,29,27,28,29,28,27,28,30,28,27,29,28,30,29,30,30,30,29,30,30,30,30,30,29,29,29,30,29,28,29,29,29,28,29,29,29,29,29,28,29,29,28,28,28,28,26,28,28,26,25,26,26,27,28,27,28,29,29,28,29,29,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,29,29,29,29,29,29,27,27,26,25,23,26,26,24,24,27,24,25,26,26,24,26,27,28,25,26,23,24,23,24,23,25,26,26,25,26,25,26,25,27,28,29,25,27,28,28,25,28,29,26,26,28,28,26,27,24,26,26,25,24,25,26,24,23,25,23,22,22,23,23,22,20,20,19,21,23,23,21,24,24,24,24,25,26,27,26,24,25,27,25,24,25,26,24,23,25,26,24,26,27,27,26,29,29,28,29,30,29,28,29,29,29,30,29,29,29,29,28,29,29,29,29,30,30,30,30,30,30,30,30,30,29,30,29,30,29,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,27,29,29,27,27,28,28,27,25,26,26,25,24,23,25,27,23,24,27,27,24,26,28,26,27,28,27,29,27,27,29,29,29,30,30,30,29,30,29,30,30,30,29,30,30,29,29,30,29,29,29,29,30,29,30,30,29,29,30,29,29,28,29,28,28,29,28,29,28,28,30,29,28,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,29,29,30,29,28,28,28,28,27,28,28,26,24,26,25,27,28,26,25,29,28,27,29,29,29,29,29,29,29,30,30,30,29,29,30,29,29,29,29,30,29,30,28,30,29,29,28,29,28,26,27,28,25,25,28,26,28,28,29,29,29,29,29,29,29,30,29,29,29,29,28,29,29,29,28,28,27,28,26,27,26,27,29,27,26,27,26,28,28,25,27,25,25,25,26,25,24,25,25,24,23,25,25,23,22,24,22,21,23,23,22,23,23,22,22,19,18,16,17,16,14,14,18,16,17,14,14,15,14,14,14,13,12,10,11,10,9,9,8,6,7,7,6,5,5,6,5,4,4,4,4,3,4,4,4,3,1,0,1,3,4,5,6,7,7,7,8,8],[26,26,27,27,27,28,28,28,28,28,27,27,28,26,27,28,28,29,28,29,29,29,30,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,29,29,29,30,29,29,30,29,30,30,29,30,29,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,30,29,29,30,30,30,29,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,29,30,30,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,29,30,30,28,29,30,29,28,30,29,28,28,30,29,30,29,29,30,30,29,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,29,29,30,29,30,30,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,29,29,29,28,28,28,27,28,29,27,26,27,27,29,28,27,28,29,27,27,29,29,27,28,30,28,28,29,28,29,30,29,29,29,29,30,30,30,29,30,29,28,29,30,29,28,29,29,29,27,29,29,29,29,30,28,30,29,28,27,29,28,26,28,29,27,25,26,26,28,29,28,29,29,29,29,29,29,30,29,29,29,29,28,29,29,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,30,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,29,29,29,28,29,29,29,29,29,29,28,29,27,27,26,28,27,26,27,28,27,26,28,27,27,27,27,27,25,25,24,25,25,25,23,25,27,27,26,26,27,26,26,27,28,27,27,28,28,29,27,29,29,27,27,28,29,26,28,26,28,27,26,26,27,27,25,25,26,24,23,23,24,21,20,20,19,19,21,24,22,22,23,25,25,26,26,27,28,27,26,26,28,25,25,27,26,24,24,26,25,26,27,28,27,28,29,29,29,29,30,29,29,30,30,29,29,29,29,30,30,29,29,29,29,29,29,29,29,30,29,30,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,29,30,29,30,30,30,29,30,30,30,30,30,30,30,29,30,29,29,28,29,29,27,27,29,28,26,27,28,27,25,25,24,26,28,26,26,27,27,27,26,28,27,28,28,28,28,27,29,29,29,29,30,30,30,30,30,29,29,30,30,29,29,30,30,30,29,30,30,29,30,30,30,30,30,30,29,29,30,30,29,29,29,29,29,30,30,29,30,30,30,30,29,29,29,30,29,29,30,30,30,29,29,30,30,29,30,29,30,30,29,28,29,29,27,27,28,28,27,27,28,27,28,29,27,27,29,29,28,30,29,29,29,29,30,29,30,30,30,29,29,29,29,29,29,29,29,30,30,29,30,29,29,29,30,29,28,29,30,28,28,29,28,29,29,29,29,30,29,29,30,29,30,29,29,29,28,29,29,29,29,29,29,29,29,28,28,28,29,29,29,27,28,27,28,27,28,27,28,26,26,27,26,24,26,26,23,22,25,26,21,22,25,24,20,25,25,22,22,25,24,23,21,20,19,19,17,15,16,17,17,16,16,16,15,17,14,17,17,12,13,15,13,13,10,11,8,8,10,8,8,7,8,6,6,5,5,5,4,3,4,5,3,2,1,0,1,3,4,4,6,5,5,6,7],[25,25,25,26,26,27,28,27,26,27,27,27,28,27,28,28,29,28,28,29,28,29,30,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,28,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,29,30,29,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,26,28,28,27,26,28,28,29,29,27,29,29,29,29,30,29,28,29,30,30,28,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,29,30,30,30,28,30,30,30,30,30,29,30,30,29,28,29,29,27,28,28,27,25,26,26,27,29,28,29,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,29,28,28,27,27,25,24,28,26,24,26,28,25,25,27,27,26,26,27,28,26,26,23,24,23,24,22,24,26,25,24,26,27,27,25,27,28,29,25,27,29,27,25,28,29,27,27,29,29,26,28,25,27,27,26,25,26,27,25,24,26,25,24,23,24,25,22,21,22,20,21,22,24,24,25,26,26,25,26,27,28,27,26,27,28,26,26,27,27,25,24,27,27,26,27,28,28,27,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,28,28,29,28,27,27,27,27,25,25,24,26,27,25,25,28,27,27,26,28,27,27,29,28,29,28,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,30,29,30,29,29,30,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,28,26,26,27,27,28,29,28,29,29,29,28,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,27,29,29,26,28,29,28,29,29,30,29,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,29,27,28,27,27,28,28,30,28,26,28,27,28,28,26,27,27,26,26,26,26,24,25,27,26,25,25,26,25,22,25,24,22,24,24,24,23,24,24,23,22,20,19,18,19,16,16,18,18,17,16,17,16,18,16,18,17,14,14,16,14,13,14,12,12,11,12,11,9,11,12,8,10,7,5,7,6,5,4,4,4,4,2,1,0,1,3,3,5,5,4,5,6],[26,26,26,27,27,28,29,28,28,29,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,29,29,30,30,30,29,30,29,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,29,30,30,28,29,30,29,28,29,29,28,28,29,29,29,29,29,29,30,29,29,29,30,29,30,29,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,29,30,30,30,29,29,29,30,30,30,30,30,30,30,29,30,30,30,29,29,30,29,29,29,29,28,28,28,27,28,28,27,27,27,27,28,28,27,28,29,27,28,29,28,28,29,29,29,28,29,28,29,30,29,29,30,29,30,30,30,29,30,29,29,29,30,29,28,29,29,29,28,29,30,29,30,30,28,29,29,28,28,29,29,27,28,28,28,27,28,27,28,29,28,28,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,30,29,30,29,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,30,30,29,30,29,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,28,29,29,28,29,30,29,29,29,29,29,28,28,28,27,26,28,27,26,27,28,26,26,27,26,25,26,27,26,25,25,24,25,25,24,24,25,27,26,26,27,26,27,27,27,28,28,27,28,28,29,27,28,30,28,28,28,28,27,27,27,27,27,26,28,27,27,27,27,27,25,26,26,25,26,22,23,21,21,23,25,25,25,27,27,27,27,27,28,29,28,27,28,28,26,27,28,27,26,26,26,27,27,27,27,28,28,29,28,28,28,30,29,29,29,29,29,29,29,29,29,30,29,29,29,28,29,29,29,29,29,29,30,30,30,30,30,29,29,30,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,28,29,29,28,28,28,28,27,27,27,26,27,26,25,27,26,28,26,26,26,27,27,28,28,27,28,27,29,28,29,29,29,29,30,29,29,30,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,28,28,28,29,28,26,27,28,27,28,28,28,28,29,29,29,29,29,29,29,29,30,29,30,30,30,29,30,30,29,29,30,29,30,30,30,29,30,30,29,29,30,29,27,28,29,28,29,29,29,29,28,30,30,30,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,28,28,27,28,28,28,29,28,28,28,28,27,27,27,26,28,26,27,27,27,24,27,27,26,24,26,27,24,24,25,25,22,25,26,23,24,26,25,24,24,23,21,21,19,18,16,18,20,18,17,18,16,18,17,20,20,15,16,20,17,18,14,16,13,14,16,14,12,13,15,11,10,8,9,8,8,6,7,7,5,5,4,3,1,0,1,3,4,4,4,5,5],[26,26,27,28,27,28,29,28,28,28,28,27,28,27,28,28,28,28,28,29,28,29,30,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,30,30,30,31,31,30,31,30,31,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,30,30,31,30,31,30,30,30,30,30,30,29,30,31,30,29,30,30,29,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,30,31,31,30,30,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,29,30,30,28,28,28,29,29,28,27,28,28,30,29,28,29,30,28,29,30,30,28,29,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,28,30,30,30,30,30,28,30,30,28,28,29,29,27,28,29,27,26,26,27,28,29,28,29,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,28,29,28,27,27,29,28,26,27,29,27,27,28,29,27,28,29,29,26,28,25,26,25,26,26,26,28,27,26,28,27,28,27,29,29,30,28,28,30,29,27,29,30,29,27,29,29,27,28,26,29,28,27,27,26,27,26,26,26,26,26,25,24,26,23,22,23,21,22,23,25,23,24,25,25,27,27,28,28,28,26,27,28,26,27,28,27,26,27,28,26,26,27,28,28,28,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,28,28,28,29,28,27,28,27,26,26,26,27,28,26,26,28,28,27,28,29,28,28,29,29,29,28,29,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,30,30,30,30,30,29,30,29,28,29,30,29,27,28,29,28,29,29,28,29,30,30,29,30,30,30,30,30,30,30,31,30,31,31,30,30,30,30,30,30,31,31,30,30,31,31,29,30,31,30,28,30,30,28,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,29,30,28,29,28,28,29,29,30,30,28,29,28,29,29,28,28,28,27,27,28,28,25,28,28,27,25,27,28,25,24,27,25,24,24,25,23,24,24,24,23,21,21,20,18,19,18,17,19,18,17,19,18,17,18,17,19,18,17,17,18,18,18,15,17,14,14,15,14,13,12,15,12,11,10,8,8,8,7,6,6,6,5,5,3,2,1,0,1,3,6,3,3,4],[26,26,26,26,27,27,27,28,28,28,27,27,28,28,28,28,28,29,28,29,29,29,30,29,29,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,29,29,29,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,29,29,29,29,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,28,29,30,30,28,30,29,29,28,29,29,29,29,29,29,30,29,29,29,29,29,29,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,28,29,29,28,28,27,28,28,27,27,27,27,29,28,27,28,29,28,28,30,29,28,28,30,29,28,29,28,29,29,29,30,30,30,30,30,30,29,30,30,29,29,30,30,28,30,30,29,28,29,30,29,29,29,28,29,29,28,28,29,28,27,28,27,27,25,27,27,28,28,28,28,29,29,28,30,29,30,29,29,30,30,29,29,30,29,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,29,29,29,29,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,29,29,30,30,29,30,29,30,28,28,28,26,25,27,27,26,27,27,25,25,27,26,26,25,27,27,26,26,25,23,24,23,23,25,26,26,25,27,27,26,26,28,27,29,26,26,29,27,25,28,29,28,27,28,28,27,27,26,27,27,27,27,27,28,27,26,27,26,26,25,25,26,21,21,20,22,21,23,25,24,26,26,26,26,27,27,28,28,26,26,28,26,26,27,27,26,26,27,27,26,26,26,28,28,28,28,28,27,30,29,29,29,30,29,30,29,29,29,29,28,29,29,28,30,29,30,30,29,29,30,29,30,30,30,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,30,29,28,29,29,27,28,27,28,28,27,27,27,26,26,25,26,27,27,25,27,27,27,28,29,28,27,28,28,28,29,29,29,29,29,29,30,30,29,29,29,30,29,29,29,30,30,30,29,30,29,30,30,29,30,30,30,30,30,29,30,30,30,28,28,28,28,29,29,29,29,28,29,29,28,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,29,28,27,28,28,27,29,29,28,28,29,29,28,30,28,28,29,28,29,29,29,29,30,30,29,30,29,30,30,30,30,29,30,29,30,30,28,29,30,29,28,29,29,27,28,29,29,29,28,29,29,29,28,29,29,29,30,29,29,30,30,30,29,29,30,29,29,28,28,27,29,28,29,29,27,28,27,27,27,26,27,26,28,26,26,26,25,24,26,27,24,23,26,26,23,24,27,24,21,25,27,22,24,25,24,23,22,21,20,19,19,18,16,19,19,19,19,18,17,17,17,18,19,16,16,19,17,18,15,17,15,13,15,14,15,14,16,13,13,11,10,10,8,7,7,7,6,5,5,4,3,1,1,0,1,2,2,3,3],[26,26,26,27,27,28,28,28,28,28,27,28,28,28,28,28,29,28,28,29,28,28,30,29,28,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,28,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,28,30,30,29,30,30,29,28,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,27,28,28,26,25,27,28,29,29,28,28,30,28,28,30,29,27,28,30,29,28,30,28,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,29,29,30,30,29,30,30,29,30,30,29,28,29,28,28,29,29,28,26,27,27,28,29,28,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,29,29,30,29,30,29,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,29,29,28,28,28,27,25,28,27,26,26,28,26,25,27,26,26,27,29,28,27,27,25,26,25,25,24,26,26,26,27,27,27,28,25,29,29,29,26,28,29,28,27,29,29,28,27,29,29,27,29,27,28,27,27,27,27,28,26,26,26,25,26,25,25,26,21,20,23,20,21,24,24,24,26,26,27,27,27,27,28,27,28,27,28,27,27,28,27,26,25,26,28,25,26,27,27,27,28,29,29,28,30,30,29,30,30,30,30,30,30,30,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,28,29,29,27,27,29,28,27,28,28,27,27,27,25,27,28,27,26,28,27,27,26,28,27,26,28,27,29,28,28,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,30,29,30,29,29,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,28,29,29,29,28,28,29,27,28,28,26,29,29,28,28,29,29,28,29,30,28,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,31,30,29,30,30,29,29,30,29,27,29,29,27,28,29,29,30,29,30,30,30,30,30,30,30,30,29,30,30,29,30,30,30,29,29,29,28,29,27,28,29,28,29,29,28,28,27,27,27,27,28,27,27,26,26,26,26,26,27,25,25,25,26,26,24,26,24,24,25,25,24,25,25,25,24,24,22,20,20,19,17,16,19,19,19,17,19,18,19,16,20,19,15,16,18,17,17,14,17,14,15,15,15,14,12,13,13,13,11,12,10,9,8,7,7,7,7,6,5,4,3,2,1,0,1,2,3,3],[26,27,26,27,27,28,28,28,28,28,27,27,28,27,28,28,28,28,28,29,29,28,29,29,29,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,29,29,30,30,30,30,30,30,29,30,30,30,28,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,29,30,29,28,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,30,29,28,30,30,28,28,30,30,28,29,30,28,28,29,29,30,29,29,30,30,29,30,30,30,30,30,29,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,28,29,29,29,29,30,29,29,29,29,30,29,29,29,30,28,28,29,28,26,27,28,26,25,26,27,28,26,25,26,25,28,26,25,28,29,25,27,29,28,26,28,29,28,28,29,28,29,29,29,29,29,29,29,30,29,29,30,29,28,29,30,29,26,29,29,27,25,28,29,28,29,28,27,28,28,26,27,27,27,26,27,27,25,25,27,26,27,27,27,27,29,28,27,29,29,29,29,29,29,29,29,29,30,29,30,30,30,30,30,29,30,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,29,29,29,29,29,29,30,29,29,29,29,30,29,29,29,29,30,29,29,29,30,30,29,30,30,30,30,30,30,30,29,30,29,30,29,29,29,30,30,30,30,30,29,29,30,30,30,30,29,30,30,29,29,29,28,29,29,29,29,29,29,29,29,28,29,28,28,27,26,25,28,27,25,26,28,27,26,28,28,27,26,28,28,26,26,24,27,25,26,25,25,27,26,26,27,27,27,27,28,28,29,28,28,29,29,26,28,29,28,27,28,28,27,28,26,28,27,26,27,27,27,25,26,26,25,25,24,24,24,21,19,22,18,19,23,22,22,24,24,24,25,25,25,27,25,25,24,27,25,23,25,25,23,24,26,25,26,27,26,26,27,28,28,28,28,30,29,29,29,30,29,29,30,29,29,30,29,30,29,29,30,29,30,29,30,29,30,29,30,30,30,29,30,30,30,30,29,30,30,29,29,30,30,30,30,30,30,30,29,29,29,30,30,30,30,30,28,29,29,28,27,28,28,25,26,26,26,25,26,26,26,25,25,24,24,26,26,25,26,26,26,25,27,26,27,27,28,27,27,28,28,29,29,30,30,30,29,29,30,30,29,30,30,30,30,30,30,29,29,30,29,29,30,30,30,30,30,30,30,30,30,29,29,29,29,29,30,29,29,30,29,29,29,29,29,29,29,29,29,29,30,29,29,30,30,30,30,30,29,29,29,28,27,28,28,26,27,28,28,27,28,28,27,27,28,28,28,29,29,28,29,29,28,29,29,30,29,30,29,30,29,29,30,29,29,30,29,30,30,29,28,30,29,28,28,30,28,27,28,29,27,28,29,29,29,29,30,29,29,29,30,30,29,30,29,30,30,28,29,29,29,29,28,29,27,28,27,27,29,29,29,29,28,28,27,28,28,27,27,28,27,27,28,27,25,27,28,25,24,26,27,23,24,25,25,23,24,24,21,23,23,24,23,22,22,21,19,19,19,16,18,18,16,16,18,16,16,16,18,18,15,15,18,17,18,15,18,15,15,17,15,15,15,15,14,13,13,13,11,9,8,9,7,7,8,7,5,5,4,3,2,1,0,1,3,2],[26,26,27,27,27,28,29,28,28,28,27,28,28,28,29,28,28,29,28,29,29,29,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,29,29,29,29,30,30,29,30,29,29,28,29,29,29,29,30,30,30,30,29,30,30,30,30,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,29,29,30,30,28,29,30,29,28,29,29,28,28,29,29,30,29,28,30,30,29,29,30,30,29,29,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,30,28,29,29,29,30,30,30,30,30,30,29,29,29,30,29,29,28,29,28,28,28,28,27,28,27,26,27,26,27,26,26,28,28,26,27,29,26,27,29,28,26,27,29,28,27,29,27,29,29,29,29,29,29,29,30,29,29,30,29,28,28,29,29,27,29,29,28,27,29,29,28,29,28,28,28,28,27,27,28,28,27,28,28,27,26,28,27,27,28,28,29,29,28,28,29,29,29,29,29,29,29,29,29,30,29,29,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,28,30,29,29,29,30,29,28,28,28,28,26,28,27,27,26,28,27,26,27,27,26,25,27,26,26,26,27,26,26,25,23,26,25,24,23,26,26,26,27,25,26,27,27,27,27,28,28,27,27,28,26,28,29,28,27,27,28,27,27,27,28,27,27,27,27,27,27,26,26,26,26,26,26,26,20,20,23,21,22,24,24,25,26,27,27,28,27,27,27,27,27,26,28,26,26,27,26,26,26,26,27,27,26,26,27,27,27,28,27,27,29,29,29,29,29,29,28,29,29,28,29,28,29,29,28,29,29,30,29,30,29,30,29,29,30,30,29,29,30,29,29,29,29,29,29,29,29,30,30,29,30,29,30,29,29,30,30,30,29,29,30,28,29,29,28,28,28,28,27,27,26,27,27,26,26,26,27,27,25,26,26,27,26,26,27,27,26,28,27,26,26,26,27,28,28,28,29,29,29,29,29,29,29,29,30,30,29,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,30,29,29,29,29,30,30,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,28,28,27,28,28,27,27,27,28,27,28,28,28,28,28,28,28,29,27,28,29,29,29,29,29,29,30,30,29,30,29,29,29,29,30,30,29,28,30,29,28,28,30,28,27,28,28,28,29,28,29,29,28,29,29,29,29,29,29,29,30,30,29,29,29,29,29,29,28,28,29,27,28,27,27,28,28,28,28,28,28,27,27,26,27,26,27,27,26,27,26,24,26,27,26,24,26,27,25,24,26,26,23,26,26,23,26,26,26,26,24,24,22,20,20,20,16,19,19,19,16,18,16,17,18,21,19,16,17,21,17,20,15,19,16,16,19,17,15,16,17,15,16,15,14,12,11,10,9,8,7,8,8,6,6,4,3,3,2,1,0,1,2],[25,26,26,27,26,27,28,28,27,28,27,28,28,27,28,27,28,28,28,29,28,28,29,29,28,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,28,29,30,30,29,29,30,29,28,30,29,30,29,29,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,28,29,29,29,28,28,28,28,27,27,28,28,28,28,28,28,29,27,29,29,29,28,28,29,29,27,28,27,29,29,30,29,30,30,30,30,30,29,30,30,28,29,30,30,28,30,29,28,28,29,30,29,30,29,28,29,29,28,28,29,29,27,28,28,28,26,27,27,28,28,28,29,29,29,29,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,30,29,29,29,29,29,28,27,28,27,26,28,27,27,27,27,25,27,28,26,27,28,28,27,28,27,27,26,26,25,23,27,27,27,28,26,28,28,26,28,28,29,27,27,28,28,26,28,29,27,27,28,29,27,28,27,28,27,27,27,27,28,27,27,27,26,27,26,27,26,21,22,24,22,22,24,25,25,27,27,26,28,27,28,28,27,27,27,28,27,27,28,27,26,26,26,28,26,26,27,28,27,28,28,28,27,30,29,29,29,29,29,30,29,30,29,29,28,29,29,28,29,29,30,30,30,30,30,29,30,30,30,29,30,29,30,30,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,29,29,28,28,28,28,27,27,28,27,27,27,26,27,27,28,26,27,27,27,27,28,27,26,28,26,28,28,28,28,29,29,28,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,29,29,30,30,30,30,30,30,30,30,30,29,29,30,29,28,29,29,28,28,28,28,28,28,28,27,28,29,27,28,28,28,28,29,28,29,29,29,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,28,29,30,28,27,28,28,27,28,28,28,29,29,29,29,30,29,29,30,30,30,29,30,30,29,30,30,29,29,29,29,27,28,27,28,28,28,29,28,28,28,28,28,28,27,27,27,26,27,27,26,26,27,27,26,25,27,27,26,27,27,26,25,26,26,25,26,26,26,25,23,23,22,20,22,20,19,20,19,20,18,19,18,19,19,20,20,17,16,20,19,19,16,19,16,18,19,17,16,16,16,14,16,14,14,13,11,12,11,9,9,9,9,7,7,6,4,4,4,2,1,0,1],[26,27,27,28,28,28,29,28,28,28,28,28,28,28,29,28,29,28,28,29,28,28,29,29,29,29,29,29,30,29,29,30,29,30,30,29,29,29,30,29,30,30,29,29,29,30,29,29,29,30,29,30,30,30,30,29,30,30,30,30,29,29,30,30,30,30,30,30,30,30,31,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,31,31,31,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,29,30,30,29,29,29,29,28,28,28,29,29,28,28,28,27,29,28,27,29,30,27,29,30,29,28,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,27,30,30,29,27,29,30,29,30,30,29,29,30,29,28,29,29,27,28,29,28,26,27,27,28,29,28,29,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,29,29,29,29,29,29,29,29,30,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,29,29,30,30,30,29,30,28,29,29,28,28,28,27,27,29,27,27,27,28,26,27,28,28,27,28,29,28,27,28,26,27,25,26,24,26,27,27,27,27,27,28,26,29,28,29,27,28,29,29,26,29,29,27,26,29,29,27,29,26,29,28,28,27,26,28,27,26,27,27,27,24,27,27,20,20,26,20,23,25,26,26,27,27,26,27,26,28,28,27,25,27,28,27,26,28,28,27,27,28,27,27,28,28,28,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,28,27,29,29,28,28,28,28,27,27,28,28,28,28,27,28,28,28,28,29,28,28,29,29,28,28,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,28,28,29,29,28,29,28,28,29,29,28,29,29,29,29,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,29,27,29,29,27,28,29,30,29,30,30,29,30,30,30,31,30,30,29,30,30,29,29,30,30,29,28,29,27,28,27,27,29,29,29,29,27,29,28,30,28,27,29,28,28,28,28,29,27,29,29,27,26,28,28,26,28,27,27,26,26,27,27,28,26,26,26,25,25,23,21,23,23,20,21,21,21,19,19,19,19,19,21,21,18,18,20,21,21,18,23,19,23,22,22,20,18,19,18,17,15,16,17,13,14,16,13,11,11,12,10,9,7,6,6,4,4,3,1,0]],"max_predicted_aligned_error":31.75}] \ No newline at end of file diff --git a/resources/lang/Messages.properties b/resources/lang/Messages.properties index 7c68c3b..add014c 100644 --- a/resources/lang/Messages.properties +++ b/resources/lang/Messages.properties @@ -449,6 +449,7 @@ label.input_cut_paste_params = Cut & Paste Input - {0} label.alignment_output_command = Alignment output - {0} label.annotations = Annotations label.structure_options = Structure Options +label.structure_import_options = Structure Import Options label.features = Features label.overview_params = Overview {0} label.paste_newick_file = Paste Newick file @@ -1448,8 +1449,17 @@ label.tftype_default = Default label.tftype_plddt = pLDDT label.optional = (optional) label.choose_tempfac_type = Choose Temperature Factor type +label.interpret_tempfac_as = Interpret Temperature Factor as label.add_pae_matrix_file = Add PAE matrix file label.nothing_selected = Nothing selected prompt.google_analytics_title = Jalview Usage Statistics prompt.google_analytics = Do you want to help make Jalview better by enabling the collection of usage statistics with Google Analytics ?\n(you can enable or disable usage tracking in the preferences) +label.working_ellipsis = Working ... +action.show_groups_on_matrix = Show groups on matrix +action.show_groups_on_matrix_tooltip = When enabled, clusters defined on the matrix's associated tree or below the assigned threshold are shown as different colours on the matrix annotation row +action.show_tree_for_matrix = Show tree for matrix +action.show_tree_for_matrix_tooltip = Opens a tree viewer to display the average distance tree for the matrix +action.cluster_matrix = Cluster matrix +action.clustering_matrix_for = Calculating tree for matrix {0} and clustering at {1} +action.cluster_matrix_tooltip = Computes an average distance tree for the matrix and displays it diff --git a/schemas/vamsas.xsd b/schemas/vamsas.xsd index abfabb1..fedbae3 100755 --- a/schemas/vamsas.xsd +++ b/schemas/vamsas.xsd @@ -318,7 +318,7 @@ - Comma separated series of BigIntegers formed from + Comma separated series of longs formed from bitsets defining partitions on the rows/columns of the matrix @@ -331,6 +331,13 @@ + + + mapping from the matrix row and column positions to + associated reference frame + + diff --git a/src/jalview/analysis/AlignmentSorter.java b/src/jalview/analysis/AlignmentSorter.java index 0f3edfd..b02d49c 100755 --- a/src/jalview/analysis/AlignmentSorter.java +++ b/src/jalview/analysis/AlignmentSorter.java @@ -548,7 +548,9 @@ public class AlignmentSorter if ((left == null) && (right == null)) { - if (!(node instanceof SequenceNode && ((SequenceNode)node).isPlaceholder()) && (node.element() != null)) + if (!(node instanceof SequenceNode + && ((SequenceNode) node).isPlaceholder()) + && (node.element() != null)) { if (node.element() instanceof SequenceI) { diff --git a/src/jalview/analysis/AlignmentUtils.java b/src/jalview/analysis/AlignmentUtils.java index 0906872..1158c53 100644 --- a/src/jalview/analysis/AlignmentUtils.java +++ b/src/jalview/analysis/AlignmentUtils.java @@ -184,10 +184,10 @@ public class AlignmentUtils // TODO use Character.toLowerCase to avoid creating String objects? char[] upstream = new String(ds .getSequence(s.getStart() - 1 - ustream_ds, s.getStart() - 1)) - .toLowerCase(Locale.ROOT).toCharArray(); + .toLowerCase(Locale.ROOT).toCharArray(); char[] downstream = new String( ds.getSequence(s_end - 1, s_end + dstream_ds)) - .toLowerCase(Locale.ROOT).toCharArray(); + .toLowerCase(Locale.ROOT).toCharArray(); char[] coreseq = s.getSequence(); char[] nseq = new char[offset + upstream.length + downstream.length + coreseq.length]; @@ -1471,19 +1471,20 @@ public class AlignmentUtils */ final Iterable matchedAlignmentAnnotations = al .findAnnotations(seq, dsann.getCalcId(), dsann.label); - boolean found=false; + boolean found = false; if (matchedAlignmentAnnotations != null) { - for (AlignmentAnnotation matched:matchedAlignmentAnnotations) + for (AlignmentAnnotation matched : matchedAlignmentAnnotations) { if (dsann.description.equals(matched.description)) { - found=true; + found = true; break; } } } - if (!found) { + if (!found) + { result.add(dsann); if (labelForCalcId != null) { @@ -1503,7 +1504,8 @@ public class AlignmentUtils /** * Adds annotations to the top of the alignment annotations, in the same order - * as their related sequences. + * as their related sequences. If you already have an annotation and want to + * add it to a sequence in an alignment use {@code addReferenceAnnotationTo} * * @param annotations * the annotations to add @@ -1520,38 +1522,60 @@ public class AlignmentUtils { for (AlignmentAnnotation ann : annotations.get(seq)) { - AlignmentAnnotation copyAnn = new AlignmentAnnotation(ann); - int startRes = 0; - int endRes = ann.annotations.length; - if (selectionGroup != null) - { - startRes = selectionGroup.getStartRes(); - endRes = selectionGroup.getEndRes(); - } - copyAnn.restrict(startRes, endRes + 0); + addReferenceAnnotationTo(alignment, seq, ann, selectionGroup); + } + } + } - /* - * Add to the sequence (sets copyAnn.datasetSequence), unless the - * original annotation is already on the sequence. - */ - if (!seq.hasAnnotation(ann)) - { - ContactMatrixI cm = seq.getDatasetSequence() - .getContactMatrixFor(ann); - if (cm != null) - { - seq.addContactListFor(copyAnn, cm); - } - seq.addAlignmentAnnotation(copyAnn); - } - // adjust for gaps - copyAnn.adjustForAlignment(); - // add to the alignment and set visible - alignment.addAnnotation(copyAnn); - copyAnn.visible = true; + /** + * Make a copy of a reference annotation {@code ann} and add it to an + * alignment sequence {@code seq} in {@code alignment}, optionally limited to + * the extent of {@code selectionGroup} + * + * @param alignment + * @param seq + * @param ann + * @param selectionGroup + * - may be null + * @return annotation added to {@code seq and {@code alignment} + */ + public static AlignmentAnnotation addReferenceAnnotationTo( + final AlignmentI alignment, final SequenceI seq, + final AlignmentAnnotation ann, final SequenceGroup selectionGroup) + { + AlignmentAnnotation copyAnn = new AlignmentAnnotation(ann); + int startRes = 0; + int endRes = ann.annotations.length; + if (selectionGroup != null) + { + startRes = -1 + Math.min(seq.getEnd(), Math.max(seq.getStart(), + seq.findPosition(selectionGroup.getStartRes()))); + endRes = -1 + Math.min(seq.getEnd(), + seq.findPosition(selectionGroup.getEndRes())); + + } + copyAnn.restrict(startRes, endRes + 0); + + /* + * Add to the sequence (sets copyAnn.datasetSequence), unless the + * original annotation is already on the sequence. + */ + if (!seq.hasAnnotation(ann)) + { + ContactMatrixI cm = seq.getDatasetSequence().getContactMatrixFor(ann); + if (cm != null) + { + seq.addContactListFor(copyAnn, cm); } + seq.addAlignmentAnnotation(copyAnn); } + // adjust for gaps + copyAnn.adjustForAlignment(); + // add to the alignment and set visible + alignment.addAnnotation(copyAnn); + copyAnn.visible = true; + return copyAnn; } /** diff --git a/src/jalview/analysis/AnnotationSorter.java b/src/jalview/analysis/AnnotationSorter.java index 0f0cf68..1f2e78f 100644 --- a/src/jalview/analysis/AnnotationSorter.java +++ b/src/jalview/analysis/AnnotationSorter.java @@ -157,12 +157,13 @@ public class AnnotationSorter return showAutocalcAbove ? 1 : -1; } int computedOrder = compareSequences(o1, o2); - if (computedOrder==0) { + if (computedOrder == 0) + { computedOrder = compareLabels(o1, o2); } - if (computedOrder==0) + if (computedOrder == 0) { - computedOrder = compareDescriptions(o1,o2); + computedOrder = compareDescriptions(o1, o2); } return computedOrder; } @@ -365,18 +366,19 @@ public class AnnotationSorter } String label1 = o1.label; String label2 = o2.label; - return compareString(label1,label2); + return compareString(label1, label2); } /** - * Non-case-sensitive comparison of annotation descriptions. Returns zero if either - * argument is null. + * Non-case-sensitive comparison of annotation descriptions. Returns zero if + * either argument is null. * * @param o1 * @param o2 * @return */ - private int compareDescriptions(AlignmentAnnotation o1, AlignmentAnnotation o2) + private int compareDescriptions(AlignmentAnnotation o1, + AlignmentAnnotation o2) { if (o1 == null || o2 == null) { @@ -384,8 +386,9 @@ public class AnnotationSorter } String label1 = o1.description; String label2 = o2.description; - return compareString(label1,label2); + return compareString(label1, label2); } + private int compareString(String label1, String label2) { if (label1 == null && label2 == null) diff --git a/src/jalview/analysis/AverageDistanceEngine.java b/src/jalview/analysis/AverageDistanceEngine.java index e6a763b..f4d69d5 100644 --- a/src/jalview/analysis/AverageDistanceEngine.java +++ b/src/jalview/analysis/AverageDistanceEngine.java @@ -100,11 +100,18 @@ public class AverageDistanceEngine extends TreeEngine // compute distance matrix element ContactListI ith = cm.getContactList(i); - + distances.setValue(i, i, 0); + if (ith==null) + { + continue; + } for (int j = 0; j < i; j++) { - distances.setValue(i, i, 0); ContactListI jth = cm.getContactList(j); + if (jth == null) + { + break; + } double prd = 0; for (int indx = 0; indx < cm.getHeight(); indx++) { diff --git a/src/jalview/analysis/TreeModel.java b/src/jalview/analysis/TreeModel.java index dd56424..0e57a58 100644 --- a/src/jalview/analysis/TreeModel.java +++ b/src/jalview/analysis/TreeModel.java @@ -80,7 +80,7 @@ public class TreeModel public TreeModel(SequenceI[] seqs, AlignmentView odata, NewickFile treefile) { - this(seqs, treefile.getTree(), treefile.HasDistances(), + this(seqs, treefile.getTree(), treefile.HasDistances(), treefile.HasBootstrap(), treefile.HasRootDistance()); seqData = odata; @@ -94,7 +94,7 @@ public class TreeModel */ public TreeModel(TreeBuilder tree) { - this(tree.getSequences(), tree.getTopNode(), tree.hasDistances(), + this(tree.getSequences(), tree.getTopNode(), tree.hasDistances(), tree.hasBootstrap(), tree.hasRootDistance()); seqData = tree.getOriginalData(); } @@ -141,7 +141,7 @@ public class TreeModel while (i < leaves.size()) { // TODO - decide if we get rid of the polymorphism here ? - j = (SequenceNode)leaves.elementAt(i++); + j = (SequenceNode) leaves.elementAt(i++); realnam = j.getName(); nam = null; @@ -311,8 +311,7 @@ public class TreeModel * * @return Vector of leaf nodes on binary tree */ - Vector findLeaves(BinaryNode nd, - Vector leaves) + Vector findLeaves(BinaryNode nd, Vector leaves) { if (nd == null) { @@ -409,8 +408,8 @@ public class TreeModel } else { - _groupNodes(groups, (SequenceNode) nd.left(), threshold); - _groupNodes(groups, (SequenceNode) nd.right(), threshold); + _groupNodes(groups, nd.left(), threshold); + _groupNodes(groups, nd.right(), threshold); } } diff --git a/src/jalview/api/AlignViewportI.java b/src/jalview/api/AlignViewportI.java index 03efec5..0cfd03d 100644 --- a/src/jalview/api/AlignViewportI.java +++ b/src/jalview/api/AlignViewportI.java @@ -477,6 +477,15 @@ public interface AlignViewportI extends ViewStyleI */ SearchResultsI getSearchResults(); + /** + * Retrieve a ContactListI corresponding to column in an annotation row in an + * alignment. + * + * @param _aa + * - annotation with associated matrix data + * @param column + * - column in alignment where _aa is associated + */ ContactListI getContactList(AlignmentAnnotation _aa, int column); /** diff --git a/src/jalview/appletgui/TreeCanvas.java b/src/jalview/appletgui/TreeCanvas.java index 8c3e39a..f965ff4 100755 --- a/src/jalview/appletgui/TreeCanvas.java +++ b/src/jalview/appletgui/TreeCanvas.java @@ -131,7 +131,7 @@ public class TreeCanvas extends Panel { BinaryNode lf = leaves.elementAt(i); - if (lf instanceof SequenceNode && ((SequenceNode)lf).isPlaceholder()) + if (lf instanceof SequenceNode && ((SequenceNode) lf).isPlaceholder()) { has_placeholders = true; } @@ -211,9 +211,10 @@ public class TreeCanvas extends Panel g.drawString(nodeLabel, xstart + 2, ypos - 2); } - String name = (markPlaceholders && node instanceof SequenceNode && ((SequenceNode) node).isPlaceholder()) - ? (PLACEHOLDER + node.getName()) - : node.getName(); + String name = (markPlaceholders && node instanceof SequenceNode + && ((SequenceNode) node).isPlaceholder()) + ? (PLACEHOLDER + node.getName()) + : node.getName(); FontMetrics fm = g.getFontMetrics(font); int charWidth = fm.stringWidth(name) + 3; int charHeight = fm.getHeight(); @@ -385,8 +386,8 @@ public class TreeCanvas extends Panel } else { - pickNode(pickBox, (BinaryNode) node.left(), chunk, scale, width, - offx, offy); + pickNode(pickBox, (BinaryNode) node.left(), chunk, scale, width, offx, + offy); pickNode(pickBox, (BinaryNode) node.right(), chunk, scale, width, offx, offy); } diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index f4c8854..6b33fea 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -1436,11 +1436,10 @@ public class Cache if (customProxySet && // we have a username but no password for the scheme being // requested - (protocol.equalsIgnoreCase("http") - && (httpUser != null - && httpUser.length() > 0 - && (httpPassword == null - || httpPassword.length == 0))) + (protocol.equalsIgnoreCase("http") + && (httpUser != null && httpUser.length() > 0 + && (httpPassword == null + || httpPassword.length == 0))) || (protocol.equalsIgnoreCase("https") && (httpsUser != null && httpsUser.length() > 0 diff --git a/src/jalview/bin/Commands.java b/src/jalview/bin/Commands.java index 753ded2..30fdc30 100644 --- a/src/jalview/bin/Commands.java +++ b/src/jalview/bin/Commands.java @@ -452,14 +452,6 @@ public class Commands Console.debug("Using structure file " + structureFile.getAbsolutePath()); - // ##### Does this need to happen? Follow - // openStructureFileForSequence() below - /* - PDBEntry fileEntry = new AssociatePdbFileWithSeq() - .associatePdbWithSeq(structureFile.getAbsolutePath(), - DataSourceType.FILE, seq, true, Desktop.instance); - */ - // open structure view AlignmentPanel ap = af.alignPanel; if (headless) @@ -505,15 +497,6 @@ public class Commands Arg.NOTEMPFAC, subVals, null, "ADD_TEMPFACT_ANN", false, true); TFType tft = notempfac ? null : TFType.DEFAULT; - /* - String tftString = subVals.get("tempfac"); - ArgValue tftAv = getArgAssociatedWithStructure(Arg.TEMPFAC, avm, - af, structureFilepath); - if (tftString == null && tftAv != null) - { - tftString = tftAv.getSubVals().getContent(); - } - */ if (tftString != null && !notempfac) { // get kind of temperature factor annotation diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index 517a6dd..514a326 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -2050,14 +2050,14 @@ public class Alignment implements AlignmentI, AutoCloseable public ContactMatrixI getContactMatrixFor(AlignmentAnnotation _aa) { ContactMatrixI cm = cmholder.getContactMatrixFor(_aa); - if (cm==null && _aa.groupRef!=null) + if (cm == null && _aa.groupRef != null) { cm = _aa.groupRef.getContactMatrixFor(_aa); } - if (cm==null && _aa.sequenceRef!=null) + if (cm == null && _aa.sequenceRef != null) { cm = _aa.sequenceRef.getContactMatrixFor(_aa); - if (cm==null) + if (cm == null) { // TODO fix up this logic and unify with getContactListFor cm = _aa.sequenceRef.getDatasetSequence().getContactMatrixFor(_aa); @@ -2076,14 +2076,19 @@ public class Alignment implements AlignmentI, AutoCloseable } if (cl == null && _aa.sequenceRef != null) { - int spos = _aa.sequenceRef.findPosition(column); - if (spos >= _aa.sequenceRef.getStart() - && spos <= 1 + _aa.sequenceRef.getEnd()) + if (_aa.annotations[column] != null) { - cl = _aa.sequenceRef.getContactListFor(_aa, spos-_aa.sequenceRef.getStart()); + // sequence associated + cl = _aa.sequenceRef.getContactListFor(_aa, column); if (cl == null && _aa.sequenceRef.getDatasetSequence() != null) { - _aa.sequenceRef.getDatasetSequence().getContactListFor(_aa, spos-_aa.sequenceRef.getStart()); + int spos = _aa.sequenceRef.findPosition(column); + if (spos >= _aa.sequenceRef.getStart() + && spos <= 1 + _aa.sequenceRef.getEnd()) + { + cl = _aa.sequenceRef.getDatasetSequence().getContactListFor(_aa, + spos - _aa.sequenceRef.getStart()); + } } } } @@ -2096,8 +2101,7 @@ public class Alignment implements AlignmentI, AutoCloseable AlignmentAnnotation aa = cmholder.addContactList(cm); Annotation _aa[] = new Annotation[getWidth()]; - Annotation dummy = new Annotation(0.0f); - for (int i = 0; i < _aa.length; _aa[i++] = dummy) + for (int i = 0; i < _aa.length; _aa[i++] = new Annotation(0.0f)) { ; } diff --git a/src/jalview/datamodel/AlignmentAnnotation.java b/src/jalview/datamodel/AlignmentAnnotation.java index 4861dfd..de98c64 100755 --- a/src/jalview/datamodel/AlignmentAnnotation.java +++ b/src/jalview/datamodel/AlignmentAnnotation.java @@ -308,6 +308,11 @@ public class AlignmentAnnotation public static final int CONTACT_MAP = 4; + /** + * property that when set to non-empty string disables display of column groups defined on the contact matrix + */ + public static final String CONTACT_MAP_NOGROUPS = "CMNOGRPS"; + public boolean belowAlignment = true; public SequenceGroup groupRef = null; @@ -568,12 +573,12 @@ public class AlignmentAnnotation : annotations[index + offset].displayCharacter == null || annotations[index + offset].displayCharacter - .length() == 0 - ? annotations[index - + offset].secondaryStructure - : annotations[index - + offset].displayCharacter - .charAt(0)); + .length() == 0 + ? annotations[index + + offset].secondaryStructure + : annotations[index + + offset].displayCharacter + .charAt(0)); } @Override @@ -1745,5 +1750,23 @@ public class AlignmentAnnotation } return aa; } + + /** + * convenience method to check for the 'CONTACT_MAP_NOGROUPS' property for this alignment annotation row + * @return true if no CONTACT_MAP_NOGROUPS property is found, or it is set to "" + */ + public boolean isShowGroupsForContactMatrix() + { + return getProperty(AlignmentAnnotation.CONTACT_MAP_NOGROUPS)==null || "".equals(getProperty(AlignmentAnnotation.CONTACT_MAP_NOGROUPS)); + } + /** + * set the 'CONTACT_MAP_NOGROUPS' property for this alignment annotation row + * @see isShowGroupsForContactMatrix + */ + public void setShowGroupsForContactMatrix(boolean showGroups) + { + setProperty(AlignmentAnnotation.CONTACT_MAP_NOGROUPS, showGroups ? "" : "nogroups"); + } + } diff --git a/src/jalview/datamodel/BinaryNode.java b/src/jalview/datamodel/BinaryNode.java index 5b55594..624c2b9 100755 --- a/src/jalview/datamodel/BinaryNode.java +++ b/src/jalview/datamodel/BinaryNode.java @@ -23,22 +23,22 @@ package jalview.datamodel; import java.awt.Color; /** - * DOCUMENT ME! + * Represent a node in a binary tree * - * @author $author$ + * @author $mclamp (probably!)$ * @version $Revision$ */ -public class BinaryNode +public class BinaryNode { - Object element; + T element; String name; - BinaryNode left; + BinaryNode left; - BinaryNode right; + BinaryNode right; - BinaryNode parent; + BinaryNode parent; /** Bootstrap value */ public int bootstrap; @@ -58,7 +58,10 @@ public class BinaryNode /** DOCUMENT ME!! */ public Color color = Color.black; - /** DOCUMENT ME!! */ + /** + * if true, node is created to simulate polytomy between parent and its 3 or + * more children + */ public boolean dummy = false; /** @@ -81,7 +84,7 @@ public class BinaryNode * @param name * DOCUMENT ME! */ - public BinaryNode(Object element, BinaryNode parent, String name, + public BinaryNode(T element, BinaryNode parent, String name, double dist) { this(); @@ -91,14 +94,14 @@ public class BinaryNode this.dist = dist; } - public BinaryNode(Object element, BinaryNode parent, String name, + public BinaryNode(T element, BinaryNode parent, String name, double dist, int bootstrap) { this(element, parent, name, dist); this.bootstrap = bootstrap; } - public BinaryNode(Object val, BinaryNode parent, String name, double dist, + public BinaryNode(T val, BinaryNode parent, String name, double dist, int bootstrap, boolean dummy) { this(val, parent, name, dist, bootstrap); @@ -110,7 +113,7 @@ public class BinaryNode * * @return DOCUMENT ME! */ - public Object element() + public T element() { return element; } @@ -123,7 +126,7 @@ public class BinaryNode * * @return DOCUMENT ME! */ - public Object setElement(Object v) + public T setElement(T v) { return element = v; } @@ -133,7 +136,7 @@ public class BinaryNode * * @return DOCUMENT ME! */ - public BinaryNode left() + public BinaryNode left() { return left; } @@ -146,7 +149,7 @@ public class BinaryNode * * @return DOCUMENT ME! */ - public BinaryNode setLeft(BinaryNode n) + public BinaryNode setLeft(BinaryNode n) { return left = n; } @@ -156,7 +159,7 @@ public class BinaryNode * * @return DOCUMENT ME! */ - public BinaryNode right() + public BinaryNode right() { return right; } @@ -169,7 +172,7 @@ public class BinaryNode * * @return DOCUMENT ME! */ - public BinaryNode setRight(BinaryNode n) + public BinaryNode setRight(BinaryNode n) { return right = n; } @@ -179,7 +182,7 @@ public class BinaryNode * * @return DOCUMENT ME! */ - public BinaryNode parent() + public BinaryNode parent() { return parent; } @@ -192,7 +195,7 @@ public class BinaryNode * * @return DOCUMENT ME! */ - public BinaryNode setParent(BinaryNode n) + public BinaryNode setParent(BinaryNode n) { return parent = n; } @@ -214,7 +217,7 @@ public class BinaryNode * setChild(null), or detach() for this. * */ - public void SetChildren(BinaryNode leftchild, BinaryNode rightchild) + public void SetChildren(BinaryNode leftchild, BinaryNode rightchild) { if (leftchild != null) { @@ -236,7 +239,7 @@ public class BinaryNode * * @return BinaryNode The detached node. */ - public BinaryNode detach() + public BinaryNode detach() { if (this.parent != null) { @@ -264,9 +267,9 @@ public class BinaryNode * * @return BinaryNode */ - public BinaryNode ascendLeft() + public BinaryNode ascendLeft() { - BinaryNode c = this; + BinaryNode c = this; do { @@ -283,9 +286,9 @@ public class BinaryNode * * @return BinaryNode */ - public BinaryNode ascendRight() + public BinaryNode ascendRight() { - BinaryNode c = this; + BinaryNode c = this; do { @@ -366,9 +369,9 @@ public class BinaryNode * ascends the tree but doesn't stop until a non-dummy node is discovered. * */ - public BinaryNode AscendTree() + public BinaryNode AscendTree() { - BinaryNode c = this; + BinaryNode c = this; do { diff --git a/src/jalview/datamodel/ColumnSelection.java b/src/jalview/datamodel/ColumnSelection.java index 6ee324f..4a38ec0 100644 --- a/src/jalview/datamodel/ColumnSelection.java +++ b/src/jalview/datamodel/ColumnSelection.java @@ -278,6 +278,27 @@ public class ColumnSelection } /** + * add a series of start,end (inclusive) ranges to the column selection + * + * @param rng + * [start_0, end_0, start_1, end_1, ... ] + * @param baseOne + * - when true, ranges are base 1 and will be mapped to base 0 + */ + public void addRangeOfElements(int[] rng, boolean baseOne) + { + int base = baseOne ? -1 : 0; + for (int c = 0; c < rng.length; c += 2) + { + for (int p = rng[c]; p <= rng[c + 1]; p++) + { + selection.add(base + p); + } + } + + } + + /** * clears column selection */ public void clear() @@ -586,8 +607,8 @@ public class ColumnSelection int cpos = ann_row.sequenceRef.findPosition(column) - 1; ContactListI clist = ann_row.sequenceRef .getContactListFor(ann_row, cpos); - for (int row = column + 8, - rowEnd = clist.getContactHeight(); row < rowEnd; row++) + for (int row = column + 8, rowEnd = clist + .getContactHeight(); row < rowEnd; row++) { if (filterParams .getThresholdType() == AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD diff --git a/src/jalview/datamodel/ContactListI.java b/src/jalview/datamodel/ContactListI.java index ac06adb..da55403 100644 --- a/src/jalview/datamodel/ContactListI.java +++ b/src/jalview/datamodel/ContactListI.java @@ -1,5 +1,9 @@ package jalview.datamodel; +import java.awt.Color; + +import jalview.renderer.ContactGeometry.contactInterval; + public interface ContactListI extends ContactListProviderI { @@ -12,4 +16,8 @@ public interface ContactListI extends ContactListProviderI */ ContactRange getRangeFor(int from_column, int to_column); + default Color getColourForGroup() + { + return null; + } } diff --git a/src/jalview/datamodel/ContactListImpl.java b/src/jalview/datamodel/ContactListImpl.java index 8e806e4..69dcf71 100644 --- a/src/jalview/datamodel/ContactListImpl.java +++ b/src/jalview/datamodel/ContactListImpl.java @@ -1,5 +1,9 @@ package jalview.datamodel; +import java.awt.Color; + +import jalview.renderer.ContactGeometry.contactInterval; + /** * helper class to compute min/max/mean for a range on a contact list * @@ -95,4 +99,15 @@ public class ContactListImpl implements ContactListI return cr; } + @Override + public int[] getMappedPositionsFor(int cStart, int cEnd) + { + return clist.getMappedPositionsFor(cStart, cEnd); + } + + @Override + public Color getColourForGroup() + { + return clist.getColourForGroup(); + } } diff --git a/src/jalview/datamodel/ContactListProviderI.java b/src/jalview/datamodel/ContactListProviderI.java index f027e01..d6e9ba9 100644 --- a/src/jalview/datamodel/ContactListProviderI.java +++ b/src/jalview/datamodel/ContactListProviderI.java @@ -1,5 +1,7 @@ package jalview.datamodel; +import java.awt.Color; + public interface ContactListProviderI { @@ -26,4 +28,23 @@ public interface ContactListProviderI */ double getContactAt(int column); + /** + * Return positions in local reference corresponding to cStart and cEnd in + * matrix data. Positions are base 1 column indices for sequence associated + * matrices. + * + * @param cStart + * @param cEnd + * @return int[] { start, end (inclusive) for each contiguous segment} + */ + default int[] getMappedPositionsFor(int cStart, int cEnd) + { + return new int[] { cStart, cEnd }; + } + + default Color getColourForGroup() + { + return null; + } + } diff --git a/src/jalview/datamodel/ContactMapHolder.java b/src/jalview/datamodel/ContactMapHolder.java index 296feaf..af083dd 100644 --- a/src/jalview/datamodel/ContactMapHolder.java +++ b/src/jalview/datamodel/ContactMapHolder.java @@ -5,6 +5,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import jalview.ws.datamodel.MappableContactMatrixI; + public class ContactMapHolder implements ContactMapHolderI { @@ -28,6 +30,14 @@ public class ContactMapHolder implements ContactMapHolderI { return null; } + if (cm instanceof MappableContactMatrixI) + { + if (_aa.sequenceRef != null) + { + return ((MappableContactMatrixI) cm) + .getMappableContactList(_aa.sequenceRef, column); + } + } // TODO: could resolve sequence position to column position here // TODO: what about for complexes - where contactMatrix may involve two or // more sequences @@ -49,9 +59,9 @@ public class ContactMapHolder implements ContactMapHolderI contactmaps.put(aa.annotationId, cm); // TODO: contact matrices could be intra or inter - more than one refseq // possible! - if (cm.hasReferenceSeq()) + if (cm instanceof MappableContactMatrixI) { - aa.setSequenceRef(cm.getReferenceSeq()); + aa.setSequenceRef(((MappableContactMatrixI) cm).getReferenceSeq()); } return aa; } diff --git a/src/jalview/datamodel/ContactMatrix.java b/src/jalview/datamodel/ContactMatrix.java index 8434b4a..48b6e6b 100644 --- a/src/jalview/datamodel/ContactMatrix.java +++ b/src/jalview/datamodel/ContactMatrix.java @@ -1,10 +1,12 @@ package jalview.datamodel; import java.awt.Color; +import java.math.BigInteger; import java.util.ArrayList; import java.util.BitSet; import java.util.HashMap; import java.util.List; +import java.util.Spliterator; import java.util.StringTokenizer; import jalview.bin.Console; @@ -148,20 +150,6 @@ public abstract class ContactMatrix implements ContactMatrixI } @Override - public boolean hasReferenceSeq() - { - // TODO Auto-generated method stub - return false; - } - - @Override - public SequenceI getReferenceSeq() - { - // TODO Auto-generated method stub - return null; - } - - @Override public String getAnnotLabel() { return "Contact Matrix"; @@ -172,64 +160,17 @@ public abstract class ContactMatrix implements ContactMatrixI { return "Contact Matrix"; } - - List groups = null; - - @Override - public void updateGroups(List colGroups) - { - groups = colGroups; - colorMap = new HashMap<>(); - } - - @Override - public boolean hasGroups() - { - return groups != null && groups.size() > 0; - } - - @Override - public List getGroups() - { - return groups; - } - - @Override - public BitSet getGroupsFor(int column) - { - for (BitSet gp : groups) - { - if (gp.get(column)) - { - return gp; - } - } - return ContactMatrixI.super.getGroupsFor(column); - } - - HashMap colorMap = new HashMap<>(); - + GroupSet grps = new GroupSet(); @Override - public Color getColourForGroup(BitSet bs) + public GroupSetI getGroupSet() { - if (bs == null) - { - return Color.white; - } - Color groupCol = colorMap.get(bs); - if (groupCol == null) - { - return Color.white; - } - return groupCol; + return grps; } - @Override - public void setColorForGroup(BitSet bs, Color color) + public void setGroupSet(GroupSet makeGroups) { - colorMap.put(bs, color); + grps = makeGroups; } - public static String contactToFloatString(ContactMatrixI cm) { StringBuilder sb = new StringBuilder(); @@ -257,7 +198,6 @@ public abstract class ContactMatrix implements ContactMatrixI float[][] vals = new float[cols][rows]; StringTokenizer tabsep = new StringTokenizer(values, "" + '\t'); int c = 0, r = 0; - while (tabsep.hasMoreTokens()) { double elem = Double.valueOf(tabsep.nextToken()); @@ -269,7 +209,6 @@ public abstract class ContactMatrix implements ContactMatrixI } if (c >= vals.length) { - break; } } @@ -278,7 +217,6 @@ public abstract class ContactMatrix implements ContactMatrixI Console.warn( "Ignoring additional elements for Float string to contact matrix parsing."); } - return vals; } } diff --git a/src/jalview/datamodel/ContactMatrixI.java b/src/jalview/datamodel/ContactMatrixI.java index 3510ed1..1d20987 100644 --- a/src/jalview/datamodel/ContactMatrixI.java +++ b/src/jalview/datamodel/ContactMatrixI.java @@ -14,10 +14,6 @@ public interface ContactMatrixI float getMax(); - boolean hasReferenceSeq(); - - SequenceI getReferenceSeq(); - String getAnnotDescr(); String getAnnotLabel(); @@ -31,49 +27,99 @@ public interface ContactMatrixI String getType(); int getWidth(); - int getHeight(); - - default boolean hasGroups() { - return false; + public GroupSetI getGroupSet(); + + /// proxy methods to simplify use of the interface + /// Mappable contact matrices can override these to perform mapping + + default public boolean hasGroupSet() + { + return getGroupSet() != null; } - default BitSet getGroupsFor(int column) { - BitSet colbitset = new BitSet(); - colbitset.set(column); - return colbitset; + + default boolean hasGroups() + { + return hasGroupSet() && getGroupSet().hasGroups(); } - default List getGroups() { - return Arrays.asList(); + default BitSet getGroupsFor(int column) + { + if (!hasGroupSet()) + { + BitSet colbitset = new BitSet(); + colbitset.set(column); + return colbitset; + } + return getGroupSet().getGroupsFor(column); } - default boolean hasTree() { - return false; + default List getGroups() + { + if (!hasGroupSet()) + { + return Arrays.asList(); + } + return getGroupSet().getGroups(); + } + + default boolean hasTree() + { + return hasGroupSet() ? getGroupSet().hasTree() : false; } /** * Newick representation of clustered matrix + * * @return null unless hasTree is true */ - default String getNewick() { - return null; + default String getNewick() + { + return hasGroupSet() ? getGroupSet().getNewick() : null; + } + + default String getTreeMethod() + { + return hasGroupSet() ? getGroupSet().getTreeMethod() : null; } - default String getTreeMethod() { - return null; + default boolean hasCutHeight() + { + return hasGroupSet() ? getGroupSet().hasCutHeight() : false; } - default boolean hasCutHeight() { - return false; + default double getCutHeight() + { + return hasGroupSet() ? getGroupSet().getCutHeight() : 0; } - default double getCutHeight() { - return 0; + default void updateGroups(List colGroups) + { + if (hasGroupSet()) + { + getGroupSet().updateGroups(colGroups); + } } - void updateGroups(List colGroups); + default void setColorForGroup(BitSet bs, Color color) + { + if (hasGroupSet()) + { + getGroupSet().setColorForGroup(bs, color); + } + } - void setColorForGroup(BitSet bs, Color color); + default Color getColourForGroup(BitSet bs) + { + if (hasGroupSet()) + { + return getGroupSet().getColourForGroup(bs); + } + else + { + return Color.white; + } + } - default Color getColourForGroup(BitSet bs) { return Color.white;}; + void setGroupSet(GroupSet makeGroups); } diff --git a/src/jalview/datamodel/ContactRange.java b/src/jalview/datamodel/ContactRange.java index 5de8b04..fe66aa5 100644 --- a/src/jalview/datamodel/ContactRange.java +++ b/src/jalview/datamodel/ContactRange.java @@ -1,6 +1,5 @@ package jalview.datamodel; - /** * bean for max/min positions for a given range * @@ -31,8 +30,8 @@ public class ContactRange * @param maxPos * @param max */ - public void update(int from_column, int to_column, int minPos, - double min, int maxPos, double max, double mean) + public void update(int from_column, int to_column, int minPos, double min, + int maxPos, double max, double mean) { this.from_column = from_column; this.to_column = to_column; diff --git a/src/jalview/datamodel/GroupSet.java b/src/jalview/datamodel/GroupSet.java new file mode 100644 index 0000000..c7a73b7 --- /dev/null +++ b/src/jalview/datamodel/GroupSet.java @@ -0,0 +1,191 @@ +package jalview.datamodel; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.BitSet; +import java.util.HashMap; +import java.util.List; + +import jalview.analysis.AverageDistanceEngine; +import jalview.bin.Console; + +public class GroupSet implements GroupSetI +{ + List groups = Arrays.asList(); + + public GroupSet(GroupSet grps) + { + abs = grps.abs; + colorMap = new HashMap(grps.colorMap); + groups = new ArrayList(grps.groups); + newick = grps.newick; + thresh = grps.thresh; + treeType = grps.treeType; + } + + public GroupSet() + { + // TODO Auto-generated constructor stub + } + + public GroupSet(boolean abs2, float thresh2, List groups2, + String treeType2, String newick2) + { + abs = abs2; + thresh = thresh2; + groups = groups2; + treeType = treeType2; + newick = newick2; + } + + @Override + public boolean hasGroups() + { + return groups != null; + } + + String newick = null; + + @Override + public String getNewick() + { + return newick; + } + + @Override + public boolean hasTree() + { + return newick != null && newick.length() > 0; + } + + boolean abs = false; + + double thresh = 0; + + String treeType = null; + + @Override + public void updateGroups(List colGroups) + { + if (colGroups != null) + { + groups = colGroups; + } + } + + @Override + public BitSet getGroupsFor(int column) + { + if (groups != null) + { + for (BitSet gp : groups) + { + if (gp.get(column)) + { + return gp; + } + } + } + // return singleton set; + BitSet bs = new BitSet(); + bs.set(column); + return bs; + } + + HashMap colorMap = new HashMap<>(); + + @Override + public Color getColourForGroup(BitSet bs) + { + if (bs == null) + { + return Color.white; + } + Color groupCol = colorMap.get(bs); + if (groupCol == null) + { + return Color.white; + } + return groupCol; + } + + @Override + public void setColorForGroup(BitSet bs, Color color) + { + colorMap.put(bs, color); + } + + @Override + public void restoreGroups(List newgroups, String treeMethod, + String tree, double thresh2) + { + treeType = treeMethod; + groups = newgroups; + thresh = thresh2; + newick = tree; + + } + + @Override + public boolean hasCutHeight() + { + return groups != null && thresh != 0; + } + + @Override + public double getCutHeight() + { + return thresh; + } + + @Override + public String getTreeMethod() + { + return treeType; + } + + public static GroupSet makeGroups(ContactMatrixI matrix, float thresh, + boolean abs) + { + AverageDistanceEngine clusterer = new AverageDistanceEngine(null, null, + matrix); + double height = clusterer.findHeight(clusterer.getTopNode()); + String newick = new jalview.io.NewickFile(clusterer.getTopNode(), false, + true).print(); + String treeType = "UPGMA"; + Console.trace("Newick string\n" + newick); + + List nodegroups; + if (abs ? height > thresh : 0 < thresh && thresh < 1) + { + float cut = abs ? (float) (thresh / height) : thresh; + Console.debug("Threshold " + cut + " for height=" + height); + + nodegroups = clusterer.groupNodes(cut); + } + else + { + nodegroups = new ArrayList(); + nodegroups.add(clusterer.getTopNode()); + } + List groups = new ArrayList<>(); + for (BinaryNode root : nodegroups) + { + BitSet gpset = new BitSet(); + for (BinaryNode leaf : clusterer.findLeaves(root)) + { + gpset.set((Integer) leaf.element()); + } + groups.add(gpset); + } + GroupSet grps = new GroupSet(abs, thresh, groups, treeType, newick); + return grps; + } + + @Override + public List getGroups() + { + return groups; + } +} diff --git a/src/jalview/datamodel/GroupSetI.java b/src/jalview/datamodel/GroupSetI.java new file mode 100644 index 0000000..7c086a5 --- /dev/null +++ b/src/jalview/datamodel/GroupSetI.java @@ -0,0 +1,34 @@ +package jalview.datamodel; + +import java.awt.Color; +import java.util.BitSet; +import java.util.List; + +public interface GroupSetI +{ + boolean hasGroups(); + + String getNewick(); + + boolean hasTree(); + + void updateGroups(List colGroups); + + BitSet getGroupsFor(int column); + + Color getColourForGroup(BitSet bs); + + void setColorForGroup(BitSet bs, Color color); + + void restoreGroups(List newgroups, String treeMethod, String tree, + double thresh2); + + boolean hasCutHeight(); + + double getCutHeight(); + + String getTreeMethod(); + + List getGroups(); + +} diff --git a/src/jalview/datamodel/SeqDistanceContactMatrix.java b/src/jalview/datamodel/SeqDistanceContactMatrix.java index e37a5b2..f8fd750 100644 --- a/src/jalview/datamodel/SeqDistanceContactMatrix.java +++ b/src/jalview/datamodel/SeqDistanceContactMatrix.java @@ -5,16 +5,19 @@ import java.util.BitSet; import java.util.HashMap; import java.util.List; +import jalview.util.MapList; +import jalview.ws.datamodel.alphafold.MappableContactMatrix; /** * Dummy contact matrix based on sequence distance * * @author jprocter * */ -public class SeqDistanceContactMatrix implements ContactMatrixI +public class SeqDistanceContactMatrix + extends MappableContactMatrix + implements ContactMatrixI { private static final String SEQUENCE_DISTANCE = "SEQUENCE_DISTANCE"; - private int width = 0; public SeqDistanceContactMatrix(int width) @@ -82,20 +85,6 @@ public class SeqDistanceContactMatrix implements ContactMatrixI } @Override - public boolean hasReferenceSeq() - { - // TODO Auto-generated method stub - return false; - } - - @Override - public SequenceI getReferenceSeq() - { - // TODO Auto-generated method stub - return null; - } - - @Override public String getAnnotDescr() { return "Sequence distance matrix"; @@ -124,40 +113,16 @@ public class SeqDistanceContactMatrix implements ContactMatrixI { return width; } - private List groups=null; @Override - public void updateGroups(List colGroups) + protected double getElementAt(int _column, int i) { - groups = colGroups; + return Math.abs(_column - i); } @Override - public boolean hasGroups() + protected SeqDistanceContactMatrix newMappableContactMatrix( + SequenceI newRefSeq, MapList newFromMapList) { - return groups!=null; - } - @Override - public List getGroups() - { - return groups; - } - HashMap colorMap = new HashMap<>(); - @Override - public Color getColourForGroup(BitSet bs) - { - if (bs==null) { - return Color.white; - } - Color groupCol=colorMap.get(bs); - if (groupCol==null) - { - return Color.white; - } - return groupCol; - } - @Override - public void setColorForGroup(BitSet bs,Color color) - { - colorMap.put(bs,color); + return new SeqDistanceContactMatrix(width); } } diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 5ae7195..32d295a 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -33,12 +33,15 @@ import java.util.Vector; import fr.orsay.lri.varna.models.rna.RNA; import jalview.analysis.AlignSeq; +import jalview.analysis.AlignmentUtils; +import jalview.analysis.SeqsetUtils; import jalview.datamodel.features.SequenceFeatures; import jalview.datamodel.features.SequenceFeaturesI; import jalview.util.Comparison; import jalview.util.DBRefUtils; import jalview.util.MapList; import jalview.util.StringUtils; +import jalview.ws.datamodel.alphafold.MappableContactMatrix; /** * @@ -349,6 +352,11 @@ public class Sequence extends ASequence implements SequenceI { // only copy the given annotation AlignmentAnnotation newann = new AlignmentAnnotation(sqann[i]); + ContactMatrixI cm = seq.getContactMatrixFor(sqann[i]); + if (cm!=null) + { + addContactListFor(newann, cm); + } addAlignmentAnnotation(newann); } } @@ -1626,14 +1634,19 @@ public class Sequence extends ASequence implements SequenceI // sequence-column mapping datasetSequence.addAlignmentAnnotation(_aa); - // transfer contact matrices - ContactMatrixI cm = getContactMatrixFor(aa); - if (cm != null) - { - datasetSequence.addContactListFor(_aa, cm); + if (_cmholder != null) + { // transfer contact matrices + ContactMatrixI cm = _cmholder.getContactMatrixFor(aa); + if (cm != null) + { + datasetSequence.addContactListFor(_aa, cm); + datasetSequence.addContactListFor(aa, cm); + } } } } + // all matrices should have been transferred. so we clear the local holder + _cmholder=null; } return datasetSequence; } @@ -2118,39 +2131,70 @@ public class Sequence extends ASequence implements SequenceI //// //// Contact Matrix Holder Boilerplate //// - ContactMapHolderI cmholder = new ContactMapHolder(); + ContactMapHolderI _cmholder = null; + private ContactMapHolderI getContactMapHolder() + { + if (datasetSequence!=null) { + return ((Sequence)datasetSequence).getContactMapHolder(); + } + if (_cmholder==null) + { + _cmholder=new ContactMapHolder(); + } + return _cmholder; + } @Override public Collection getContactMaps() { - return cmholder.getContactMaps(); + return getContactMapHolder().getContactMaps(); } @Override public ContactMatrixI getContactMatrixFor(AlignmentAnnotation ann) { - return cmholder.getContactMatrixFor(ann); + return getContactMapHolder().getContactMatrixFor(ann); } @Override public ContactListI getContactListFor(AlignmentAnnotation _aa, int column) { - return cmholder.getContactListFor(_aa, column); + return getContactMapHolder().getContactListFor(_aa, column); } @Override public AlignmentAnnotation addContactList(ContactMatrixI cm) { - AlignmentAnnotation aa = cmholder.addContactList(cm); + AlignmentAnnotation aa; + + if (datasetSequence != null) + { + aa = datasetSequence.addContactList(cm); + // clone the annotation for the local sequence + aa = new AlignmentAnnotation(aa); + aa.restrict(start, end); + aa.adjustForAlignment(); + getContactMapHolder().addContactListFor(aa,cm); + addAlignmentAnnotation(aa); + return aa; + } + + // construct new annotation for matrix on dataset sequence + aa = getContactMapHolder().addContactList(cm); Annotation _aa[] = new Annotation[getLength()]; - Annotation dummy = new Annotation(0.0f); - for (int i = 0; i < _aa.length; _aa[i++] = dummy) + + for (int i = 0; i < _aa.length; _aa[i++] = new Annotation(0.0f)) { ; } aa.annotations = _aa; aa.setSequenceRef(this); + if (cm instanceof MappableContactMatrix + && !((MappableContactMatrix) cm).hasReferenceSeq()) + { + ((MappableContactMatrix) cm).setRefSeq(this); + } aa.createSequenceMapping(this, getStart(), false); addAlignmentAnnotation(aa); return aa; @@ -2160,6 +2204,6 @@ public class Sequence extends ASequence implements SequenceI public void addContactListFor(AlignmentAnnotation annotation, ContactMatrixI cm) { - cmholder.addContactListFor(annotation, cm); + getContactMapHolder().addContactListFor(annotation, cm); } } diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java index b356894..326793d 100755 --- a/src/jalview/datamodel/SequenceGroup.java +++ b/src/jalview/datamodel/SequenceGroup.java @@ -274,14 +274,6 @@ public class SequenceGroup implements AnnotatedCollectionI endRes + 1); if (seqipos != null) { - seqipos.setDescription(seq.getDescription()); - seqipos.setDBRefs(seq.getDBRefs()); - seqipos.setSequenceFeatures(seq.getSequenceFeatures()); - if (seq.getDatasetSequence() != null) - { - seqipos.setDatasetSequence(seq.getDatasetSequence()); - } - if (seq.getAnnotation() != null) { AlignmentAnnotation[] alann = align.getAlignmentAnnotation(); @@ -311,6 +303,11 @@ public class SequenceGroup implements AnnotatedCollectionI newannot.restrict(startRes, endRes); newannot.setSequenceRef(seqs[ipos]); newannot.adjustForAlignment(); + ContactMatrixI cm = seq.getContactMatrixFor(seq.getAnnotation()[a]); + if (cm!=null) + { + seqs[ipos].addContactListFor(newannot, cm); + } seqipos.addAlignmentAnnotation(newannot); } } diff --git a/src/jalview/datamodel/SequenceI.java b/src/jalview/datamodel/SequenceI.java index c789857..2e1daa3 100755 --- a/src/jalview/datamodel/SequenceI.java +++ b/src/jalview/datamodel/SequenceI.java @@ -415,7 +415,7 @@ public interface SequenceI extends ASequenceI, ContactMapHolderI /** * Derive a sequence (using this one's dataset or as the dataset) * - * @return duplicate sequence with valid dataset sequence + * @return duplicate sequence and any annotation present with valid dataset sequence */ public SequenceI deriveSequence(); diff --git a/src/jalview/datamodel/SequenceNode.java b/src/jalview/datamodel/SequenceNode.java index 010d4aa..9d00fa5 100755 --- a/src/jalview/datamodel/SequenceNode.java +++ b/src/jalview/datamodel/SequenceNode.java @@ -26,7 +26,7 @@ package jalview.datamodel; * @author $author$ * @version $Revision$ */ -public class SequenceNode extends BinaryNode +public class SequenceNode extends BinaryNode { private boolean placeholder = false; @@ -38,20 +38,20 @@ public class SequenceNode extends BinaryNode super(); } - public SequenceNode(SequenceI val, BinaryNode parent, String name, - double dist, int bootstrap, boolean dummy) + public SequenceNode(SequenceI val, BinaryNode parent, + String name, double dist, int bootstrap, boolean dummy) { super(val, parent, name, dist, bootstrap, dummy); } - public SequenceNode(SequenceI element, BinaryNode parent, String name, - double dist, int bootstrap) + public SequenceNode(SequenceI element, BinaryNode parent, + String name, double dist, int bootstrap) { super(element, parent, name, dist, bootstrap); } - public SequenceNode(SequenceI element, BinaryNode parent, String name, - double dist) + public SequenceNode(SequenceI element, BinaryNode parent, + String name, double dist) { super(element, parent, name, dist); } diff --git a/src/jalview/ext/jmol/JmolParser.java b/src/jalview/ext/jmol/JmolParser.java index b7c83c6..c64dac1 100644 --- a/src/jalview/ext/jmol/JmolParser.java +++ b/src/jalview/ext/jmol/JmolParser.java @@ -92,7 +92,6 @@ public class JmolParser extends StructureFile implements JmolStatusListener { super(fp, doXferSettings); } - public JmolParser(FileParse fp) throws IOException { super(fp); @@ -315,16 +314,26 @@ public class JmolParser extends StructureFile implements JmolStatusListener // add a PAEMatrix if set (either by above or otherwise) if (hasPAEMatrix()) { - Alignment al = new Alignment(prot.toArray(new SequenceI[0])); - EBIAlfaFold.addAlphaFoldPAE(al, new File(this.getPAEMatrix()), 0, - null, false, false, null); - - if (al.getAlignmentAnnotation() != null) + try { - for (AlignmentAnnotation alann : al.getAlignmentAnnotation()) + Alignment al = new Alignment(prot.toArray(new SequenceI[0])); + EBIAlfaFold.addAlphaFoldPAE(al, new File(this.getPAEMatrix()), 0, + null, false, false, null); + + if (al.getAlignmentAnnotation() != null) { - annotations.add(alann); + for (AlignmentAnnotation alann : al.getAlignmentAnnotation()) + { + annotations.add(alann); + } } + } catch (Throwable ff) + { + Console.error("Couldn't import PAE Matrix from " + getPAEMatrix(), + ff); + warningMessage += "Couldn't import PAE Matrix" + + getNewlineString() + ff.getLocalizedMessage() + + getNewlineString(); } } } catch (OutOfMemoryError er) diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 2365fd2..77c0238 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -111,6 +111,7 @@ import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentOrder; import jalview.datamodel.AlignmentView; import jalview.datamodel.ColumnSelection; +import jalview.datamodel.ContactMatrixI; import jalview.datamodel.HiddenColumns; import jalview.datamodel.PDBEntry; import jalview.datamodel.SeqCigar; @@ -2298,10 +2299,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .intValue(); } } - alignment.addAnnotation(sequences[i].getAnnotation()[a]); // annotation - // was - // duplicated - // earlier + // annotation was duplicated earlier + alignment.addAnnotation(sequences[i].getAnnotation()[a]); + // take care of contact matrix too + ContactMatrixI cm=sequences[i].getContactMatrixFor(sequences[i].getAnnotation()[a]); + if (cm!=null) + { + alignment.addContactListFor(sequences[i].getAnnotation()[a], cm); + } + alignment.setAnnotationIndex(sequences[i].getAnnotation()[a], a); } @@ -4195,7 +4201,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } public void showContactMapTree(AlignmentAnnotation aa, - PAEContactMatrix cm) + ContactMatrixI cm) { int x = 4, y = 5; int w = 400, h = 500; @@ -4204,8 +4210,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { NewickFile fin = new NewickFile( new FileParse(cm.getNewick(), DataSourceType.PASTE)); - String title = "PAE Matrix Tree for " - + cm.getReferenceSeq().getDisplayId(false); + String title = cm.getAnnotLabel() + " " + cm.getTreeMethod() + " tree" + + aa.sequenceRef != null + ? (" for " + aa.sequenceRef.getDisplayId(false)) + : ""; showColumnWiseTree(fin, aa, title, w, h, x, y); } catch (Throwable xx) diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index 3504560..5613f16 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -45,6 +45,7 @@ import jalview.bin.Console; import jalview.commands.CommandI; import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.ColumnSelection; import jalview.datamodel.ContactMatrixI; @@ -1158,4 +1159,5 @@ public class AlignViewport extends AlignmentViewport { this.viewName = viewName; } + } diff --git a/src/jalview/gui/AnnotationColourChooser.java b/src/jalview/gui/AnnotationColourChooser.java index a0ab709..d898398 100644 --- a/src/jalview/gui/AnnotationColourChooser.java +++ b/src/jalview/gui/AnnotationColourChooser.java @@ -41,6 +41,7 @@ import javax.swing.JPanel; import jalview.bin.Cache; import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.Annotation; import jalview.datamodel.GraphLine; import jalview.datamodel.SequenceGroup; import jalview.gui.JalviewColourChooser.ColourChooserListener; @@ -72,6 +73,10 @@ public class AnnotationColourChooser extends AnnotationRowFilter public AnnotationColourChooser(AlignViewport av, final AlignmentPanel ap) { + this(av,ap,null); + } + public AnnotationColourChooser(AlignViewport av, final AlignmentPanel ap,AnnotationColourGradient initSettings) + { super(av, ap); oldcs = av.getGlobalColourScheme(); if (av.getAlignment().getGroups() != null) @@ -105,11 +110,28 @@ public class AnnotationColourChooser extends AnnotationRowFilter setDefaultMinMax(); adjusting = true; - if (oldcs instanceof AnnotationColourGradient) + if (oldcs instanceof AnnotationColourGradient && initSettings==null) + { + // init from oldcs + initialiseFrom((AnnotationColourGradient) oldcs); + } else { + // use initial colour gradient - if any.. + initialiseFrom(initSettings); + } + + jbInit(); + adjusting = false; + + updateView(); + frame.invalidate(); + frame.pack(); + } + private void initialiseFrom(AnnotationColourGradient acg) + { + if (acg!=null) { - AnnotationColourGradient acg = (AnnotationColourGradient) oldcs; useOriginalColours.setSelected( - acg.isPredefinedColours() || acg.getBaseColour() != null); + acg.isPredefinedColours() || acg.getBaseColour() != null); if (!acg.isPredefinedColours() && acg.getBaseColour() == null) { minColour.setBackground(acg.getMinColour()); @@ -124,10 +146,14 @@ public class AnnotationColourChooser extends AnnotationRowFilter populateThresholdComboBox(threshold); - if (oldcs instanceof AnnotationColourGradient) + if (acg!=null) { - AnnotationColourGradient acg = (AnnotationColourGradient) oldcs; String label = getAnnotationMenuLabel(acg.getAnnotation()); + // TODO: workaround below shouldn't be necessary - there's a bug in getAnnotationMenuLabel! + if (acg.isSeqAssociated()) + { + label = acg.getAnnotation().label; + } annotations.setSelectedItem(label); switch (acg.getAboveThreshold()) { @@ -147,13 +173,6 @@ public class AnnotationColourChooser extends AnnotationRowFilter thresholdIsMin.setSelected(acg.isThresholdIsMinMax()); thresholdValue.setText(String.valueOf(acg.getAnnotationThreshold())); } - - jbInit(); - adjusting = false; - - updateView(); - frame.invalidate(); - frame.pack(); } @Override @@ -356,9 +375,11 @@ public class AnnotationColourChooser extends AnnotationRowFilter return; } + int selIndex = annotations + .getSelectedIndex(); + int annIndex = annmap[selIndex]; setCurrentAnnotation( - av.getAlignment().getAlignmentAnnotation()[annmap[annotations - .getSelectedIndex()]]); + av.getAlignment().getAlignmentAnnotation()[annIndex]); int selectedThresholdItem = getSelectedThresholdItem( getThreshold().getSelectedIndex()); @@ -447,4 +468,33 @@ public class AnnotationColourChooser extends AnnotationRowFilter super.sliderDragReleased(); ap.paintAlignment(true, true); } + + /** + * construct and display a colourchooser for a given annotation row + * + * @param av + * @param ap + * @param alignmentAnnotation + * @param perseq - when true, enable per-sequence if alignment annotation is per sequence + */ + public static void displayFor(AlignViewport av, AlignmentPanel ap, + AlignmentAnnotation alignmentAnnotation, boolean perSeq) + { + ColourSchemeI global = av.getGlobalColourScheme(); + AnnotationColourGradient newCS = new AnnotationColourGradient(alignmentAnnotation, global, alignmentAnnotation.threshold!=null ? AnnotationColourGradient.ABOVE_THRESHOLD:AnnotationColourGradient.NO_THRESHOLD); + if (alignmentAnnotation.sequenceRef!=null) + { + newCS.setSeqAssociated(perSeq); + } + for (int i=0;i(getAnnotationItems(false))); populateThresholdComboBox(threshold); AnnotationColumnChooser lastChooser = av @@ -134,6 +139,16 @@ public class AnnotationColumnChooser extends AnnotationRowFilter percentThreshold .setSelected(lastChooser.percentThreshold.isSelected()); } + if (selectedAnnotation!=null) + { + try { + setCurrentAnnotation(selectedAnnotation); + annotations.setSelectedItem(getAnnotationMenuLabel(selectedAnnotation)); + } catch (Exception x) + { + Console.error("Couldn't select annotation in column chooser",x); + } + } try { @@ -850,4 +865,10 @@ public class AnnotationColumnChooser extends AnnotationRowFilter gSearchPanel.searchBox.updateCache(); ngSearchPanel.searchBox.updateCache(); } + + public static void displayFor(AlignViewport av, AlignmentPanel ap, + AlignmentAnnotation alignmentAnnotation) + { + AnnotationColumnChooser colchooser = new AnnotationColumnChooser(av, ap, alignmentAnnotation); + } } diff --git a/src/jalview/gui/AnnotationLabels.java b/src/jalview/gui/AnnotationLabels.java index 487c18b..6b82a37 100755 --- a/src/jalview/gui/AnnotationLabels.java +++ b/src/jalview/gui/AnnotationLabels.java @@ -53,6 +53,8 @@ import jalview.analysis.AlignmentUtils; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; +import jalview.datamodel.ContactMatrixI; +import jalview.datamodel.GroupSet; import jalview.datamodel.HiddenColumns; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceGroup; @@ -62,7 +64,6 @@ import jalview.io.FormatAdapter; import jalview.util.Comparison; import jalview.util.MessageManager; import jalview.util.Platform; -import jalview.ws.datamodel.alphafold.PAEContactMatrix; /** * The panel that holds the labels for alignment annotations, providing @@ -416,34 +417,135 @@ public class AnnotationLabels extends JPanel consclipbrd.addActionListener(this); pop.add(consclipbrd); } - if (aa[selectedRow].graph == AlignmentAnnotation.CONTACT_MAP - && PAEContactMatrix.PAEMATRIX - .equals(aa[selectedRow].getCalcId())) + + addColourOrFilterByOptions(ap,aa[selectedRow],pop); + + if (aa[selectedRow].graph == AlignmentAnnotation.CONTACT_MAP) { - final PAEContactMatrix cm = (PAEContactMatrix) av - .getContactMatrix(aa[selectedRow]); - if (cm != null && cm.getNewick() != null - && cm.getNewick().length() > 0) + addContactMatrixOptions(ap,aa[selectedRow],pop); + // Set/adjust threshold for grouping ? + // colour alignment by this [type] + // select/hide columns by this row + + } + } + + pop.show(this, evt.getX(), evt.getY()); + } + + static void addColourOrFilterByOptions(final AlignmentPanel ap, + final AlignmentAnnotation alignmentAnnotation, final JPopupMenu pop) + { + JMenuItem item; + item = new JMenuItem(MessageManager.getString("label.colour_by_annotation")); + item.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + AnnotationColourChooser.displayFor(ap.av, ap,alignmentAnnotation,false); + }; + }); + pop.add(item); + if (alignmentAnnotation.sequenceRef!=null) + { + item = new JMenuItem(MessageManager.getString("label.colour_by_annotation")+" ("+MessageManager.getString("label.per_seq")+")"); + item.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) { - item = new JMenuItem("Show Tree for Matrix"); - item.addActionListener(new ActionListener() - { + AnnotationColourChooser.displayFor(ap.av, ap,alignmentAnnotation,true); + }; + }); + pop.add(item); + } + item = new JMenuItem(MessageManager.getString("action.select_by_annotation")); + item.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + AnnotationColumnChooser.displayFor(ap.av,ap,alignmentAnnotation); + }; + }); + pop.add(item); + } + static void addContactMatrixOptions(final AlignmentPanel ap, + final AlignmentAnnotation alignmentAnnotation, final JPopupMenu pop) + { + + final ContactMatrixI cm = ap.av.getContactMatrix(alignmentAnnotation); + JMenuItem item; + if (cm != null) + { + pop.addSeparator(); - @Override - public void actionPerformed(ActionEvent e) - { + if (cm.hasGroups()) + { + JCheckBoxMenuItem chitem = new JCheckBoxMenuItem(MessageManager.getString("action.show_groups_on_matrix")); + chitem.setToolTipText(MessageManager.getString("action.show_groups_on_matrix_tooltip")); + boolean showGroups = alignmentAnnotation.isShowGroupsForContactMatrix(); + final AlignmentAnnotation sel_row=alignmentAnnotation; + chitem.setState(showGroups); + chitem.addActionListener(new ActionListener() + { - ap.alignFrame.showContactMapTree(aa[selectedRow], cm); + @Override + public void actionPerformed(ActionEvent e) + { + sel_row.setShowGroupsForContactMatrix(chitem.getState()); + ap.getAnnotationPanel() + .paint(ap.getAnnotationPanel().getGraphics()); + } + }); + pop.add(chitem); + } + if (cm.hasTree()) + { + item = new JMenuItem(MessageManager.getString("action.show_tree_for_matrix")); + item.setToolTipText(MessageManager.getString("action.show_tree_for_matrix_tooltip")); + item.addActionListener(new ActionListener() + { - } - }); - pop.addSeparator(); - pop.add(item); - } + @Override + public void actionPerformed(ActionEvent e) + { + ap.alignFrame.showContactMapTree(alignmentAnnotation, cm); + + } + }); + pop.add(item); + } + else + { + item = new JMenuItem(MessageManager.getString("action.cluster_matrix")); + item.setToolTipText(MessageManager.getString("action.cluster_matrix_tooltip")); + item.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + new Thread(new Runnable() + { + @Override + public void run() + { + final long progBar; + ap.alignFrame.setProgressBar(MessageManager.formatMessage("action.clustering_matrix_for",cm.getAnnotDescr(),5f), progBar = System.currentTimeMillis()); + cm.setGroupSet(GroupSet.makeGroups(cm, 5f, true)); + ap.alignFrame.showContactMapTree(alignmentAnnotation, cm); + ap.alignFrame.setProgressBar(null, progBar); + } + }).start(); + } + }); + pop.add(item); } } - pop.show(this, evt.getX(), evt.getY()); } /** diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index f1a8af7..8e04048 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -72,6 +72,7 @@ import jalview.util.MessageManager; import jalview.util.Platform; import jalview.viewmodel.ViewportListenerI; import jalview.viewmodel.ViewportRanges; +import jalview.ws.datamodel.MappableContactMatrixI; import jalview.ws.datamodel.alphafold.PAEContactMatrix; /** @@ -656,7 +657,8 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, fr = Math.min(cXci.cStart, cXci.cEnd); to = Math.max(cXci.cStart, cXci.cEnd); - if (evt.isControlDown()) + // double click selects the whole group + if (evt.getClickCount() == 2) { ContactMatrixI matrix = av.getContactMatrix(clicked); @@ -666,23 +668,48 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, if (matrix.hasGroups()) { SequenceI rseq = clicked.sequenceRef; - BitSet grp = matrix.getGroupsFor(currentX); + BitSet grp = new BitSet(); + grp.or(matrix.getGroupsFor(currentX)); + // TODO: cXci needs to be mapped to real groups for (int c = fr; c <= to; c++) { BitSet additionalGrp = matrix.getGroupsFor(c); grp.or(additionalGrp); } + HiddenColumns hc = av.getAlignment().getHiddenColumns(); - for (int p = grp.nextSetBit(0); p >= 0; p = grp + ColumnSelection cs = av.getColumnSelection(); + + for (int p=grp.nextSetBit(0); p >= 0; p = grp .nextSetBit(p + 1)) { - int offp = (rseq != null) - ? rseq.findIndex(rseq.getStart() - 1 + p) - : p; - - if (!av.hasHiddenColumns() || hc.isVisible(offp)) + if (matrix instanceof MappableContactMatrixI) { - av.getColumnSelection().addElement(offp); + // find the end of this run of set bits + int nextp = grp.nextClearBit(p)-1; + int[] pos = ((MappableContactMatrixI)matrix).getMappedPositionsFor(rseq, p,nextp); + p=nextp; + + if (pos!=null) + { + for (int pos_p = pos[0];pos_p<=pos[1];pos_p++) + { + int col = rseq.findIndex(pos_p)-1; + if (col>=0 && (!av.hasHiddenColumns() || hc.isVisible(col))) + { + cs.addElement(col); + } + } + } + } else { + int offp = (rseq != null) + ? rseq.findIndex(rseq.getStart() - 1 + p) + : p; + + if (!av.hasHiddenColumns() || hc.isVisible(offp)) + { + cs.addElement(offp); + } } } } @@ -697,16 +724,18 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, { // select corresponding range in segment under mouse { - for (int c = fr; c <= to; c++) + int[] rng = forCurrentX.getMappedPositionsFor(fr, to); + if (rng != null) { - av.getColumnSelection().addElement(c); + av.getColumnSelection().addRangeOfElements(rng, true); } av.getColumnSelection().addElement(currentX); } // PAE SPECIFIC // and also select everything lower than the max range adjacent // (kind of works) - if (PAEContactMatrix.PAEMATRIX.equals(clicked.getCalcId())) + if (evt.isControlDown() + && PAEContactMatrix.PAEMATRIX.equals(clicked.getCalcId())) { int c = fr - 1; ContactRange cr = forCurrentX.getRangeFor(fr, to); @@ -724,12 +753,17 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, if (// cr.getMin() <= cval && cval <= thresh) { - av.getColumnSelection().addElement(c--); - } - else - { - break; + int[] cols = forCurrentX.getMappedPositionsFor(c, c); + if (cols != null) + { + av.getColumnSelection().addRangeOfElements(cols, true); + } + else + { + break; + } } + c--; } c = to; while (c < forCurrentX.getContactHeight()) @@ -738,12 +772,18 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, if (// cr.getMin() <= cval && cval <= thresh) { - av.getColumnSelection().addElement(c++); + int[] cols = forCurrentX.getMappedPositionsFor(c, c); + if (cols != null) + { + av.getColumnSelection().addRangeOfElements(cols, true); + } } else { break; } + c++; + } } } @@ -1052,32 +1092,51 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, int fr, to; fr = Math.min(lastXci.cStart, lastXci.cEnd); to = Math.max(lastXci.cStart, lastXci.cEnd); - jalview.bin.Console.trace("Marking " + fr + " to " + to); - for (int c = fr; c <= to; c++) + int[] mappedPos = forFromX.getMappedPositionsFor(fr, to); + if (mappedPos != null) { - if (cma.sequenceRef != null) + jalview.bin.Console.trace("Marking " + fr + " to " + to + + " mapping to sequence positions " + mappedPos[0] + " to " + + mappedPos[1]); + for (int pair = 0; pair < mappedPos.length; pair += 2) { - int col = cma.sequenceRef.findIndex(c); - av.getColumnSelection().addElement(col); - } - else - { - av.getColumnSelection().addElement(c); + for (int c = mappedPos[pair]; c <= mappedPos[pair + 1]; c++) + // { + // if (cma.sequenceRef != null) + // { + // int col = cma.sequenceRef.findIndex(cma.sequenceRef.getStart()+c); + // av.getColumnSelection().addElement(col); + // } + // else + { + av.getColumnSelection().addElement(c); + } } } + // and again for most recent corner of drag fr = Math.min(cXci.cStart, cXci.cEnd); to = Math.max(cXci.cStart, cXci.cEnd); - jalview.bin.Console.trace("Marking " + fr + " to " + to); - for (int c = fr; c <= to; c++) + mappedPos = forFromX.getMappedPositionsFor(fr, to); + if (mappedPos != null) { - if (cma.sequenceRef != null) - { - int col = cma.sequenceRef.findIndex(c); - av.getColumnSelection().addElement(col); - } - else + for (int pair = 0; pair < mappedPos.length; pair += 2) { - av.getColumnSelection().addElement(c); + jalview.bin.Console.trace("Marking " + fr + " to " + to + + " mapping to sequence positions " + mappedPos[pair] + + " to " + mappedPos[pair + 1]); + for (int c = mappedPos[pair]; c <= mappedPos[pair + 1]; c++) + { + // if (cma.sequenceRef != null) + // { + // int col = + // cma.sequenceRef.findIndex(cma.sequenceRef.getStart()+c); + // av.getColumnSelection().addElement(col); + // } + // else + { + av.getColumnSelection().addElement(c); + } + } } } fr = Math.min(lastX, currentX); @@ -1250,12 +1309,28 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, ContactRange cr = clist.getRangeFor(ci.cStart, ci.cEnd); tooltip = "Contact from " + clist.getPosition() + ", [" + ci.cStart + " - " + ci.cEnd + "]" + "
Mean:" + cr.getMean(); + int col = ann.sequenceRef.findPosition(column); + int[][] highlightPos; + int[] mappedPos = clist.getMappedPositionsFor(ci.cStart, ci.cEnd); + if (mappedPos != null) + { + highlightPos = new int[1 + mappedPos.length][2]; + highlightPos[0] = new int[] { col, col }; + for (int p = 0, h = 0; p < mappedPos.length; h++, p += 2) + { + highlightPos[h][0] = ann.sequenceRef + .findPosition(mappedPos[p] - 1); + highlightPos[h][1] = ann.sequenceRef + .findPosition(mappedPos[p + 1] - 1); + } + } + else + { + highlightPos = new int[][] { new int[] { col, col } }; + } ap.getStructureSelectionManager() - .highlightPositionsOn(ann.sequenceRef, new int[][] - { new int[] { col, col }, - new int[] - { ci.cStart, ci.cEnd } }, null); + .highlightPositionsOn(ann.sequenceRef, highlightPos, null); } } return tooltip; diff --git a/src/jalview/gui/OverviewCanvas.java b/src/jalview/gui/OverviewCanvas.java index 99dba3d..0827208 100644 --- a/src/jalview/gui/OverviewCanvas.java +++ b/src/jalview/gui/OverviewCanvas.java @@ -95,8 +95,9 @@ public class OverviewCanvas extends JPanel OVERVIEW_DEFAULT_GAP); Color hiddenCol = Cache.getDefaultColour(Preferences.HIDDEN_COLOUR, OVERVIEW_DEFAULT_HIDDEN); - Color residueCol = useLegacy ? OVERVIEW_DEFAULT_LEGACY_RESIDUE : OVERVIEW_DEFAULT_RESIDUE; - + Color residueCol = useLegacy ? OVERVIEW_DEFAULT_LEGACY_RESIDUE + : OVERVIEW_DEFAULT_RESIDUE; + cf = new OverviewResColourFinder(gapCol, residueCol, hiddenCol); setSize(od.getWidth(), od.getHeight()); diff --git a/src/jalview/gui/ScalePanel.java b/src/jalview/gui/ScalePanel.java index 930ba79..422601d 100755 --- a/src/jalview/gui/ScalePanel.java +++ b/src/jalview/gui/ScalePanel.java @@ -269,6 +269,7 @@ public class ScalePanel extends JPanel } av.setSelectionGroup(sg); ap.paintAlignment(false, false); + PaintRefresher.Refresh(this,av.getSequenceSetId()); av.sendSelection(); } @@ -367,6 +368,7 @@ public class ScalePanel extends JPanel stretchingGroup = true; cs.stretchGroup(res, sg, min, max); ap.paintAlignment(false, false); + PaintRefresher.Refresh(ap, av.getSequenceSetId()); } } diff --git a/src/jalview/gui/StructureChooser.java b/src/jalview/gui/StructureChooser.java index 8423ed9..6fce984 100644 --- a/src/jalview/gui/StructureChooser.java +++ b/src/jalview/gui/StructureChooser.java @@ -71,6 +71,7 @@ import jalview.gui.structurechooser.PDBStructureChooserQuerySource; import jalview.gui.structurechooser.StructureChooserQuerySource; import jalview.gui.structurechooser.ThreeDBStructureChooserQuerySource; import jalview.io.DataSourceType; +import jalview.io.FileFormatException; import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.jbgui.FilterOption; @@ -83,6 +84,8 @@ import jalview.util.Platform; import jalview.util.StringUtils; import jalview.ws.DBRefFetcher; import jalview.ws.DBRefFetcher.FetchFinishedListenerI; +import jalview.ws.datamodel.alphafold.PAEContactMatrix; +import jalview.ws.dbsources.EBIAlfaFold; import jalview.ws.seqfetcher.DbSourceProxy; import jalview.ws.sifts.SiftsSettings; @@ -704,7 +707,7 @@ public class StructureChooser extends GStructureChooser } /** - * Handles action event for btn_pdbFromFile + * Handles action event for btn_paeMatrixFile */ @Override protected void paeMatrixFile_actionPerformed() @@ -733,10 +736,26 @@ public class StructureChooser extends GStructureChooser "label.load_pae_matrix_file_associate_with_structure", pdbFile.getName())); + // TODO convert to Callable/Promise int value = chooser.showOpenDialog(null); if (value == JalviewFileChooser.APPROVE_OPTION) { - localPdbPaeMatrixFileName = chooser.getSelectedFile().getPath(); + String fileName = chooser.getSelectedFile().getPath(); + try + { + PAEContactMatrix.validateContactMatrixFile(fileName); + } catch (Exception thr) + { + JvOptionPane.showInternalMessageDialog(this, MessageManager + .formatMessage("label.couldnt_load_file", new Object[] + { fileName }) + "
" + thr.getLocalizedMessage(), + MessageManager.getString("label.error_loading_file"), + JvOptionPane.WARNING_MESSAGE); + Console.error("Couldn't import " + fileName + " as a PAE matrix", + thr); + return; + } + localPdbPaeMatrixFileName = fileName; Cache.setProperty("LAST_DIRECTORY", localPdbPaeMatrixFileName); } validateAssociationFromFile(); @@ -1058,11 +1077,13 @@ public class StructureChooser extends GStructureChooser { pdbFileString = MessageManager.getString("label.none"); pdbFileTooltip = MessageManager.getString("label.nothing_selected"); + setPdbOptionsEnabled(false); } } else { btn_pdbFromFile.setEnabled(false); + setPdbOptionsEnabled(false); // lbl_fromFileStatus.setIcon(errorImage); pdbFileString = MessageManager.getString("label.none"); pdbFileTooltip = MessageManager.getString("label.nothing_selected"); @@ -1187,7 +1208,14 @@ public class StructureChooser extends GStructureChooser final StructureSelectionManager ssm = ap.getStructureSelectionManager(); final int preferredHeight = pnl_filter.getHeight(); + btn_add.setEnabled(false); + btn_newView.setEnabled(false); + btn_cancel.setEnabled(false); + actionsPanel.setEnabled(false); + final String progress = MessageManager + .getString("label.working_ellipsis"); + setProgressBar(progress, progress.hashCode()); Runnable viewStruc = new Runnable() { @Override @@ -1278,7 +1306,9 @@ public class StructureChooser extends GStructureChooser .getCmb_assSeq().getSelectedItem(); SequenceI userSelectedSeq = assSeqOpt.getSequence(); if (userSelectedSeq != null) + { selectedSequence = userSelectedSeq; + } String pdbFilename = selectedPdbFileName; StructureChooser.openStructureFileForSequence(ssm, sc, ap, @@ -1290,6 +1320,7 @@ public class StructureChooser extends GStructureChooser @Override public void run() { + setProgressBar("Complete.", progress.hashCode()); closeAction(preferredHeight); mainFrame.dispose(); } diff --git a/src/jalview/gui/TreeCanvas.java b/src/jalview/gui/TreeCanvas.java index 29826f0..55ce44a 100755 --- a/src/jalview/gui/TreeCanvas.java +++ b/src/jalview/gui/TreeCanvas.java @@ -54,6 +54,7 @@ import jalview.analysis.Conservation; import jalview.analysis.TreeModel; import jalview.api.AlignViewportI; import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.Annotation; import jalview.datamodel.BinaryNode; import jalview.datamodel.ColumnSelection; import jalview.datamodel.ContactMatrixI; @@ -67,6 +68,7 @@ import jalview.schemes.ColourSchemeI; import jalview.structure.SelectionSource; import jalview.util.Format; import jalview.util.MessageManager; +import jalview.ws.datamodel.MappableContactMatrixI; /** * DOCUMENT ME! @@ -141,9 +143,43 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, scrollPane = scroller; addMouseListener(this); addMouseMotionListener(this); + ToolTipManager.sharedInstance().registerComponent(this); } + public void clearSelectedLeaves() + { + Vector leaves = tp.getTree() + .findLeaves(tp.getTree().getTopNode()); + if (tp.isColumnWise()) + { + markColumnsFor(getAssociatedPanels(), leaves, Color.white, true); + } + else + { + for (AlignmentPanel ap : getAssociatedPanels()) + { + SequenceGroup selected = ap.av.getSelectionGroup(); + if (selected != null) + { + { + for (int i = 0; i < leaves.size(); i++) + { + SequenceI seq = (SequenceI) leaves.elementAt(i).element(); + if (selected.contains(seq)) + { + selected.addOrRemove(seq, false); + } + } + selected.recalcConservation(); + } + } + ap.av.sendSelection(); + } + } + PaintRefresher.Refresh(tp, av.getSequenceSetId()); + repaint(); + } /** * DOCUMENT ME! * @@ -189,7 +225,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, { BinaryNode lf = leaves.elementAt(i); - if (lf instanceof SequenceNode && ((SequenceNode)lf).isPlaceholder()) + if (lf instanceof SequenceNode && ((SequenceNode) lf).isPlaceholder()) { has_placeholders = true; } @@ -285,9 +321,10 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, g.drawString(nodeLabel, xstart + 2, ypos - 2); } - String name = (markPlaceholders && ((node instanceof SequenceNode && ((SequenceNode)node).isPlaceholder()))) - ? (PLACEHOLDER + node.getName()) - : node.getName(); + String name = (markPlaceholders && ((node instanceof SequenceNode + && ((SequenceNode) node).isPlaceholder()))) + ? (PLACEHOLDER + node.getName()) + : node.getName(); int charWidth = fm.stringWidth(name) + 3; int charHeight = font.getSize(); @@ -354,8 +391,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, int ystart = (node.left() == null ? 0 : (int) (((BinaryNode) node.left()).ycount * chunk)) + offy; int yend = (node.right() == null ? 0 - : (int) (((BinaryNode) node.right()).ycount * chunk)) - + offy; + : (int) (((BinaryNode) node.right()).ycount * chunk)) + offy; Rectangle pos = new Rectangle(xend - 2, ypos - 2, 5, 5); nodeHash.put(node, pos); @@ -826,14 +862,17 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, else { Vector leaves = tree.findLeaves(highlightNode); - if (tp.isColumnWise()) { - markColumnsFor(getAssociatedPanels(), leaves, Color.red); - } else { - for (int i = 0; i < leaves.size(); i++) + if (tp.isColumnWise()) { - SequenceI seq = (SequenceI) leaves.elementAt(i).element(); - treeSelectionChanged(seq); + markColumnsFor(getAssociatedPanels(), leaves, Color.red,false); } + else + { + for (int i = 0; i < leaves.size(); i++) + { + SequenceI seq = (SequenceI) leaves.elementAt(i).element(); + treeSelectionChanged(seq); + } } av.sendSelection(); } @@ -998,7 +1037,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, { AlignmentPanel[] aps = getAssociatedPanels(); List colGroups = new ArrayList<>(); - Map colors=new HashMap(); + Map colors = new HashMap(); for (int i = 0; i < groups.size(); i++) { Color col = new Color((int) (Math.random() * 255), @@ -1006,10 +1045,13 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, setColor(groups.get(i), col.brighter()); Vector l = tree.findLeaves(groups.get(i)); - if (!tp.isColumnWise()) { + if (!tp.isColumnWise()) + { createSeqGroupFor(aps, l, col); - } else { - BitSet gp=createColumnGroupFor(l,col); + } + else + { + BitSet gp = createColumnGroupFor(l, col); colGroups.add(gp); colors.put(gp, col); @@ -1018,16 +1060,52 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, if (tp.isColumnWise()) { AlignmentAnnotation aa = tp.getAssocAnnotation(); - if (aa!=null) { + if (aa != null) + { ContactMatrixI cm = av.getContactMatrix(aa); - if (cm!=null) + if (cm != null) { cm.updateGroups(colGroups); - for (BitSet gp:colors.keySet()) + for (BitSet gp : colors.keySet()) { cm.setColorForGroup(gp, colors.get(gp)); } } + // stash colors in linked annotation row. + // doesn't work yet. TESTS! + int sstart = aa.sequenceRef != null ? aa.sequenceRef.getStart() - 1 + : 0; + Annotation ae; + Color gpcol = null; + int[] seqpos = null; + for (BitSet gp : colors.keySet()) + { + gpcol = colors.get(gp); + for (int p = gp.nextSetBit(0); p >= 0 + && p < Integer.MAX_VALUE; p = gp.nextSetBit(p + 1)) + { + if (cm instanceof MappableContactMatrixI) + { + MappableContactMatrixI mcm = (MappableContactMatrixI) cm; + seqpos = mcm.getMappedPositionsFor(aa.sequenceRef, p); + if (seqpos == null) + { + // no mapping for this column. + continue; + } + // TODO: handle ranges... + ae = aa.getAnnotationForPosition(seqpos[0]); + } + else + { + ae = aa.getAnnotationForPosition(p + sstart); + } + if (ae != null) + { + ae.colour = gpcol.brighter().darker(); + } + } + } } } @@ -1058,46 +1136,74 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, { return false; } - if (av==null||av.getAlignment()==null) + if (av == null || av.getAlignment() == null) { // alignment is closed return false; } ColumnSelection cs = av.getColumnSelection(); - HiddenColumns hc = av.getAlignment().getHiddenColumns(); - int offp = (rseq != null) ? rseq.findIndex(rseq.getStart() + colm) - : colm; + AlignmentAnnotation aa = tp.getAssocAnnotation(); + int offp=-1; + if (aa != null) + { + ContactMatrixI cm = av.getContactMatrix(aa); + // generally, we assume cm has 1:1 mapping to annotation row - probably wrong + // but.. if + if (cm instanceof MappableContactMatrixI) + { + int[] pos; + // use the mappable's mapping - always the case for PAE Matrices so good + // for 2.11.3 + MappableContactMatrixI mcm = (MappableContactMatrixI) cm; + pos = mcm.getMappedPositionsFor(rseq, colm + 1); + // finally, look up the position of the column + if (pos != null) + { + offp = rseq.findIndex(pos[0]); + } + } else { + offp = colm; + } + } + if (offp<=0) + { + return false; + } + offp-=2; if (!av.hasHiddenColumns()) { - return cs.contains(offp-1); + return cs.contains(offp); } - if (hc.isVisible(offp-1)) + if (hc.isVisible(offp)) { - return cs.contains(offp-1); -// return cs.contains(hc.absoluteToVisibleColumn(offp)); + return cs.contains(offp); + // return cs.contains(hc.absoluteToVisibleColumn(offp)); } return false; } - - private BitSet createColumnGroupFor(Vector l, - Color col) + private BitSet createColumnGroupFor(Vector l, Color col) { - BitSet gp=new BitSet(); - for (BinaryNode bn:l) + BitSet gp = new BitSet(); + for (BinaryNode bn : l) { - int colm=-1; - if (bn.element()!=null && bn.element()instanceof Integer) - { colm = (Integer)bn.element(); - } else { - // parse out from nodename - try { - colm = Integer.parseInt(bn.getName().substring(bn.getName().indexOf("c")+1)); - } catch (Exception e) + int colm = -1; + if (bn.element() != null && bn.element() instanceof Integer) { - continue; + colm = (Integer) bn.element(); } + else + { + // parse out from nodename + try + { + colm = Integer.parseInt( + bn.getName().substring(bn.getName().indexOf("c") + 1)); + } catch (Exception e) + { + continue; + } } gp.set(colm); } @@ -1105,40 +1211,66 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, } private void markColumnsFor(AlignmentPanel[] aps, Vector l, - Color col) + Color col, boolean clearSelected) { SequenceI rseq = tp.assocAnnotation.sequenceRef; - if (av==null||av.getAlignment()==null) + if (av == null || av.getAlignment() == null) { // alignment is closed return; } - for (BinaryNode bn:l) + // TODO - sort indices for faster lookup + ColumnSelection cs = av.getColumnSelection(); + HiddenColumns hc = av.getAlignment().getHiddenColumns(); + ContactMatrixI cm = av.getContactMatrix(tp.assocAnnotation); + MappableContactMatrixI mcm = null; + int offp; + if (cm instanceof MappableContactMatrixI) { - int colm=-1; - try { - colm = Integer.parseInt(bn.getName().substring(bn.getName().indexOf("c")+1)); + mcm = (MappableContactMatrixI) cm; + } + for (BinaryNode bn : l) + { + int colm = -1; + try + { + colm = Integer.parseInt( + bn.getName().substring(bn.getName().indexOf("c") + 1)); } catch (Exception e) { continue; } - ColumnSelection cs = av.getColumnSelection(); - HiddenColumns hc = av.getAlignment().getHiddenColumns(); + if (mcm!=null) { - int offp = (rseq!=null) ? rseq.findIndex(rseq.getStart()+colm) : colm; - - if (!av.hasHiddenColumns() || hc.isVisible(offp-1)) - { - if (cs.contains(offp-1)) - { - cs.removeElement(offp-1); - } else { - cs.addElement(offp-1); - } + int[] seqpos = mcm.getMappedPositionsFor( + tp.assocAnnotation.sequenceRef, colm); + if (seqpos == null) + { + // no mapping for this column. + continue; } + // TODO: handle ranges... + offp = seqpos[0]-1; + } + else + { + offp = (rseq != null) ? rseq.findIndex(rseq.getStart() + colm) + : colm; } - } + if (!av.hasHiddenColumns() || hc.isVisible(offp)) + { + if (clearSelected || cs.contains(offp)) + { + cs.removeElement(offp); + } + else + { + cs.addElement(offp); + } + } + } + PaintRefresher.Refresh(tp, av.getSequenceSetId()); } public void createSeqGroupFor(AlignmentPanel[] aps, Vector l, diff --git a/src/jalview/gui/TreePanel.java b/src/jalview/gui/TreePanel.java index 30e4305..4737235 100755 --- a/src/jalview/gui/TreePanel.java +++ b/src/jalview/gui/TreePanel.java @@ -24,6 +24,8 @@ import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; @@ -136,20 +138,24 @@ public class TreePanel extends GTreePanel AlignmentAnnotation aa, String title) { super(); - columnWise=true; + columnWise = true; assocAnnotation = aa; this.setFrameIcon(null); this.treeTitle = title; initTreePanel(alignPanel, null, null, fin, null); } - - boolean columnWise=false; - AlignmentAnnotation assocAnnotation=null; + + boolean columnWise = false; + + AlignmentAnnotation assocAnnotation = null; + public boolean isColumnWise() { return columnWise; } - public AlignmentAnnotation getAssocAnnotation() { + + public AlignmentAnnotation getAssocAnnotation() + { return assocAnnotation; } @@ -184,6 +190,22 @@ public class TreePanel extends GTreePanel treeCanvas = new TreeCanvas(this, ap, scrollPane); scrollPane.setViewportView(treeCanvas); + addKeyListener(new KeyAdapter() + { + @Override + public void keyPressed(KeyEvent e) + { + switch (e.getKeyCode()) + { + case 27: // escape + treeCanvas.clearSelectedLeaves(); + e.consume(); + break; + + } + + } + }); PaintRefresher.Register(this, ap.av.getSequenceSetId()); buildAssociatedViewMenu(); diff --git a/src/jalview/gui/WebserviceInfo.java b/src/jalview/gui/WebserviceInfo.java index 4aac062..7eeee9a 100644 --- a/src/jalview/gui/WebserviceInfo.java +++ b/src/jalview/gui/WebserviceInfo.java @@ -626,8 +626,8 @@ public class WebserviceInfo extends GWebserviceInfo true, false); ((JEditorPane) ((JScrollPane) jobPanes.get(which)).getViewport() .getComponent(0)) - .setText(ensureHtmlTagged( - txt + getHtmlFragment(text, false, true))); + .setText(ensureHtmlTagged( + txt + getHtmlFragment(text, false, true))); } else { diff --git a/src/jalview/io/BackupFiles.java b/src/jalview/io/BackupFiles.java index bec584f..c67c307 100644 --- a/src/jalview/io/BackupFiles.java +++ b/src/jalview/io/BackupFiles.java @@ -234,7 +234,8 @@ public class BackupFiles classInit(); if (file.getParentFile() == null) { - // filename probably in pwd represented with no parent -- fix it before it's a problem + // filename probably in pwd represented with no parent -- fix it before + // it's a problem file = file.getAbsoluteFile(); } this.file = file; diff --git a/src/jalview/io/FileParse.java b/src/jalview/io/FileParse.java index d3a6ba9..8d3283d 100755 --- a/src/jalview/io/FileParse.java +++ b/src/jalview/io/FileParse.java @@ -343,8 +343,8 @@ public class FileParse } String encoding = _conn.getContentEncoding(); String contentType = _conn.getContentType(); - boolean isgzipped = "application/x-gzip".equalsIgnoreCase(contentType) || contentType.endsWith("gzip") - || "gzip".equals(encoding); + boolean isgzipped = "application/x-gzip".equalsIgnoreCase(contentType) + || contentType.endsWith("gzip") || "gzip".equals(encoding); Exception e = null; InputStream inputStream = _conn.getInputStream(); if (isgzipped) diff --git a/src/jalview/io/PContactPredictionFile.java b/src/jalview/io/PContactPredictionFile.java index 3df9804..164d7cc 100644 --- a/src/jalview/io/PContactPredictionFile.java +++ b/src/jalview/io/PContactPredictionFile.java @@ -47,8 +47,8 @@ public class PContactPredictionFile extends AlignFile { protected static final String CONTACT_PREDICTION = "CONTACT_PREDICTION"; - public PContactPredictionFile(String inFile, DataSourceType fileSourceType) - throws IOException + public PContactPredictionFile(String inFile, + DataSourceType fileSourceType) throws IOException { super(inFile, fileSourceType); @@ -109,19 +109,23 @@ public class PContactPredictionFile extends AlignFile if (cm == null) { - cm = new ContactMatrix(true) { + cm = new ContactMatrix(true) + { @Override public String getType() { return CONTACT_PREDICTION; } + @Override public int getHeight() { // TODO Auto-generated method stub - // return maximum contact height + // return maximum contact height return 0; - }@Override + } + + @Override public int getWidth() { // TODO Auto-generated method stub @@ -140,15 +144,15 @@ public class PContactPredictionFile extends AlignFile } catch (Exception x) { error = true; - errormessage = "Couldn't process line: " - + x.getLocalizedMessage() + "\n" + line; + errormessage = "Couldn't process line: " + x.getLocalizedMessage() + + "\n" + line; return; } cm.addContact(left, right, (float) strength); } } // TODO COMPLETE - throw(new Error("Not Implemented yet.")); + throw (new Error("Not Implemented yet.")); } @Override diff --git a/src/jalview/io/StockholmFile.java b/src/jalview/io/StockholmFile.java index eeadcbf..28f062f 100644 --- a/src/jalview/io/StockholmFile.java +++ b/src/jalview/io/StockholmFile.java @@ -218,8 +218,9 @@ public class StockholmFile extends AlignFile r = new Regex("# STOCKHOLM ([\\d\\.]+)"); if (!r.search(nextLine())) { - throw new IOException(MessageManager - .getString("exception.stockholm_invalid_format") +" ("+r+")"); + throw new IOException( + MessageManager.getString("exception.stockholm_invalid_format") + + " (" + r + ")"); } else { @@ -1052,11 +1053,11 @@ public class StockholmFile extends AlignFile while (i < slen && (seq = s[i]) != null) { - if (seq.getDescription()!=null) + if (seq.getDescription() != null) { // out.append("#=GR "); - out.append(new Format("%-" + maxid + "s").form( - "#=GS " + printId(seq, jvSuffix) + " DE " + seq.getDescription())); + out.append(new Format("%-" + maxid + "s").form("#=GS " + + printId(seq, jvSuffix) + " DE " + seq.getDescription())); out.append(newline); } diff --git a/src/jalview/io/vamsas/Tree.java b/src/jalview/io/vamsas/Tree.java index c0d1774..f6d17d4 100644 --- a/src/jalview/io/vamsas/Tree.java +++ b/src/jalview/io/vamsas/Tree.java @@ -358,7 +358,7 @@ public class Tree extends DatastoreItem } if (jvseq instanceof SequenceI) { - leaf.setElement(jvseq); + leaf.setElement((SequenceI) jvseq); leaf.setPlaceholder(false); } else @@ -394,8 +394,7 @@ public class Tree extends DatastoreItem { if (!((jalview.datamodel.SequenceNode) tnode).isPlaceholder()) { - Object assocseq = ((BinaryNode) tnode) - .element(); + Object assocseq = ((BinaryNode) tnode).element(); if (assocseq instanceof SequenceI) { Vobject vobj = this.getjv2vObj(assocseq); diff --git a/src/jalview/jbgui/GStructureChooser.java b/src/jalview/jbgui/GStructureChooser.java index d317e97..8cb5b3c 100644 --- a/src/jalview/jbgui/GStructureChooser.java +++ b/src/jalview/jbgui/GStructureChooser.java @@ -106,6 +106,8 @@ public abstract class GStructureChooser extends JPanel */ protected static final String VIEWS_LOCAL_PDB = "VIEWS_LOCAL_PDB"; + protected JPanel actionsPanel; + protected JPanel statusPanel = new JPanel(); public JLabel statusBar = new JLabel(); @@ -121,6 +123,8 @@ public abstract class GStructureChooser extends JPanel protected StringBuilder errorWarning = new StringBuilder(); + protected JButton btn_cancel; + protected JButton btn_add; protected JButton btn_newView; @@ -414,8 +418,7 @@ public abstract class GStructureChooser extends JPanel } }); - JButton btn_cancel = new JButton( - MessageManager.getString("action.cancel")); + btn_cancel = new JButton(MessageManager.getString("action.cancel")); btn_cancel.setFont(VERDANA_12); btn_cancel.addActionListener(new ActionListener() { @@ -569,10 +572,8 @@ public abstract class GStructureChooser extends JPanel lbl_pdbFile.setFont(VERDANA_10); lbl_chooseTempFacType.setFont(VERDANA_12); - lbl_chooseTempFacType.setText(new StringBuilder() - .append(MessageManager.getString("label.choose_tempfac_type")) - .append(" ").append(MessageManager.getString("label.optional")) - .toString()); + lbl_chooseTempFacType.setText( + MessageManager.getString("label.interpret_tempfac_as")); combo_tempFacAs.setFont(VERDANA_12); for (TFType t : TFType.values()) @@ -590,10 +591,8 @@ public abstract class GStructureChooser extends JPanel }); btn_paeMatrixFile.setFont(VERDANA_12); - btn_paeMatrixFile.setText(new StringBuilder() - .append(MessageManager.getString("label.add_pae_matrix_file")) - .append(" ").append(MessageManager.getString("label.optional")) - .toString()); + btn_paeMatrixFile + .setText(MessageManager.getString("label.add_pae_matrix_file")); btn_paeMatrixFile.addActionListener(new ActionListener() { @Override @@ -685,7 +684,7 @@ public abstract class GStructureChooser extends JPanel targetView.setVisible(false); - JPanel actionsPanel = new JPanel(new MigLayout()); + actionsPanel = new JPanel(new MigLayout()); actionsPanel.add(targetView, "left"); actionsPanel.add(btn_add, "wrap"); actionsPanel.add(chk_superpose, "left"); @@ -727,15 +726,23 @@ public abstract class GStructureChooser extends JPanel gbc.insets = new Insets(0, 0, 18, 0); pnl_fileOptions.add(lbl_pdbFile, gbc); gbc.gridy++; + gbc.insets = new Insets(0, 0, 2, 0); + pnl_fileOptions.add(new JLabel( + MessageManager.getString("label.structure_import_options")), + gbc); + gbc.gridy++; + + gbc.insets = new Insets(0, 0, 6, 0); pnl_fileOptions.add(lbl_chooseTempFacType, gbc); gbc.gridy++; gbc.insets = new Insets(0, 0, 18, 0); pnl_fileOptions.add(combo_tempFacAs, gbc); gbc.gridy++; - gbc.insets = new Insets(0, 0, 2, 0); + gbc.insets = new Insets(0, 0, 6, 0); pnl_fileOptions.add(btn_paeMatrixFile, gbc); gbc.gridy++; + gbc.insets = new Insets(0, 0, 2, 0); gbc.weighty = 1.0; pnl_fileOptions.add(lbl_paeFile, gbc); @@ -1070,5 +1077,6 @@ public abstract class GStructureChooser extends JPanel lbl_chooseTempFacType.setEnabled(b); combo_tempFacAs.setEnabled(b); btn_paeMatrixFile.setEnabled(b); + lbl_paeFile.setEnabled(b); } } diff --git a/src/jalview/project/Jalview2XML.java b/src/jalview/project/Jalview2XML.java index ddf2afd..6f26036 100644 --- a/src/jalview/project/Jalview2XML.java +++ b/src/jalview/project/Jalview2XML.java @@ -96,6 +96,7 @@ import jalview.datamodel.ContactMatrixI; import jalview.datamodel.DBRefEntry; import jalview.datamodel.GeneLocus; import jalview.datamodel.GraphLine; +import jalview.datamodel.GroupSet; import jalview.datamodel.PDBEntry; import jalview.datamodel.Point; import jalview.datamodel.RnaViewerModel; @@ -152,6 +153,7 @@ import jalview.viewmodel.ViewportRanges; import jalview.viewmodel.seqfeatures.FeatureRendererModel; import jalview.viewmodel.seqfeatures.FeatureRendererSettings; import jalview.viewmodel.seqfeatures.FeaturesDisplayed; +import jalview.ws.datamodel.MappableContactMatrixI; import jalview.ws.datamodel.alphafold.PAEContactMatrix; import jalview.ws.jws2.Jws2Discoverer; import jalview.ws.jws2.dm.AAConSettings; @@ -194,6 +196,7 @@ import jalview.xml.binding.jalview.JalviewModel.Viewport.HiddenColumns; import jalview.xml.binding.jalview.JalviewModel.Viewport.Overview; import jalview.xml.binding.jalview.JalviewUserColours; import jalview.xml.binding.jalview.JalviewUserColours.Colour; +import jalview.xml.binding.jalview.MapListType; import jalview.xml.binding.jalview.MapListType.MapListFrom; import jalview.xml.binding.jalview.MapListType.MapListTo; import jalview.xml.binding.jalview.Mapping; @@ -1523,7 +1526,7 @@ public class Jalview2XML ov.getCanvas().getResidueColour().getRGB()); overview.setHiddenColour(ov.getCanvas().getHiddenColour().getRGB()); view.setOverview(overview); - } + } if (av.getGlobalColourScheme() instanceof jalview.schemes.UserColourScheme) { view.setBgColour(setUserColourScheme(av.getGlobalColourScheme(), @@ -2304,25 +2307,26 @@ public class Jalview2XML line.setColour(annotation.getThreshold().colour.getRGB()); an.setThresholdLine(line); } - if (annotation.graph==AlignmentAnnotation.CONTACT_MAP) + if (annotation.graph == AlignmentAnnotation.CONTACT_MAP) { - if (annotation.sequenceRef.getContactMaps()!=null) + if (annotation.sequenceRef.getContactMaps() != null) { - ContactMatrixI cm = annotation.sequenceRef.getContactMatrixFor(annotation); - if (cm!=null) + ContactMatrixI cm = annotation.sequenceRef + .getContactMatrixFor(annotation); + if (cm != null) { MatrixType xmlmat = new MatrixType(); xmlmat.setType(cm.getType()); xmlmat.setRows(BigInteger.valueOf(cm.getWidth())); xmlmat.setCols(BigInteger.valueOf(cm.getHeight())); - // consider using an opaque to/from -> allow instance to control its representation ? + // consider using an opaque to/from -> allow instance to control + // its representation ? xmlmat.setElements(ContactMatrix.contactToFloatString(cm)); if (cm.hasGroups()) { - for (BitSet gp: cm.getGroups()) + for (BitSet gp : cm.getGroups()) { - BigInteger val = new BigInteger(gp.toByteArray()); - xmlmat.getGroups().add(val.toString()); + xmlmat.getGroups().add(stringifyBitset(gp)); } } if (cm.hasTree()) @@ -2335,8 +2339,39 @@ public class Jalview2XML { xmlmat.setCutHeight(cm.getCutHeight()); } - // set/get properties + if (cm instanceof MappableContactMatrixI) + { + jalview.util.MapList mlst = ((MappableContactMatrixI) cm) + .getMapFor(annotation.sequenceRef); + if (mlst != null) + { + MapListType mp = new MapListType(); + List r = mlst.getFromRanges(); + for (int[] range : r) + { + MapListFrom mfrom = new MapListFrom(); + mfrom.setStart(range[0]); + mfrom.setEnd(range[1]); + // mp.addMapListFrom(mfrom); + mp.getMapListFrom().add(mfrom); + } + r = mlst.getToRanges(); + for (int[] range : r) + { + MapListTo mto = new MapListTo(); + mto.setStart(range[0]); + mto.setEnd(range[1]); + // mp.addMapListTo(mto); + mp.getMapListTo().add(mto); + } + mp.setMapFromUnit( + BigInteger.valueOf(mlst.getFromRatio())); + mp.setMapToUnit(BigInteger.valueOf(mlst.getToRatio())); + xmlmat.setMapping(mp); + } + } + // and add to model an.getContactmatrix().add(xmlmat); } } @@ -2444,6 +2479,43 @@ public class Jalview2XML } + private String stringifyBitset(BitSet gp) + { + StringBuilder sb = new StringBuilder(); + for (long val : gp.toLongArray()) + { + if (sb.length() > 0) + { + sb.append(","); + } + sb.append(val); + } + return sb.toString(); + } + + private BitSet deStringifyBitset(String stringified) + { + if ("".equals(stringified) || stringified == null) + { + return new BitSet(); + } + String[] longvals = stringified.split(","); + long[] newlongvals = new long[longvals.length]; + for (int lv = 0; lv < longvals.length; lv++) + { + try + { + newlongvals[lv] = Long.valueOf(longvals[lv]); + } catch (Exception x) + { + errorMessage += "Couldn't destringify bitset from: '" + stringified + + "'"; + newlongvals[lv] = 0; + } + } + return BitSet.valueOf(newlongvals); + + } private CalcIdParam createCalcIdParam(String calcId, AlignViewport av) { AutoCalcSetting settings = av.getCalcIdSettingsFor(calcId); @@ -3948,7 +4020,8 @@ public class Jalview2XML jaa.setCalcId(annotation.getCalcId()); if (annotation.getProperty().size() > 0) { - for (jalview.xml.binding.jalview.Property prop : annotation.getProperty()) + for (jalview.xml.binding.jalview.Property prop : annotation + .getProperty()) { jaa.setProperty(prop.getName(), prop.getValue()); } @@ -3972,33 +4045,57 @@ public class Jalview2XML .fromFloatStringToContacts(xmlmat.getElements(), xmlmat.getCols().intValue(), xmlmat.getRows().intValue()); + jalview.util.MapList mapping = null; + if (xmlmat.getMapping() != null) + { + MapListType m = xmlmat.getMapping(); + // Mapping m = dr.getMapping(); + int fr[] = new int[m.getMapListFrom().size() * 2]; + Iterator from = m.getMapListFrom() + .iterator();// enumerateMapListFrom(); + for (int _i = 0; from.hasNext(); _i += 2) + { + MapListFrom mf = from.next(); + fr[_i] = mf.getStart(); + fr[_i + 1] = mf.getEnd(); + } + int fto[] = new int[m.getMapListTo().size() * 2]; + Iterator to = m.getMapListTo().iterator();// enumerateMapListTo(); + for (int _i = 0; to.hasNext(); _i += 2) + { + MapListTo mf = to.next(); + fto[_i] = mf.getStart(); + fto[_i + 1] = mf.getEnd(); + } - PAEContactMatrix newpae = new PAEContactMatrix( - jaa.sequenceRef, elements); - List newgroups=new ArrayList(); - if (xmlmat.getGroups().size()>0) + mapping = new jalview.util.MapList(fr, fto, + m.getMapFromUnit().intValue(), + m.getMapToUnit().intValue()); + } + List newgroups = new ArrayList(); + if (xmlmat.getGroups().size() > 0) { - for (String sgroup:xmlmat.getGroups()) + for (String sgroup : xmlmat.getGroups()) { - try { - BigInteger group = new BigInteger(sgroup); - newgroups.add(BitSet.valueOf(group.toByteArray())); - } catch (NumberFormatException nfe) - { - Console.error("Problem parsing groups for a contact matrix (\""+sgroup+"\"",nfe); - } + newgroups.add(deStringifyBitset(sgroup)); } } - String nwk=xmlmat.getNewick().size()>0 ? xmlmat.getNewick().get(0):null; - if (xmlmat.getNewick().size()>1) + String nwk = xmlmat.getNewick().size() > 0 + ? xmlmat.getNewick().get(0) + : null; + if (xmlmat.getNewick().size() > 1) { Console.log.info( "Ignoring additional clusterings for contact matrix"); } - String treeMethod = xmlmat.getTreeMethod(); - double thresh = xmlmat.getCutHeight()!=null ? xmlmat.getCutHeight() : 0; - newpae.restoreGroups(newgroups, treeMethod, nwk, thresh); + double thresh = xmlmat.getCutHeight() != null + ? xmlmat.getCutHeight() + : 0; + GroupSet grpset = new GroupSet(); + grpset.restoreGroups(newgroups, treeMethod, nwk, thresh); + PAEContactMatrix newpae = new PAEContactMatrix( + jaa.sequenceRef, mapping, elements, grpset); jaa.sequenceRef.addContactListFor(jaa, newpae); } } @@ -4246,8 +4343,8 @@ public class Jalview2XML */ protected void loadOverview(Viewport view, String version, AlignFrame af) { - if (!isVersionStringLaterThan("2.11.3", - version) && view.getOverview()==null) + if (!isVersionStringLaterThan("2.11.3", version) + && view.getOverview() == null) { return; } @@ -4394,8 +4491,8 @@ public class Jalview2XML { if (tree.isColumnWise()) { - AlignmentAnnotation aa = (AlignmentAnnotation) annotationIds.get(tree - .getColumnReference()); + AlignmentAnnotation aa = (AlignmentAnnotation) annotationIds + .get(tree.getColumnReference()); if (aa == null) { Console.warn( @@ -4953,10 +5050,11 @@ public class Jalview2XML viewport.setIncrement(safeInt(view.getConsThreshold())); viewport.setShowJVSuffix(safeBoolean(view.isShowFullId())); viewport.setRightAlignIds(safeBoolean(view.isRightAlignIds())); - viewport.setFont(new Font(view.getFontName(), - safeInt(view.getFontStyle()), safeInt(view.getFontSize())), - (view.getCharWidth()!=null) ? false : true); - if (view.getCharWidth()!=null) + viewport.setFont( + new Font(view.getFontName(), safeInt(view.getFontStyle()), + safeInt(view.getFontSize())), + (view.getCharWidth() != null) ? false : true); + if (view.getCharWidth() != null) { viewport.setCharWidth(view.getCharWidth()); viewport.setCharHeight(view.getCharHeight()); @@ -5283,7 +5381,7 @@ public class Jalview2XML + annotationId); return null; } - // belt-and-braces create a threshold line if the + // belt-and-braces create a threshold line if the // colourscheme needs one but the matchedAnnotation doesn't have one if (safeInt(viewAnnColour.getAboveThreshold()) != 0 && matchedAnnotation.getThreshold() == null) diff --git a/src/jalview/renderer/AnnotationRendererFactory.java b/src/jalview/renderer/AnnotationRendererFactory.java index db2eb7a..85d22c9 100644 --- a/src/jalview/renderer/AnnotationRendererFactory.java +++ b/src/jalview/renderer/AnnotationRendererFactory.java @@ -7,8 +7,7 @@ import jalview.ws.datamodel.alphafold.PAEContactMatrix; import java.util.IdentityHashMap; -public class AnnotationRendererFactory implements - AnnotationRendererFactoryI +public class AnnotationRendererFactory implements AnnotationRendererFactoryI { private static AnnotationRendererFactoryI factory = null; @@ -40,8 +39,9 @@ public class AnnotationRendererFactory implements { return ContactMapRenderer.newPAERenderer(); } - // TODO add potential for configuring renderer directly from the annotation row and/or viewmodel - + // TODO add potential for configuring renderer directly from the + // annotation row and/or viewmodel + } return null; } diff --git a/src/jalview/renderer/ContactGeometry.java b/src/jalview/renderer/ContactGeometry.java index 4aef1d8..9fd4de6 100644 --- a/src/jalview/renderer/ContactGeometry.java +++ b/src/jalview/renderer/ContactGeometry.java @@ -2,10 +2,23 @@ package jalview.renderer; import java.util.Iterator; +import jalview.datamodel.ColumnSelection; import jalview.datamodel.ContactListI; - +import jalview.datamodel.HiddenColumns; +import jalview.renderer.ContactGeometry.contactInterval; + +/** + * encapsulate logic for mapping between positions in a ContactList and their + * rendered representation in a given number of pixels. + * + * @author jprocter + * + */ public class ContactGeometry { + + final ContactListI contacts; + final int pixels_step; final double contacts_per_pixel; @@ -14,8 +27,9 @@ public class ContactGeometry final int graphHeight; - public ContactGeometry(ContactListI contacts, int graphHeight) + public ContactGeometry(final ContactListI contacts, int graphHeight) { + this.contacts = contacts; this.graphHeight = graphHeight; contact_height = contacts.getContactHeight(); // fractional number of contacts covering each pixel @@ -54,6 +68,56 @@ public class ContactGeometry public final int pStart; public final int pEnd; + + } + + /** + * + * @param columnSelection + * @param ci + * @param visibleOnly + * - when true, only test intersection of visible columns given + * matrix range + * @return true if the range on the matrix specified by ci intersects with + * selected columns in the ContactListI's reference frame. + */ + + boolean intersects(contactInterval ci, ColumnSelection columnSelection, + HiddenColumns hiddenColumns, boolean visibleOnly) + { + boolean rowsel = false; + final int[] mappedRange = contacts.getMappedPositionsFor(ci.cStart, + ci.cEnd); + if (mappedRange == null) + { + return false; + } + for (int p = 0; p < mappedRange.length && !rowsel; p += 2) + { + boolean containsHidden = false; + if (visibleOnly && hiddenColumns != null + && hiddenColumns.hasHiddenColumns()) + { + // TODO: turn into function on hiddenColumns and create test !! + Iterator viscont = hiddenColumns.getVisContigsIterator( + mappedRange[p], mappedRange[p + 1], false); + containsHidden = !viscont.hasNext(); + if (!containsHidden) + { + for (int[] interval = viscont.next(); viscont + .hasNext(); rowsel |= columnSelection + .intersects(interval[p], interval[p + 1])) + ; + } + } + else + { + rowsel = columnSelection.intersects(mappedRange[p], + mappedRange[p + 1]); + } + } + return rowsel; + } /** diff --git a/src/jalview/renderer/ContactMapRenderer.java b/src/jalview/renderer/ContactMapRenderer.java index e54f471..8f38d02 100644 --- a/src/jalview/renderer/ContactMapRenderer.java +++ b/src/jalview/renderer/ContactMapRenderer.java @@ -25,6 +25,7 @@ public abstract class ContactMapRenderer implements AnnotationRowRendererI { /** * bean holding colours for shading + * * @author jprocter * */ @@ -66,6 +67,7 @@ public abstract class ContactMapRenderer implements AnnotationRowRendererI /** * build an EBI-AlphaFold style renderer of PAE matrices + * * @return */ public static ContactMapRenderer newPAERenderer() @@ -100,7 +102,7 @@ public abstract class ContactMapRenderer implements AnnotationRowRendererI HiddenColumns hiddenColumns, ColumnSelection columnSelection, AlignmentAnnotation _aa, Annotation[] aa_annotations, int sRes, int eRes, float min, float max, int y) - { + { if (sRes > aa_annotations.length) { return; @@ -112,7 +114,7 @@ public abstract class ContactMapRenderer implements AnnotationRowRendererI g.setColor(shade.no_data); g.drawLine(x, y2, (eRes - sRes) * charWidth, y2); - + boolean showGroups = _aa.isShowGroupsForContactMatrix(); int column; int aaMax = aa_annotations.length - 1; ContactMatrixI cm = viewport.getContactMatrix(_aa); @@ -146,13 +148,20 @@ public abstract class ContactMapRenderer implements AnnotationRowRendererI x++; continue; } - Color gpcol = (cm==null) ? Color.white: cm.getColourForGroup(cm.getGroupsFor(column)); + // ContactListI from viewport can map column -> group + Color gpcol = (cm == null) ? Color.white + : contacts.getColourForGroup(); // cm.getColourForGroup(cm.getGroupsFor(column)); // feature still in development - highlight or omit regions hidden in // the alignment - currently marks them as red rows boolean maskHiddenCols = false; - // TODO: pass visible column mask to the ContactGeometry object so it maps + // TODO: optionally pass visible column mask to the ContactGeometry object + // so it maps // only visible contacts to geometry // Bean holding mapping from contact list to pixels + // TODO: allow bracketing/limiting of range on contacts to render (like + // visible column mask but more flexible?) + + // COntactListI provides mapping for column -> cm-groupmapping final ContactGeometry cgeom = new ContactGeometry(contacts, _aa.graphHeight); @@ -169,29 +178,8 @@ public abstract class ContactMapRenderer implements AnnotationRowRendererI boolean rowsel = false, containsHidden = false; if (columnSelection != null) { - if (_aa.sequenceRef == null) - { - rowsel = columnSelection.intersects(ci.cStart, ci.cEnd); - } - else - { - // TODO check we have correctly mapped cstart to local sequence - // numbering - int s = _aa.sequenceRef.findIndex(ci.cStart); - int e = _aa.sequenceRef.findIndex(ci.cEnd); - if (maskHiddenCols && hasHiddenColumns) - { - // TODO: turn into function and create test !! - Iterator viscont = hiddenColumns - .getVisContigsIterator(s, e, false); - containsHidden = !viscont.hasNext(); - } - if (s > 0 && s < _aa.sequenceRef.getLength()) - { - rowsel = columnSelection.intersects(s, e); - } - - } + rowsel = cgeom.intersects(ci, columnSelection, hiddenColumns, + maskHiddenCols); } // TODO: show selected region if (colsel || rowsel) @@ -216,14 +204,16 @@ public abstract class ContactMapRenderer implements AnnotationRowRendererI { col = shade.hidden; } - if (gpcol!=null && gpcol!=Color.white) { + if (showGroups && gpcol != null && gpcol != Color.white) + { // todo - could overlay group as a transparent rectangle ? - col = new Color((int)(((float)(col.getRed()+gpcol.getRed()))/2f), - (int)(((float)(col.getGreen()+gpcol.getGreen()))/2f), - (int)(((float)(col.getBlue()+gpcol.getBlue()))/2f)); + col = new Color( + (int) (((float) (col.getRed() + gpcol.getRed())) / 2f), + (int) (((float) (col.getGreen() + gpcol.getGreen())) + / 2f), + (int) (((float) (col.getBlue() + gpcol.getBlue())) / 2f)); } g.setColor(col); - if (cgeom.pixels_step > 1) { g.fillRect(x * charWidth, ht, charWidth, 1 + cgeom.pixels_step); @@ -240,8 +230,8 @@ public abstract class ContactMapRenderer implements AnnotationRowRendererI Color shadeFor(float min, float max, float value) { - return jalview.util.ColorUtils.getGraduatedColour(value, 0, shade.minColor, - max, shade.maxColor); + return jalview.util.ColorUtils.getGraduatedColour(value, 0, + shade.minColor, max, shade.maxColor); } public Color getColorForRange(float min, float max, ContactListI cl, diff --git a/src/jalview/renderer/OverviewResColourFinder.java b/src/jalview/renderer/OverviewResColourFinder.java index ef4d04b..4cbb1ba 100644 --- a/src/jalview/renderer/OverviewResColourFinder.java +++ b/src/jalview/renderer/OverviewResColourFinder.java @@ -48,6 +48,7 @@ public class OverviewResColourFinder extends ResidueColourFinder /** * Constructor without colour settings (used by applet) + * * @deprecated */ @Deprecated diff --git a/src/jalview/renderer/api/AnnotationRowRendererI.java b/src/jalview/renderer/api/AnnotationRowRendererI.java index bedbad5..0907228 100644 --- a/src/jalview/renderer/api/AnnotationRowRendererI.java +++ b/src/jalview/renderer/api/AnnotationRowRendererI.java @@ -13,9 +13,8 @@ public interface AnnotationRowRendererI void renderRow(Graphics g, int charWidth, int charHeight, boolean hasHiddenColumns, AlignViewportI av, - HiddenColumns hiddenColumns, - ColumnSelection columnSelection, AlignmentAnnotation row, - Annotation[] row_annotations, int startRes, int endRes, - float graphMin, float graphMax, int y); + HiddenColumns hiddenColumns, ColumnSelection columnSelection, + AlignmentAnnotation row, Annotation[] row_annotations, + int startRes, int endRes, float graphMin, float graphMax, int y); } diff --git a/src/jalview/renderer/seqfeatures/FeatureRenderer.java b/src/jalview/renderer/seqfeatures/FeatureRenderer.java index e66b7d5..2d16fcd 100644 --- a/src/jalview/renderer/seqfeatures/FeatureRenderer.java +++ b/src/jalview/renderer/seqfeatures/FeatureRenderer.java @@ -543,7 +543,7 @@ public class FeatureRenderer extends FeatureRendererModel */ List overlaps = seq.findFeatures(column, column, type); - for (int i = overlaps.size() - 1 ; i >= 0 ; i--) + for (int i = overlaps.size() - 1; i >= 0; i--) { SequenceFeature sequenceFeature = overlaps.get(i); if (!featureGroupNotShown(sequenceFeature)) diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 563f0e7..64c1547 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -388,6 +388,9 @@ public class StructureSelectionManager * @param IProgressIndicator * reference to UI component that maintains a progress bar for the * mapping operation + * @param tft - specify how to interpret the temperature factor column in the atom data + * @param paeFilename - when not null, specifies a filename containing a matrix formatted in JSON using one of the known PAE formats + * @param doXferSettings - when true, transfer annotation to mapped sequences in sequenceArray * @return null or the structure data parsed as a pdb file */ synchronized public StructureFile computeMapping(boolean forStructureView, diff --git a/src/jalview/structures/models/AAStructureBindingModel.java b/src/jalview/structures/models/AAStructureBindingModel.java index 8436b48..7d9674e 100644 --- a/src/jalview/structures/models/AAStructureBindingModel.java +++ b/src/jalview/structures/models/AAStructureBindingModel.java @@ -973,7 +973,10 @@ public abstract class AAStructureBindingModel } List finalView = commandGenerator .centerViewOn(models); - executeCommands(finalView, false, "Centered on Superposition"); + if (finalView != null && finalView.size() > 0) + { + executeCommands(finalView, false, "Centered on Superposition"); + } } return error; } diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index 36b0851..a8c93cf 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -2956,7 +2956,6 @@ public abstract class AlignmentViewport return alignment.getContactMatrixFor(alignmentAnnotation); } - /** * get the consensus sequence as displayed under the PID consensus annotation * row. diff --git a/src/jalview/ws/datamodel/MappableContactMatrixI.java b/src/jalview/ws/datamodel/MappableContactMatrixI.java new file mode 100644 index 0000000..9762428 --- /dev/null +++ b/src/jalview/ws/datamodel/MappableContactMatrixI.java @@ -0,0 +1,76 @@ +package jalview.ws.datamodel; + +import jalview.datamodel.ContactListI; +import jalview.datamodel.ContactMatrixI; +import jalview.datamodel.Mapping; +import jalview.datamodel.SequenceI; +import jalview.util.MapList; + +public interface MappableContactMatrixI extends ContactMatrixI +{ + + boolean hasReferenceSeq(); + + SequenceI getReferenceSeq(); + + /** + * remaps the matrix to a new reference sequence + * + * @param dsq + * @param sqmpping + * - mapping from current reference to new reference - 1:1 only + * @return new ContactMatrixI instance with updated mapping + */ + MappableContactMatrixI liftOver(SequenceI dsq, Mapping sqmpping); + + /** + * like ContactMatrixI.getContactList(int column) but + * + * @param localFrame + * - sequence or other object that this contact matrix is associated + * with + * @param column + * - position in localFrame + * @return ContactListI that returns contacts w.r.t. localFrame + */ + + ContactListI getMappableContactList(SequenceI localFrame, int column); + + /** + * + * Similar to AlignedCodonFrame.getMappingBetween + * + * @param sequenceRef + * - a reference sequence mappable to this contactMatrix - may be + * null + * @return null or the MapList mapping to the coordinates of the reference + * sequence (or if hasReferenceSeq() is false, and sequenceRef is + * null, any mapping present) + * + */ + MapList getMapFor(SequenceI sequenceRef); + + /** + * Locate a position in the mapped sequence for a single column in the matrix. + * this to resolve positions corresponding to column clusters + * + * @param localFrame + * - sequence derivced from reference sequence + * @param column + * - matrix row/column + * @return sequence position(s) corresponding to column in contact matrix + */ + int[] getMappedPositionsFor(SequenceI localFrame, int column); + + /** + * Locate a position in the mapped sequence for a contiguous range of columns in the matrix + * use this to resolve positions corresponding to column clusters + * + * @param localFrame + * - sequence derivced from reference sequence + * @param column + * - matrix row/column + * @return sequence position(s) corresponding to column in contact matrix + */ + int[] getMappedPositionsFor(SequenceI localFrame, int from, int to); +} diff --git a/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java b/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java new file mode 100644 index 0000000..d545741 --- /dev/null +++ b/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java @@ -0,0 +1,452 @@ +package jalview.ws.datamodel.alphafold; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.BitSet; + +import jalview.datamodel.ContactListI; +import jalview.datamodel.ContactListImpl; +import jalview.datamodel.ContactListProviderI; +import jalview.datamodel.GroupSet; +import jalview.datamodel.GroupSetI; +import jalview.datamodel.Mapping; +import jalview.datamodel.SequenceI; +import jalview.util.MapList; +import jalview.ws.datamodel.MappableContactMatrixI; + +public abstract class MappableContactMatrix> + implements MappableContactMatrixI +{ + SequenceI refSeq = null; + + MapList toSeq = null; + + /** + * the length that refSeq is expected to be (excluding gaps, of course) + */ + int length; + + @Override + public boolean hasReferenceSeq() + { + return (refSeq != null); + } + + @Override + public SequenceI getReferenceSeq() + { + return refSeq; + } + + /** + * container for groups - defined on matrix columns + */ + GroupSet grps = new GroupSet(); + + @Override + public GroupSetI getGroupSet() + { + return grps; + }; + + @Override + public void setGroupSet(GroupSet makeGroups) + { + grps = makeGroups; + } + + @Override + public MapList getMapFor(SequenceI mapSeq) + { + if (refSeq != null) + { + while (mapSeq != refSeq && mapSeq.getDatasetSequence() != null) + { + mapSeq = mapSeq.getDatasetSequence(); + } + if (mapSeq != refSeq) + { + return null; + } + } + else + { + if (mapSeq != null) + { + // our MapList does not concern this seq + return null; + } + } + + return toSeq; + } + + /** + * set the reference sequence and construct the mapping between the start-end + * positions of given sequence and row/columns of contact matrix + * + * @param _refSeq + */ + public void setRefSeq(SequenceI _refSeq) + { + refSeq = _refSeq; + while (refSeq.getDatasetSequence() != null) + { + refSeq = refSeq.getDatasetSequence(); + } + length = _refSeq.getEnd() - _refSeq.getStart() + 1; + // if (length!=refSeq.getLength() || _refSeq.getStart()!=1) + { + toSeq = new MapList( + new int[] + { _refSeq.getStart(), _refSeq.getEnd() }, + new int[] + { 0, length - 1 }, 1, 1); + } + } + + public T liftOver(SequenceI newRefSeq, Mapping sp2sq) + { + if (sp2sq.getMappedWidth() != sp2sq.getWidth()) + { + // TODO: employ getWord/MappedWord to transfer annotation between cDNA and + // Protein reference frames + throw new Error( + "liftOver currently not implemented for transfer of annotation between different types of seqeunce"); + } + boolean mapIsTo = (sp2sq != null) ? (sp2sq.getTo() == refSeq) : false; + + /** + * map from matrix to toSeq's coordinate frame + */ + int[] refMap = toSeq.locateInFrom(0, length - 1); + ArrayList newFromMap = new ArrayList(); + int last = -1; + for (int i = 0; i < refMap.length; i += 2) + { + /* + * for each contiguous range in toSeq, locate corresponding range in sequence mapped to toSeq by sp2sq + */ + int[] sp2map = mapIsTo + ? sp2sq.getMap().locateInFrom(refMap[i], refMap[i + 1]) + : sp2sq.getMap().locateInTo(refMap[i], refMap[i + 1]); + if (sp2map == null) + { + continue; + } + + for (int spm = 0; spm < sp2map.length; spm += 2) + { + + if (last > -1) + { + if (sp2map[spm] != last + 1) + { + newFromMap.add(sp2map[spm]); + } + else + { + newFromMap.remove(newFromMap.size() - 1); + } + } + else + { + newFromMap.add(sp2map[spm]); + } + last = sp2map[spm + 1]; + newFromMap.add(last); + } + } + if ((newFromMap.size() % 2) != 0) + { + // should have had an even number of int ranges! + throw new Error("PAEMatrix liftover failed."); + } + int fromIntMap[] = new int[newFromMap.size()]; + int ipos = 0; + for (Integer i : newFromMap) + { + fromIntMap[ipos++] = i; + } + MapList newFromMapList = new MapList(fromIntMap, + new int[] + { 0, length - 1 }, 1, 1); + + T newCM = newMappableContactMatrix(newRefSeq, newFromMapList); + return newCM; + } + + protected abstract T newMappableContactMatrix(SequenceI newRefSeq, + MapList newFromMapList); + + @Override + public int[] getMappedPositionsFor(final SequenceI localFrame, + final int column) + { + return getMappedPositionsFor(localFrame, column, column); + } + + @Override + public int[] getMappedPositionsFor(final SequenceI localFrame, int from, + int to) + { + if (localFrame == null) + { + throw new Error("Unimplemented when no local sequence given."); + } + SequenceI lf = localFrame, uf = refSeq; + + // check that localFrame is derived from refSeq + // just look for dataset sequences and check they are the same. + // in future we could use DBRefMappings/whatever. + while (lf.getDatasetSequence() != null + || uf.getDatasetSequence() != null) + { + if (lf.getDatasetSequence() != null) + { + lf = lf.getDatasetSequence(); + } + if (uf.getDatasetSequence() != null) + { + uf = uf.getDatasetSequence(); + } + } + if (lf != uf) + { + // could try harder to find a mapping + throw new Error("This Matrix associated with '" + refSeq.getName() + + "' is not mappable for the given localFrame sequence. (" + + localFrame.getName() + ")"); + } + + // now look up from-to matrix columns in toSeq frame + + if (toSeq == null) + { + // no mapping - so we assume 1:1 + return new int[] { from, to }; + } + // from-to are matrix columns + // first locate on reference sequence + + int[] mappedPositions = toSeq.locateInFrom(from, to); + if (mappedPositions==null) + { + return null; + } + + // and now map to localFrame + // from-to columns on the associated sequence should be + // i. restricted to positions in localFrame + // ii. + +// int s = -1, e = -1; +// for (int p = 0; p < mappedPositions.length; p++) +// { +// if (s == -1 && mappedPositions[p] >= localFrame.getStart()) +// { +// s = p; // remember first position within local frame +// } +// if (e == -1 || mappedPositions[p] <= localFrame.getEnd()) +// { +// // update end pointer +// e = p; +// // compute local map +// mappedPositions[p] = localFrame.findIndex(mappedPositions[p]); +// } +// } +// int[] _trimmed = new int[e - s + 1]; +// return _trimmed; + return mappedPositions; + } + + @Override + public ContactListI getMappableContactList(final SequenceI localFrame, + final int column) + { + final int _column; + final int _lcolumn; + if (localFrame == null) + { + throw new Error("Unimplemented when no local sequence given."); + } + // return a ContactListI for column + // column is index into localFrame + // 1. map column to corresponding column in matrix + final MappableContactMatrix us = this; + _lcolumn = localFrame.findPosition(column); + + if (toSeq != null) + { + SequenceI lf = localFrame, uf = refSeq; + + // just look for dataset sequences and check they are the same. + // in future we could use DBRefMappings/whatever. + while (lf.getDatasetSequence() != null + || uf.getDatasetSequence() != null) + { + if (lf.getDatasetSequence() != null) + { + lf = lf.getDatasetSequence(); + } + if (uf.getDatasetSequence() != null) + { + uf = uf.getDatasetSequence(); + } + } + if (lf != uf) + { + // could try harder to find a mapping + throw new Error("This Matrix associated with '" + refSeq.getName() + + "' is not mappable for the given localFrame sequence. (" + + localFrame.getName() + ")"); + } + // check the mapping to see if localFrame _lcolumn exists + int[] word = toSeq.locateInTo(_lcolumn, _lcolumn); + if (word == null) + { + return null; + } + _column = word[0]; + } + else + { + // no mapping + _column = _lcolumn; + } + + // TODO - remove ? this may be a redundant check + if (_column < 0 || ((toSeq != null && _column > toSeq.getToHighest()) + || (toSeq == null && getHeight() <= _column))) + { + return null; + } + + // 2. resolve ranges in matrix corresponding to range in localFrame + final int[] matrixRange = toSeq == null + ? new int[] + { localFrame.getStart(), localFrame.getEnd() } + : toSeq.locateInTo(localFrame.getStart(), localFrame.getEnd()); + + int h = 0; + for (int p = 0; p < matrixRange.length; p += 2) + { + h += 1 + Math.abs(matrixRange[p + 1] - matrixRange[p]); + } + final int rangeHeight = h; + // 3. Construct ContactListImpl instance for just those segments. + + return new ContactListImpl(new ContactListProviderI() + { + + public int getColumn() + { + return column; + } + + @Override + public int getPosition() + { + return _column; + } + + @Override + public int getContactHeight() + { + return rangeHeight; + } + + @Override + public double getContactAt(int mcolumn) + { + if (mcolumn < 0 || mcolumn >= rangeHeight) + { + return -1; + } + return getElementAt(_column, locateInRange(mcolumn)); + + // this code maps from mcolumn to localFrame - but that isn't what's + // needed + // int loccolumn = localFrame.findPosition(mcolumn); + // int[] lcolumn=(toSeq==null) ? new int[] {mcolumn} : + // toSeq.locateInTo(loccolumn,loccolumn); + // if (lcolumn==null || lcolumn[0] < 0 || lcolumn[0] >= rangeHeight) + // { + // return -1; + // } + // return getElementAt(_column,lcolumn[0]); + } + + @Override + public int[] getMappedPositionsFor(int cStart, int cEnd) + { + if (!hasReferenceSeq()) + { + return ContactListProviderI.super.getMappedPositionsFor(cStart, + cEnd); + } + // map into segment of matrix being shown + int realCstart = locateInRange(cStart); + int realCend = locateInRange(cEnd); + + // TODO account for discontinuities in the mapping + + int[] mappedPositions = toSeq.locateInFrom(realCstart, realCend); + if (mappedPositions != null) + { + int s = -1, e = -1; + for (int p = 0; p < mappedPositions.length; p++) + { + if (s == -1 && mappedPositions[p] >= localFrame.getStart()) + { + s = p; // remember first position within local frame + } + if (e == -1 || mappedPositions[p] <= localFrame.getEnd()) + { + // update end pointer + e = p; + // compute local map + mappedPositions[p] = localFrame.findIndex(mappedPositions[p]); + } + } + } + return mappedPositions; + } + + /** + * @return the mcolumn'th position in the matrixRange window on the matrix + */ + private int locateInRange(int mcolumn) + { + + int h = 0, p = 0; + while (h < mcolumn && p + 2 < matrixRange.length) + { + h += 1 + Math.abs(matrixRange[p + 1] - matrixRange[p]); + p += 2; + } + return matrixRange[p] + mcolumn - h; + } + + @Override + public Color getColourForGroup() + { + BitSet gp = us.getGroupsFor(_column); + Color col = us.getColourForGroup(gp); + return col; + } + }); + } + + /** + * get a specific element of the contact matrix in its data-local coordinates + * rather than the mapped frame. Implementations are allowed to throw + * RunTimeExceptions if _column/i are out of bounds + * + * @param _column + * @param i + * @return + */ + protected abstract double getElementAt(int _column, int i); + +} diff --git a/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java b/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java index 1ec856b..c822ef4 100644 --- a/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java +++ b/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java @@ -1,53 +1,42 @@ package jalview.ws.datamodel.alphafold; -import java.awt.Color; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.HashMap; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Map; -import jalview.analysis.AverageDistanceEngine; -import jalview.bin.Console; -import jalview.datamodel.BinaryNode; +import org.json.simple.JSONObject; + import jalview.datamodel.ContactListI; import jalview.datamodel.ContactListImpl; import jalview.datamodel.ContactListProviderI; import jalview.datamodel.ContactMatrixI; +import jalview.datamodel.GroupSet; +import jalview.datamodel.SequenceDummy; import jalview.datamodel.SequenceI; +import jalview.io.FileFormatException; +import jalview.util.MapList; import jalview.util.MapUtils; +import jalview.ws.dbsources.EBIAlfaFold; -public class PAEContactMatrix implements ContactMatrixI +public class PAEContactMatrix extends + MappableContactMatrix implements ContactMatrixI { - SequenceI refSeq = null; - - /** - * the length that refSeq is expected to be (excluding gaps, of course) - */ - int length; int maxrow = 0, maxcol = 0; - int[] indices1, indices2; float[][] elements; float maxscore; - private void setRefSeq(SequenceI _refSeq) - { - refSeq = _refSeq; - while (refSeq.getDatasetSequence() != null) - { - refSeq = refSeq.getDatasetSequence(); - } - length = _refSeq.getEnd() - _refSeq.getStart() + 1; - } @SuppressWarnings("unchecked") public PAEContactMatrix(SequenceI _refSeq, Map pae_obj) + throws FileFormatException { setRefSeq(_refSeq); // convert the lists to primitive arrays and store @@ -94,6 +83,22 @@ public class PAEContactMatrix implements ContactMatrixI } /** + * new matrix with specific mapping to a reference sequence + * + * @param newRefSeq + * @param newFromMapList + * @param elements2 + * @param grps2 + */ + public PAEContactMatrix(SequenceI newRefSeq, MapList newFromMapList, + float[][] elements2, GroupSet grps2) + { + this(newRefSeq, elements2); + toSeq = newFromMapList; + grps = grps2; + } + + /** * parse a sane JSON representation of the pAE * * @param pae_obj @@ -101,9 +106,17 @@ public class PAEContactMatrix implements ContactMatrixI @SuppressWarnings("unchecked") private void parse_version_2_pAE(Map pae_obj) { - // this is never going to be reached by the integer rounding.. or is it ? - maxscore = ((Double) MapUtils.getFirst(pae_obj, - "max_predicted_aligned_error", "max_pae")).floatValue(); + maxscore = -1; + // look for a maxscore element - if there is one... + try + { + // this is never going to be reached by the integer rounding.. or is it ? + maxscore = ((Double) MapUtils.getFirst(pae_obj, + "max_predicted_aligned_error", "max_pae")).floatValue(); + } catch (Throwable t) + { + // ignore if a key is not found. + } List> scoreRows = ((List>) MapUtils .getFirst(pae_obj, "predicted_aligned_error", "pae")); elements = new float[scoreRows.size()][scoreRows.size()]; @@ -115,9 +128,18 @@ public class PAEContactMatrix implements ContactMatrixI { Object d = scores.next(); if (d instanceof Double) + { elements[row][col++] = ((Double) d).longValue(); + } else + { elements[row][col++] = (float) ((Long) d).longValue(); + } + + if (maxscore < elements[row][col - 1]) + { + maxscore = elements[row][col - 1]; + } } row++; col = 0; @@ -139,10 +161,26 @@ public class PAEContactMatrix implements ContactMatrixI // dataset refSeq Iterator rows = ((List) pae_obj.get("residue1")).iterator(); Iterator cols = ((List) pae_obj.get("residue2")).iterator(); + // two pass - to allocate the elements array + while (rows.hasNext()) + { + int row = rows.next().intValue(); + int col = cols.next().intValue(); + if (maxrow < row) + { + maxrow = row; + } + if (maxcol < col) + { + maxcol = col; + } + + } + rows = ((List) pae_obj.get("residue1")).iterator(); + cols = ((List) pae_obj.get("residue2")).iterator(); Iterator scores = ((List) pae_obj.get("distance")) .iterator(); - // assume square matrix - elements = new float[length][length]; + elements = new float[maxrow][maxcol]; while (scores.hasNext()) { float escore = scores.next().floatValue(); @@ -164,9 +202,9 @@ public class PAEContactMatrix implements ContactMatrixI } @Override - public ContactListI getContactList(final int _column) + public ContactListI getContactList(final int column) { - if (_column < 0 || _column >= elements.length) + if (column < 0 || column >= elements.length) { return null; } @@ -176,7 +214,7 @@ public class PAEContactMatrix implements ContactMatrixI @Override public int getPosition() { - return _column; + return column; } @Override @@ -186,39 +224,33 @@ public class PAEContactMatrix implements ContactMatrixI } @Override - public double getContactAt(int column) + public double getContactAt(int mcolumn) { - if (column < 0 || column >= elements[_column].length) + if (mcolumn < 0 || mcolumn >= elements[column].length) { return -1; } - return elements[_column][column]; + return elements[column][mcolumn]; } }); } @Override - public float getMin() + protected double getElementAt(int _column, int i) { - return 0; + return elements[_column][i]; } @Override - public float getMax() - { - return maxscore; - } - - @Override - public boolean hasReferenceSeq() + public float getMin() { - return (refSeq != null); + return 0; } @Override - public SequenceI getReferenceSeq() + public float getMax() { - return refSeq; + return maxscore; } @Override @@ -250,150 +282,49 @@ public class PAEContactMatrix implements ContactMatrixI @Override public int getWidth() { - return length; + return maxcol; } @Override public int getHeight() { - return length; - } - - List groups = null; - - @Override - public boolean hasGroups() - { - return groups != null; - } - - String newick = null; - - @Override - public String getNewick() - { - return newick; - } - - @Override - public boolean hasTree() - { - return newick != null && newick.length() > 0; + return maxrow; } - - boolean abs; - - double thresh; - - String treeType = null; - - public void makeGroups(float thresh, boolean abs) + public static void validateContactMatrixFile(String fileName) + throws FileFormatException, IOException { - AverageDistanceEngine clusterer = new AverageDistanceEngine(null, null, - this); - double height = clusterer.findHeight(clusterer.getTopNode()); - newick = new jalview.io.NewickFile(clusterer.getTopNode(), false, true) - .print(); - treeType = "UPGMA"; - Console.trace("Newick string\n" + newick); - - List nodegroups; - if (abs ? height > thresh : 0 < thresh && thresh < 1) + FileInputStream infile = null; + try { - float cut = abs ? (float) (thresh / height) : thresh; - Console.debug("Threshold " + cut + " for height=" + height); - - nodegroups = clusterer.groupNodes(cut); - } - else + infile = new FileInputStream(new File(fileName)); + } catch (Throwable t) { - nodegroups = new ArrayList(); - nodegroups.add(clusterer.getTopNode()); + new IOException("Couldn't open " + fileName, t); } - this.abs = abs; - this.thresh = thresh; - groups = new ArrayList<>(); - for (BinaryNode root : nodegroups) + JSONObject paeDict = null; + try { - BitSet gpset = new BitSet(); - for (BinaryNode leaf : clusterer.findLeaves(root)) - { - gpset.set((Integer) leaf.element()); - } - groups.add(gpset); - } - } - - @Override - public void updateGroups(List colGroups) - { - if (colGroups != null) + paeDict = EBIAlfaFold.parseJSONtoPAEContactMatrix(infile); + } catch (Throwable t) { - groups = colGroups; + new FileFormatException("Couldn't parse " + fileName + + " as a JSON dict or array containing a dict"); } - } - @Override - public BitSet getGroupsFor(int column) - { - for (BitSet gp : groups) + PAEContactMatrix matrix = new PAEContactMatrix( + new SequenceDummy("Predicted"), (Map) paeDict); + if (matrix.getWidth() <= 0) { - if (gp.get(column)) - { - return gp; - } - } - return ContactMatrixI.super.getGroupsFor(column); - } - - HashMap colorMap = new HashMap<>(); - - @Override - public Color getColourForGroup(BitSet bs) - { - if (bs == null) - { - return Color.white; - } - Color groupCol = colorMap.get(bs); - if (groupCol == null) - { - return Color.white; + throw new FileFormatException( + "No data in PAE matrix read from '" + fileName + "'"); } - return groupCol; - } - - @Override - public void setColorForGroup(BitSet bs, Color color) - { - colorMap.put(bs, color); } - - public void restoreGroups(List newgroups, String treeMethod, - String tree, double thresh2) - { - treeType = treeMethod; - groups = newgroups; - thresh = thresh2; - newick = tree; - - } - - @Override - public boolean hasCutHeight() - { - return groups != null && thresh != 0; - } - - @Override - public double getCutHeight() - { - return thresh; - } - @Override - public String getTreeMethod() + protected PAEContactMatrix newMappableContactMatrix(SequenceI newRefSeq, + MapList newFromMapList) { - return treeType; + PAEContactMatrix pae = new PAEContactMatrix(newRefSeq, newFromMapList, + elements, new GroupSet(grps)); + return pae; } } diff --git a/src/jalview/ws/dbsources/EBIAlfaFold.java b/src/jalview/ws/dbsources/EBIAlfaFold.java index a734f52..5ab05e0 100644 --- a/src/jalview/ws/dbsources/EBIAlfaFold.java +++ b/src/jalview/ws/dbsources/EBIAlfaFold.java @@ -44,6 +44,7 @@ import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.ContactMatrixI; import jalview.datamodel.DBRefEntry; +import jalview.datamodel.GroupSet; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; @@ -447,7 +448,6 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy } ContactMatrixI matrix = new PAEContactMatrix(sequence, (Map) paeDict); - ((PAEContactMatrix) matrix).makeGroups(5f, true); AlignmentAnnotation cmannot = sequence.addContactList(matrix); if (label != null) @@ -505,8 +505,7 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy SequenceI seq = sm.getSequence(); ContactMatrixI matrix = new PAEContactMatrix(seq, (Map) pae_obj); - ((PAEContactMatrix) matrix).makeGroups(5f, true); - AlignmentAnnotation cmannot = seq.addContactList(matrix); + AlignmentAnnotation cmannot = sm.getSequence().addContactList(matrix); /* this already happens in Sequence.addContactList() seq.addAlignmentAnnotation(cmannot); */ diff --git a/src/jalview/xml/binding/embl/EntrySetType.java b/src/jalview/xml/binding/embl/EntrySetType.java index 0479a34..0ec8f0b 100644 --- a/src/jalview/xml/binding/embl/EntrySetType.java +++ b/src/jalview/xml/binding/embl/EntrySetType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:45 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.embl; import java.util.ArrayList; @@ -15,11 +14,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for EntrySetType complex type. + *

+ * Java class for EntrySetType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="EntrySetType">
@@ -36,41 +37,42 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "EntrySetType", propOrder = {
-    "entry"
-})
-public class EntrySetType {
+@XmlType(name = "EntrySetType", propOrder = { "entry" })
+public class EntrySetType
+{
 
-    @XmlElement(required = true)
-    protected List entry;
+  @XmlElement(required = true)
+  protected List entry;
 
-    /**
-     * Gets the value of the entry property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the entry property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEntry().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EntryType } - * - * - */ - public List getEntry() { - if (entry == null) { - entry = new ArrayList(); - } - return this.entry; + /** + * Gets the value of the entry property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the entry property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEntry().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link EntryType } + * + * + */ + public List getEntry() + { + if (entry == null) + { + entry = new ArrayList(); } + return this.entry; + } } diff --git a/src/jalview/xml/binding/embl/EntryType.java b/src/jalview/xml/binding/embl/EntryType.java index 6336ef1..d90651c 100644 --- a/src/jalview/xml/binding/embl/EntryType.java +++ b/src/jalview/xml/binding/embl/EntryType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:45 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.embl; import java.math.BigInteger; @@ -20,11 +19,13 @@ import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.datatype.XMLGregorianCalendar; - /** - *

Java class for EntryType complex type. + *

+ * Java class for EntryType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="EntryType">
@@ -225,669 +226,1666 @@ import javax.xml.datatype.XMLGregorianCalendar;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "EntryType", propOrder = {
-    "secondaryAccession",
-    "projectAccession",
-    "description",
-    "comment",
-    "keyword",
-    "reference",
-    "xref",
-    "feature",
-    "assembly",
-    "contig",
-    "sequence"
-})
-public class EntryType {
-
-    protected List secondaryAccession;
-    protected List projectAccession;
+@XmlType(
+  name = "EntryType",
+  propOrder =
+  { "secondaryAccession", "projectAccession", "description", "comment",
+      "keyword", "reference", "xref", "feature", "assembly", "contig",
+      "sequence" })
+public class EntryType
+{
+
+  protected List secondaryAccession;
+
+  protected List projectAccession;
+
+  @XmlElement(required = true)
+  protected String description;
+
+  protected String comment;
+
+  protected List keyword;
+
+  protected List reference;
+
+  protected List xref;
+
+  protected List feature;
+
+  protected EntryType.Assembly assembly;
+
+  protected EntryType.Contig contig;
+
+  protected String sequence;
+
+  @XmlAttribute(name = "accession", required = true)
+  protected String accession;
+
+  @XmlAttribute(name = "version", required = true)
+  protected BigInteger version;
+
+  @XmlAttribute(name = "entryVersion")
+  protected BigInteger entryVersion;
+
+  @XmlAttribute(name = "dataClass", required = true)
+  protected String dataClass;
+
+  @XmlAttribute(name = "taxonomicDivision", required = true)
+  protected String taxonomicDivision;
+
+  @XmlAttribute(name = "moleculeType", required = true)
+  protected String moleculeType;
+
+  @XmlAttribute(name = "sequenceLength", required = true)
+  protected BigInteger sequenceLength;
+
+  @XmlAttribute(name = "topology", required = true)
+  protected String topology;
+
+  @XmlAttribute(name = "firstPublic")
+  @XmlSchemaType(name = "date")
+  protected XMLGregorianCalendar firstPublic;
+
+  @XmlAttribute(name = "firstPublicRelease")
+  protected BigInteger firstPublicRelease;
+
+  @XmlAttribute(name = "lastUpdated")
+  @XmlSchemaType(name = "date")
+  protected XMLGregorianCalendar lastUpdated;
+
+  @XmlAttribute(name = "lastUpdatedRelease")
+  protected BigInteger lastUpdatedRelease;
+
+  /**
+   * Gets the value of the secondaryAccession property.
+   * 
+   * 

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the secondaryAccession property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getSecondaryAccession().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getSecondaryAccession() + { + if (secondaryAccession == null) + { + secondaryAccession = new ArrayList(); + } + return this.secondaryAccession; + } + + /** + * Gets the value of the projectAccession property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the projectAccession property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getProjectAccession().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getProjectAccession() + { + if (projectAccession == null) + { + projectAccession = new ArrayList(); + } + return this.projectAccession; + } + + /** + * Gets the value of the description property. + * + * @return possible object is {@link String } + * + */ + public String getDescription() + { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDescription(String value) + { + this.description = value; + } + + /** + * Gets the value of the comment property. + * + * @return possible object is {@link String } + * + */ + public String getComment() + { + return comment; + } + + /** + * Sets the value of the comment property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setComment(String value) + { + this.comment = value; + } + + /** + * Gets the value of the keyword property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the keyword property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getKeyword().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getKeyword() + { + if (keyword == null) + { + keyword = new ArrayList(); + } + return this.keyword; + } + + /** + * Gets the value of the reference property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the reference property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getReference().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EntryType.Reference } + * + * + */ + public List getReference() + { + if (reference == null) + { + reference = new ArrayList(); + } + return this.reference; + } + + /** + * Gets the value of the xref property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the xref property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getXref().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link XrefType } + * + * + */ + public List getXref() + { + if (xref == null) + { + xref = new ArrayList(); + } + return this.xref; + } + + /** + * Gets the value of the feature property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the feature property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getFeature().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EntryType.Feature } + * + * + */ + public List getFeature() + { + if (feature == null) + { + feature = new ArrayList(); + } + return this.feature; + } + + /** + * Gets the value of the assembly property. + * + * @return possible object is {@link EntryType.Assembly } + * + */ + public EntryType.Assembly getAssembly() + { + return assembly; + } + + /** + * Sets the value of the assembly property. + * + * @param value + * allowed object is {@link EntryType.Assembly } + * + */ + public void setAssembly(EntryType.Assembly value) + { + this.assembly = value; + } + + /** + * Gets the value of the contig property. + * + * @return possible object is {@link EntryType.Contig } + * + */ + public EntryType.Contig getContig() + { + return contig; + } + + /** + * Sets the value of the contig property. + * + * @param value + * allowed object is {@link EntryType.Contig } + * + */ + public void setContig(EntryType.Contig value) + { + this.contig = value; + } + + /** + * Gets the value of the sequence property. + * + * @return possible object is {@link String } + * + */ + public String getSequence() + { + return sequence; + } + + /** + * Sets the value of the sequence property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setSequence(String value) + { + this.sequence = value; + } + + /** + * Gets the value of the accession property. + * + * @return possible object is {@link String } + * + */ + public String getAccession() + { + return accession; + } + + /** + * Sets the value of the accession property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setAccession(String value) + { + this.accession = value; + } + + /** + * Gets the value of the version property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getVersion() + { + return version; + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setVersion(BigInteger value) + { + this.version = value; + } + + /** + * Gets the value of the entryVersion property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getEntryVersion() + { + return entryVersion; + } + + /** + * Sets the value of the entryVersion property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setEntryVersion(BigInteger value) + { + this.entryVersion = value; + } + + /** + * Gets the value of the dataClass property. + * + * @return possible object is {@link String } + * + */ + public String getDataClass() + { + return dataClass; + } + + /** + * Sets the value of the dataClass property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDataClass(String value) + { + this.dataClass = value; + } + + /** + * Gets the value of the taxonomicDivision property. + * + * @return possible object is {@link String } + * + */ + public String getTaxonomicDivision() + { + return taxonomicDivision; + } + + /** + * Sets the value of the taxonomicDivision property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTaxonomicDivision(String value) + { + this.taxonomicDivision = value; + } + + /** + * Gets the value of the moleculeType property. + * + * @return possible object is {@link String } + * + */ + public String getMoleculeType() + { + return moleculeType; + } + + /** + * Sets the value of the moleculeType property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setMoleculeType(String value) + { + this.moleculeType = value; + } + + /** + * Gets the value of the sequenceLength property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getSequenceLength() + { + return sequenceLength; + } + + /** + * Sets the value of the sequenceLength property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setSequenceLength(BigInteger value) + { + this.sequenceLength = value; + } + + /** + * Gets the value of the topology property. + * + * @return possible object is {@link String } + * + */ + public String getTopology() + { + return topology; + } + + /** + * Sets the value of the topology property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTopology(String value) + { + this.topology = value; + } + + /** + * Gets the value of the firstPublic property. + * + * @return possible object is {@link XMLGregorianCalendar } + * + */ + public XMLGregorianCalendar getFirstPublic() + { + return firstPublic; + } + + /** + * Sets the value of the firstPublic property. + * + * @param value + * allowed object is {@link XMLGregorianCalendar } + * + */ + public void setFirstPublic(XMLGregorianCalendar value) + { + this.firstPublic = value; + } + + /** + * Gets the value of the firstPublicRelease property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getFirstPublicRelease() + { + return firstPublicRelease; + } + + /** + * Sets the value of the firstPublicRelease property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setFirstPublicRelease(BigInteger value) + { + this.firstPublicRelease = value; + } + + /** + * Gets the value of the lastUpdated property. + * + * @return possible object is {@link XMLGregorianCalendar } + * + */ + public XMLGregorianCalendar getLastUpdated() + { + return lastUpdated; + } + + /** + * Sets the value of the lastUpdated property. + * + * @param value + * allowed object is {@link XMLGregorianCalendar } + * + */ + public void setLastUpdated(XMLGregorianCalendar value) + { + this.lastUpdated = value; + } + + /** + * Gets the value of the lastUpdatedRelease property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getLastUpdatedRelease() + { + return lastUpdatedRelease; + } + + /** + * Sets the value of the lastUpdatedRelease property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setLastUpdatedRelease(BigInteger value) + { + this.lastUpdatedRelease = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="range" maxOccurs="unbounded">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                 <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                 <attribute name="primaryBegin" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                 <attribute name="primaryEnd" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                 <attribute name="accession" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                 <attribute name="complement" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "range" }) + public static class Assembly + { + @XmlElement(required = true) - protected String description; - protected String comment; - protected List keyword; - protected List reference; - protected List xref; - protected List feature; - protected EntryType.Assembly assembly; - protected EntryType.Contig contig; - protected String sequence; - @XmlAttribute(name = "accession", required = true) - protected String accession; - @XmlAttribute(name = "version", required = true) - protected BigInteger version; - @XmlAttribute(name = "entryVersion") - protected BigInteger entryVersion; - @XmlAttribute(name = "dataClass", required = true) - protected String dataClass; - @XmlAttribute(name = "taxonomicDivision", required = true) - protected String taxonomicDivision; - @XmlAttribute(name = "moleculeType", required = true) - protected String moleculeType; - @XmlAttribute(name = "sequenceLength", required = true) - protected BigInteger sequenceLength; - @XmlAttribute(name = "topology", required = true) - protected String topology; - @XmlAttribute(name = "firstPublic") - @XmlSchemaType(name = "date") - protected XMLGregorianCalendar firstPublic; - @XmlAttribute(name = "firstPublicRelease") - protected BigInteger firstPublicRelease; - @XmlAttribute(name = "lastUpdated") - @XmlSchemaType(name = "date") - protected XMLGregorianCalendar lastUpdated; - @XmlAttribute(name = "lastUpdatedRelease") - protected BigInteger lastUpdatedRelease; + protected List range; /** - * Gets the value of the secondaryAccession property. + * Gets the value of the range property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the secondaryAccession property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the range property. * *

* For example, to add a new item, do as follows: + * *

-     *    getSecondaryAccession().add(newItem);
+     * getRange().add(newItem);
      * 
* * *

* Objects of the following type(s) are allowed in the list - * {@link String } + * {@link EntryType.Assembly.Range } * * */ - public List getSecondaryAccession() { - if (secondaryAccession == null) { - secondaryAccession = new ArrayList(); - } - return this.secondaryAccession; + public List getRange() + { + if (range == null) + { + range = new ArrayList(); + } + return this.range; } /** - * Gets the value of the projectAccession property. - * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the projectAccession property. + * Java class for anonymous complex type. * *

- * For example, to add a new item, do as follows: + * The following schema fragment specifies the expected content contained + * within this class. + * *

-     *    getProjectAccession().add(newItem);
+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="primaryBegin" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="primaryEnd" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="accession" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="complement" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
      * 
* * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * */ - public List getProjectAccession() { - if (projectAccession == null) { - projectAccession = new ArrayList(); + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Range + { + + @XmlAttribute(name = "begin", required = true) + protected BigInteger begin; + + @XmlAttribute(name = "end", required = true) + protected BigInteger end; + + @XmlAttribute(name = "primaryBegin") + protected BigInteger primaryBegin; + + @XmlAttribute(name = "primaryEnd") + protected BigInteger primaryEnd; + + @XmlAttribute(name = "accession", required = true) + protected String accession; + + @XmlAttribute(name = "version", required = true) + protected BigInteger version; + + @XmlAttribute(name = "complement") + protected Boolean complement; + + /** + * Gets the value of the begin property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getBegin() + { + return begin; + } + + /** + * Sets the value of the begin property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setBegin(BigInteger value) + { + this.begin = value; + } + + /** + * Gets the value of the end property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getEnd() + { + return end; + } + + /** + * Sets the value of the end property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setEnd(BigInteger value) + { + this.end = value; + } + + /** + * Gets the value of the primaryBegin property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getPrimaryBegin() + { + return primaryBegin; + } + + /** + * Sets the value of the primaryBegin property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setPrimaryBegin(BigInteger value) + { + this.primaryBegin = value; + } + + /** + * Gets the value of the primaryEnd property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getPrimaryEnd() + { + return primaryEnd; + } + + /** + * Sets the value of the primaryEnd property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setPrimaryEnd(BigInteger value) + { + this.primaryEnd = value; + } + + /** + * Gets the value of the accession property. + * + * @return possible object is {@link String } + * + */ + public String getAccession() + { + return accession; + } + + /** + * Sets the value of the accession property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setAccession(String value) + { + this.accession = value; + } + + /** + * Gets the value of the version property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getVersion() + { + return version; + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setVersion(BigInteger value) + { + this.version = value; + } + + /** + * Gets the value of the complement property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isComplement() + { + if (complement == null) + { + return false; } - return this.projectAccession; - } - - /** - * Gets the value of the description property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDescription() { - return description; - } - - /** - * Sets the value of the description property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDescription(String value) { - this.description = value; - } + else + { + return complement; + } + } + + /** + * Sets the value of the complement property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setComplement(Boolean value) + { + this.complement = value; + } - /** - * Gets the value of the comment property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getComment() { - return comment; } - /** - * Sets the value of the comment property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setComment(String value) { - this.comment = value; - } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <choice maxOccurs="unbounded" minOccurs="0">
+   *           <element name="range">
+   *             <complexType>
+   *               <complexContent>
+   *                 <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                   <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                   <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                   <attribute name="primaryBegin" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                   <attribute name="primaryEnd" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                   <attribute name="accession" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                   <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                   <attribute name="complement" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *                 </restriction>
+   *               </complexContent>
+   *             </complexType>
+   *           </element>
+   *           <element name="gap">
+   *             <complexType>
+   *               <complexContent>
+   *                 <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                   <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                   <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                   <attribute name="length" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *                   <attribute name="unknownLength" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *                 </restriction>
+   *               </complexContent>
+   *             </complexType>
+   *           </element>
+   *         </choice>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "rangeOrGap" }) + public static class Contig + { + + @XmlElements({ + @XmlElement(name = "range", type = EntryType.Contig.Range.class), + @XmlElement(name = "gap", type = EntryType.Contig.Gap.class) }) + protected List rangeOrGap; /** - * Gets the value of the keyword property. + * Gets the value of the rangeOrGap property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the keyword property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the rangeOrGap property. * *

* For example, to add a new item, do as follows: - *

-     *    getKeyword().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getKeyword() { - if (keyword == null) { - keyword = new ArrayList(); - } - return this.keyword; - } - - /** - * Gets the value of the reference property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the reference property. * - *

- * For example, to add a new item, do as follows: *

-     *    getReference().add(newItem);
+     * getRangeOrGap().add(newItem);
      * 
* * *

* Objects of the following type(s) are allowed in the list - * {@link EntryType.Reference } + * {@link EntryType.Contig.Range } {@link EntryType.Contig.Gap } * * */ - public List getReference() { - if (reference == null) { - reference = new ArrayList(); - } - return this.reference; + public List getRangeOrGap() + { + if (rangeOrGap == null) + { + rangeOrGap = new ArrayList(); + } + return this.rangeOrGap; } /** - * Gets the value of the xref property. - * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the xref property. + * Java class for anonymous complex type. * *

- * For example, to add a new item, do as follows: + * The following schema fragment specifies the expected content contained + * within this class. + * *

-     *    getXref().add(newItem);
+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="length" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="unknownLength" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
      * 
* * - *

- * Objects of the following type(s) are allowed in the list - * {@link XrefType } - * - * */ - public List getXref() { - if (xref == null) { - xref = new ArrayList(); + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Gap + { + + @XmlAttribute(name = "begin", required = true) + protected BigInteger begin; + + @XmlAttribute(name = "end", required = true) + protected BigInteger end; + + @XmlAttribute(name = "length", required = true) + protected BigInteger length; + + @XmlAttribute(name = "unknownLength") + protected Boolean unknownLength; + + /** + * Gets the value of the begin property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getBegin() + { + return begin; + } + + /** + * Sets the value of the begin property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setBegin(BigInteger value) + { + this.begin = value; + } + + /** + * Gets the value of the end property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getEnd() + { + return end; + } + + /** + * Sets the value of the end property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setEnd(BigInteger value) + { + this.end = value; + } + + /** + * Gets the value of the length property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getLength() + { + return length; + } + + /** + * Sets the value of the length property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setLength(BigInteger value) + { + this.length = value; + } + + /** + * Gets the value of the unknownLength property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isUnknownLength() + { + if (unknownLength == null) + { + return false; + } + else + { + return unknownLength; } - return this.xref; + } + + /** + * Sets the value of the unknownLength property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setUnknownLength(Boolean value) + { + this.unknownLength = value; + } + } /** - * Gets the value of the feature property. - * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the feature property. + * Java class for anonymous complex type. * *

- * For example, to add a new item, do as follows: + * The following schema fragment specifies the expected content contained + * within this class. + * *

-     *    getFeature().add(newItem);
+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="primaryBegin" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="primaryEnd" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="accession" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+     *       <attribute name="complement" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
      * 
* * - *

- * Objects of the following type(s) are allowed in the list - * {@link EntryType.Feature } - * - * */ - public List getFeature() { - if (feature == null) { - feature = new ArrayList(); + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Range + { + + @XmlAttribute(name = "begin", required = true) + protected BigInteger begin; + + @XmlAttribute(name = "end", required = true) + protected BigInteger end; + + @XmlAttribute(name = "primaryBegin") + protected BigInteger primaryBegin; + + @XmlAttribute(name = "primaryEnd") + protected BigInteger primaryEnd; + + @XmlAttribute(name = "accession", required = true) + protected String accession; + + @XmlAttribute(name = "version", required = true) + protected BigInteger version; + + @XmlAttribute(name = "complement") + protected Boolean complement; + + /** + * Gets the value of the begin property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getBegin() + { + return begin; + } + + /** + * Sets the value of the begin property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setBegin(BigInteger value) + { + this.begin = value; + } + + /** + * Gets the value of the end property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getEnd() + { + return end; + } + + /** + * Sets the value of the end property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setEnd(BigInteger value) + { + this.end = value; + } + + /** + * Gets the value of the primaryBegin property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getPrimaryBegin() + { + return primaryBegin; + } + + /** + * Sets the value of the primaryBegin property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setPrimaryBegin(BigInteger value) + { + this.primaryBegin = value; + } + + /** + * Gets the value of the primaryEnd property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getPrimaryEnd() + { + return primaryEnd; + } + + /** + * Sets the value of the primaryEnd property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setPrimaryEnd(BigInteger value) + { + this.primaryEnd = value; + } + + /** + * Gets the value of the accession property. + * + * @return possible object is {@link String } + * + */ + public String getAccession() + { + return accession; + } + + /** + * Sets the value of the accession property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setAccession(String value) + { + this.accession = value; + } + + /** + * Gets the value of the version property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getVersion() + { + return version; + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setVersion(BigInteger value) + { + this.version = value; + } + + /** + * Gets the value of the complement property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isComplement() + { + if (complement == null) + { + return false; } - return this.feature; - } + else + { + return complement; + } + } + + /** + * Sets the value of the complement property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setComplement(Boolean value) + { + this.complement = value; + } - /** - * Gets the value of the assembly property. - * - * @return - * possible object is - * {@link EntryType.Assembly } - * - */ - public EntryType.Assembly getAssembly() { - return assembly; } - /** - * Sets the value of the assembly property. - * - * @param value - * allowed object is - * {@link EntryType.Assembly } - * - */ - public void setAssembly(EntryType.Assembly value) { - this.assembly = value; - } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="taxon" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <sequence>
+   *                   <element name="lineage" minOccurs="0">
+   *                     <complexType>
+   *                       <complexContent>
+   *                         <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                           <sequence>
+   *                             <element name="taxon" maxOccurs="unbounded">
+   *                               <complexType>
+   *                                 <complexContent>
+   *                                   <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                                     <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                                   </restriction>
+   *                                 </complexContent>
+   *                               </complexType>
+   *                             </element>
+   *                           </sequence>
+   *                         </restriction>
+   *                       </complexContent>
+   *                     </complexType>
+   *                   </element>
+   *                 </sequence>
+   *                 <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 <attribute name="commonName" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 <attribute name="taxId" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *         <element name="xref" type="{}XrefType" maxOccurs="unbounded" minOccurs="0"/>
+   *         <element name="qualifier" maxOccurs="unbounded" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <sequence>
+   *                   <element name="value" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *                 </sequence>
+   *                 <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *       </sequence>
+   *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="location" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "taxon", "xref", "qualifier" }) + public static class Feature + { + + protected EntryType.Feature.FeatureTaxon taxon; - /** - * Gets the value of the contig property. - * - * @return - * possible object is - * {@link EntryType.Contig } - * - */ - public EntryType.Contig getContig() { - return contig; - } + protected List xref; - /** - * Sets the value of the contig property. - * - * @param value - * allowed object is - * {@link EntryType.Contig } - * - */ - public void setContig(EntryType.Contig value) { - this.contig = value; - } + protected List qualifier; - /** - * Gets the value of the sequence property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSequence() { - return sequence; - } + @XmlAttribute(name = "name", required = true) + protected String name; - /** - * Sets the value of the sequence property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSequence(String value) { - this.sequence = value; - } + @XmlAttribute(name = "location", required = true) + protected String location; /** - * Gets the value of the accession property. + * Gets the value of the taxon property. + * + * @return possible object is {@link EntryType.Feature.FeatureTaxon } * - * @return - * possible object is - * {@link String } - * */ - public String getAccession() { - return accession; + public EntryType.Feature.FeatureTaxon getTaxon() + { + return taxon; } /** - * Sets the value of the accession property. + * Sets the value of the taxon property. * * @param value - * allowed object is - * {@link String } - * - */ - public void setAccession(String value) { - this.accession = value; - } - - /** - * Gets the value of the version property. + * allowed object is {@link EntryType.Feature.FeatureTaxon } * - * @return - * possible object is - * {@link BigInteger } - * */ - public BigInteger getVersion() { - return version; + public void setTaxon(EntryType.Feature.FeatureTaxon value) + { + this.taxon = value; } /** - * Sets the value of the version property. + * Gets the value of the xref property. * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setVersion(BigInteger value) { - this.version = value; - } - - /** - * Gets the value of the entryVersion property. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the xref property. * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEntryVersion() { - return entryVersion; - } - - /** - * Sets the value of the entryVersion property. + *

+ * For example, to add a new item, do as follows: * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEntryVersion(BigInteger value) { - this.entryVersion = value; - } - - /** - * Gets the value of the dataClass property. + *

+     * getXref().add(newItem);
+     * 
* - * @return - * possible object is - * {@link String } - * - */ - public String getDataClass() { - return dataClass; - } - - /** - * Sets the value of the dataClass property. * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDataClass(String value) { - this.dataClass = value; - } - - /** - * Gets the value of the taxonomicDivision property. + *

+ * Objects of the following type(s) are allowed in the list {@link XrefType + * } * - * @return - * possible object is - * {@link String } - * - */ - public String getTaxonomicDivision() { - return taxonomicDivision; - } - - /** - * Sets the value of the taxonomicDivision property. * - * @param value - * allowed object is - * {@link String } - * */ - public void setTaxonomicDivision(String value) { - this.taxonomicDivision = value; + public List getXref() + { + if (xref == null) + { + xref = new ArrayList(); + } + return this.xref; } /** - * Gets the value of the moleculeType property. + * Gets the value of the qualifier property. * - * @return - * possible object is - * {@link String } - * - */ - public String getMoleculeType() { - return moleculeType; - } - - /** - * Sets the value of the moleculeType property. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the qualifier property. * - * @param value - * allowed object is - * {@link String } - * - */ - public void setMoleculeType(String value) { - this.moleculeType = value; - } - - /** - * Gets the value of the sequenceLength property. + *

+ * For example, to add a new item, do as follows: * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSequenceLength() { - return sequenceLength; - } - - /** - * Sets the value of the sequenceLength property. + *

+     * getQualifier().add(newItem);
+     * 
* - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSequenceLength(BigInteger value) { - this.sequenceLength = value; - } - - /** - * Gets the value of the topology property. * - * @return - * possible object is - * {@link String } - * - */ - public String getTopology() { - return topology; - } - - /** - * Sets the value of the topology property. + *

+ * Objects of the following type(s) are allowed in the list + * {@link EntryType.Feature.Qualifier } * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTopology(String value) { - this.topology = value; - } - - /** - * Gets the value of the firstPublic property. * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * */ - public XMLGregorianCalendar getFirstPublic() { - return firstPublic; + public List getQualifier() + { + if (qualifier == null) + { + qualifier = new ArrayList(); + } + return this.qualifier; } /** - * Sets the value of the firstPublic property. + * Gets the value of the name property. * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setFirstPublic(XMLGregorianCalendar value) { - this.firstPublic = value; - } - - /** - * Gets the value of the firstPublicRelease property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link BigInteger } - * */ - public BigInteger getFirstPublicRelease() { - return firstPublicRelease; + public String getName() + { + return name; } /** - * Sets the value of the firstPublicRelease property. + * Sets the value of the name property. * * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setFirstPublicRelease(BigInteger value) { - this.firstPublicRelease = value; - } - - /** - * Gets the value of the lastUpdated property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * */ - public XMLGregorianCalendar getLastUpdated() { - return lastUpdated; + public void setName(String value) + { + this.name = value; } /** - * Sets the value of the lastUpdated property. + * Gets the value of the location property. * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setLastUpdated(XMLGregorianCalendar value) { - this.lastUpdated = value; - } - - /** - * Gets the value of the lastUpdatedRelease property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link BigInteger } - * */ - public BigInteger getLastUpdatedRelease() { - return lastUpdatedRelease; + public String getLocation() + { + return location; } /** - * Sets the value of the lastUpdatedRelease property. + * Sets the value of the location property. * * @param value - * allowed object is - * {@link BigInteger } - * + * allowed object is {@link String } + * */ - public void setLastUpdatedRelease(BigInteger value) { - this.lastUpdatedRelease = value; + public void setLocation(String value) + { + this.location = value; } - /** - *

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained + * within this class. * *

      * <complexType>
      *   <complexContent>
      *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
      *       <sequence>
-     *         <element name="range" maxOccurs="unbounded">
+     *         <element name="lineage" minOccurs="0">
      *           <complexType>
      *             <complexContent>
      *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                 <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                 <attribute name="primaryBegin" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                 <attribute name="primaryEnd" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                 <attribute name="accession" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                 <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                 <attribute name="complement" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+     *                 <sequence>
+     *                   <element name="taxon" maxOccurs="unbounded">
+     *                     <complexType>
+     *                       <complexContent>
+     *                         <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *                           <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *                         </restriction>
+     *                       </complexContent>
+     *                     </complexType>
+     *                   </element>
+     *                 </sequence>
      *               </restriction>
      *             </complexContent>
      *           </complexType>
      *         </element>
      *       </sequence>
+     *       <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="commonName" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="taxId" type="{http://www.w3.org/2001/XMLSchema}integer" />
      *     </restriction>
      *   </complexContent>
      * </complexType>
@@ -896,366 +1894,198 @@ public class EntryType {
      * 
      */
     @XmlAccessorType(XmlAccessType.FIELD)
-    @XmlType(name = "", propOrder = {
-        "range"
-    })
-    public static class Assembly {
+    @XmlType(name = "", propOrder = { "lineage" })
+    public static class FeatureTaxon
+    {
+
+      protected EntryType.Feature.FeatureTaxon.Lineage lineage;
+
+      @XmlAttribute(name = "scientificName", required = true)
+      protected String scientificName;
+
+      @XmlAttribute(name = "commonName")
+      protected String commonName;
+
+      @XmlAttribute(name = "taxId")
+      protected BigInteger taxId;
+
+      /**
+       * Gets the value of the lineage property.
+       * 
+       * @return possible object is
+       *         {@link EntryType.Feature.FeatureTaxon.Lineage }
+       * 
+       */
+      public EntryType.Feature.FeatureTaxon.Lineage getLineage()
+      {
+        return lineage;
+      }
+
+      /**
+       * Sets the value of the lineage property.
+       * 
+       * @param value
+       *          allowed object is
+       *          {@link EntryType.Feature.FeatureTaxon.Lineage }
+       * 
+       */
+      public void setLineage(EntryType.Feature.FeatureTaxon.Lineage value)
+      {
+        this.lineage = value;
+      }
+
+      /**
+       * Gets the value of the scientificName property.
+       * 
+       * @return possible object is {@link String }
+       * 
+       */
+      public String getScientificName()
+      {
+        return scientificName;
+      }
+
+      /**
+       * Sets the value of the scientificName property.
+       * 
+       * @param value
+       *          allowed object is {@link String }
+       * 
+       */
+      public void setScientificName(String value)
+      {
+        this.scientificName = value;
+      }
+
+      /**
+       * Gets the value of the commonName property.
+       * 
+       * @return possible object is {@link String }
+       * 
+       */
+      public String getCommonName()
+      {
+        return commonName;
+      }
+
+      /**
+       * Sets the value of the commonName property.
+       * 
+       * @param value
+       *          allowed object is {@link String }
+       * 
+       */
+      public void setCommonName(String value)
+      {
+        this.commonName = value;
+      }
+
+      /**
+       * Gets the value of the taxId property.
+       * 
+       * @return possible object is {@link BigInteger }
+       * 
+       */
+      public BigInteger getTaxId()
+      {
+        return taxId;
+      }
+
+      /**
+       * Sets the value of the taxId property.
+       * 
+       * @param value
+       *          allowed object is {@link BigInteger }
+       * 
+       */
+      public void setTaxId(BigInteger value)
+      {
+        this.taxId = value;
+      }
+
+      /**
+       * 

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+       * <complexType>
+       *   <complexContent>
+       *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+       *       <sequence>
+       *         <element name="taxon" maxOccurs="unbounded">
+       *           <complexType>
+       *             <complexContent>
+       *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+       *                 <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *               </restriction>
+       *             </complexContent>
+       *           </complexType>
+       *         </element>
+       *       </sequence>
+       *     </restriction>
+       *   </complexContent>
+       * </complexType>
+       * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "taxon" }) + public static class Lineage + { @XmlElement(required = true) - protected List range; + protected List taxon; /** - * Gets the value of the range property. + * Gets the value of the taxon property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the range property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list + * will be present inside the JAXB object. This is why there is not a + * set method for the taxon property. * *

* For example, to add a new item, do as follows: + * *

-         *    getRange().add(newItem);
+         * getTaxon().add(newItem);
          * 
* * *

* Objects of the following type(s) are allowed in the list - * {@link EntryType.Assembly.Range } - * - * - */ - public List getRange() { - if (range == null) { - range = new ArrayList(); - } - return this.range; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="primaryBegin" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="primaryEnd" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="accession" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="complement" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
+ * {@link EntryType.Feature.FeatureTaxon.Lineage.Taxon } * * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Range { - - @XmlAttribute(name = "begin", required = true) - protected BigInteger begin; - @XmlAttribute(name = "end", required = true) - protected BigInteger end; - @XmlAttribute(name = "primaryBegin") - protected BigInteger primaryBegin; - @XmlAttribute(name = "primaryEnd") - protected BigInteger primaryEnd; - @XmlAttribute(name = "accession", required = true) - protected String accession; - @XmlAttribute(name = "version", required = true) - protected BigInteger version; - @XmlAttribute(name = "complement") - protected Boolean complement; - - /** - * Gets the value of the begin property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getBegin() { - return begin; - } - - /** - * Sets the value of the begin property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setBegin(BigInteger value) { - this.begin = value; - } - - /** - * Gets the value of the end property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEnd() { - return end; - } - - /** - * Sets the value of the end property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEnd(BigInteger value) { - this.end = value; - } - - /** - * Gets the value of the primaryBegin property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPrimaryBegin() { - return primaryBegin; - } - - /** - * Sets the value of the primaryBegin property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPrimaryBegin(BigInteger value) { - this.primaryBegin = value; - } - - /** - * Gets the value of the primaryEnd property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPrimaryEnd() { - return primaryEnd; - } - - /** - * Sets the value of the primaryEnd property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPrimaryEnd(BigInteger value) { - this.primaryEnd = value; - } - - /** - * Gets the value of the accession property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAccession() { - return accession; - } - - /** - * Sets the value of the accession property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAccession(String value) { - this.accession = value; - } - - /** - * Gets the value of the version property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getVersion() { - return version; - } - - /** - * Sets the value of the version property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setVersion(BigInteger value) { - this.version = value; - } - - /** - * Gets the value of the complement property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isComplement() { - if (complement == null) { - return false; - } else { - return complement; - } - } - - /** - * Sets the value of the complement property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setComplement(Boolean value) { - this.complement = value; - } - + public List getTaxon() + { + if (taxon == null) + { + taxon = new ArrayList(); + } + return this.taxon; } - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <choice maxOccurs="unbounded" minOccurs="0">
-     *           <element name="range">
-     *             <complexType>
-     *               <complexContent>
-     *                 <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                   <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                   <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                   <attribute name="primaryBegin" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                   <attribute name="primaryEnd" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                   <attribute name="accession" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                   <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                   <attribute name="complement" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *                 </restriction>
-     *               </complexContent>
-     *             </complexType>
-     *           </element>
-     *           <element name="gap">
-     *             <complexType>
-     *               <complexContent>
-     *                 <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                   <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                   <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                   <attribute name="length" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *                   <attribute name="unknownLength" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *                 </restriction>
-     *               </complexContent>
-     *             </complexType>
-     *           </element>
-     *         </choice>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "rangeOrGap" - }) - public static class Contig { - - @XmlElements({ - @XmlElement(name = "range", type = EntryType.Contig.Range.class), - @XmlElement(name = "gap", type = EntryType.Contig.Gap.class) - }) - protected List rangeOrGap; - /** - * Gets the value of the rangeOrGap property. - * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the rangeOrGap property. + * Java class for anonymous complex type. * *

- * For example, to add a new item, do as follows: - *

-         *    getRangeOrGap().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EntryType.Contig.Range } - * {@link EntryType.Contig.Gap } - * - * - */ - public List getRangeOrGap() { - if (rangeOrGap == null) { - rangeOrGap = new ArrayList(); - } - return this.rangeOrGap; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. + * The following schema fragment specifies the expected content + * contained within this class. * *

          * <complexType>
          *   <complexContent>
          *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="length" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="unknownLength" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+         *       <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
          *     </restriction>
          *   </complexContent>
          * </complexType>
@@ -1265,397 +2095,57 @@ public class EntryType {
          */
         @XmlAccessorType(XmlAccessType.FIELD)
         @XmlType(name = "")
-        public static class Gap {
-
-            @XmlAttribute(name = "begin", required = true)
-            protected BigInteger begin;
-            @XmlAttribute(name = "end", required = true)
-            protected BigInteger end;
-            @XmlAttribute(name = "length", required = true)
-            protected BigInteger length;
-            @XmlAttribute(name = "unknownLength")
-            protected Boolean unknownLength;
-
-            /**
-             * Gets the value of the begin property.
-             * 
-             * @return
-             *     possible object is
-             *     {@link BigInteger }
-             *     
-             */
-            public BigInteger getBegin() {
-                return begin;
-            }
-
-            /**
-             * Sets the value of the begin property.
-             * 
-             * @param value
-             *     allowed object is
-             *     {@link BigInteger }
-             *     
-             */
-            public void setBegin(BigInteger value) {
-                this.begin = value;
-            }
-
-            /**
-             * Gets the value of the end property.
-             * 
-             * @return
-             *     possible object is
-             *     {@link BigInteger }
-             *     
-             */
-            public BigInteger getEnd() {
-                return end;
-            }
-
-            /**
-             * Sets the value of the end property.
-             * 
-             * @param value
-             *     allowed object is
-             *     {@link BigInteger }
-             *     
-             */
-            public void setEnd(BigInteger value) {
-                this.end = value;
-            }
-
-            /**
-             * Gets the value of the length property.
-             * 
-             * @return
-             *     possible object is
-             *     {@link BigInteger }
-             *     
-             */
-            public BigInteger getLength() {
-                return length;
-            }
-
-            /**
-             * Sets the value of the length property.
-             * 
-             * @param value
-             *     allowed object is
-             *     {@link BigInteger }
-             *     
-             */
-            public void setLength(BigInteger value) {
-                this.length = value;
-            }
-
-            /**
-             * Gets the value of the unknownLength property.
-             * 
-             * @return
-             *     possible object is
-             *     {@link Boolean }
-             *     
-             */
-            public boolean isUnknownLength() {
-                if (unknownLength == null) {
-                    return false;
-                } else {
-                    return unknownLength;
-                }
-            }
-
-            /**
-             * Sets the value of the unknownLength property.
-             * 
-             * @param value
-             *     allowed object is
-             *     {@link Boolean }
-             *     
-             */
-            public void setUnknownLength(Boolean value) {
-                this.unknownLength = value;
-            }
+        public static class Taxon
+        {
+
+          @XmlAttribute(name = "scientificName", required = true)
+          protected String scientificName;
+
+          /**
+           * Gets the value of the scientificName property.
+           * 
+           * @return possible object is {@link String }
+           * 
+           */
+          public String getScientificName()
+          {
+            return scientificName;
+          }
+
+          /**
+           * Sets the value of the scientificName property.
+           * 
+           * @param value
+           *          allowed object is {@link String }
+           * 
+           */
+          public void setScientificName(String value)
+          {
+            this.scientificName = value;
+          }
 
         }
 
-
-        /**
-         * 

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attribute name="begin" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="primaryBegin" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="primaryEnd" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="accession" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *       <attribute name="complement" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Range { - - @XmlAttribute(name = "begin", required = true) - protected BigInteger begin; - @XmlAttribute(name = "end", required = true) - protected BigInteger end; - @XmlAttribute(name = "primaryBegin") - protected BigInteger primaryBegin; - @XmlAttribute(name = "primaryEnd") - protected BigInteger primaryEnd; - @XmlAttribute(name = "accession", required = true) - protected String accession; - @XmlAttribute(name = "version", required = true) - protected BigInteger version; - @XmlAttribute(name = "complement") - protected Boolean complement; - - /** - * Gets the value of the begin property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getBegin() { - return begin; - } - - /** - * Sets the value of the begin property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setBegin(BigInteger value) { - this.begin = value; - } - - /** - * Gets the value of the end property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEnd() { - return end; - } - - /** - * Sets the value of the end property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEnd(BigInteger value) { - this.end = value; - } - - /** - * Gets the value of the primaryBegin property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPrimaryBegin() { - return primaryBegin; - } - - /** - * Sets the value of the primaryBegin property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPrimaryBegin(BigInteger value) { - this.primaryBegin = value; - } - - /** - * Gets the value of the primaryEnd property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPrimaryEnd() { - return primaryEnd; - } - - /** - * Sets the value of the primaryEnd property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPrimaryEnd(BigInteger value) { - this.primaryEnd = value; - } - - /** - * Gets the value of the accession property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAccession() { - return accession; - } - - /** - * Sets the value of the accession property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAccession(String value) { - this.accession = value; - } - - /** - * Gets the value of the version property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getVersion() { - return version; - } - - /** - * Sets the value of the version property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setVersion(BigInteger value) { - this.version = value; - } - - /** - * Gets the value of the complement property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isComplement() { - if (complement == null) { - return false; - } else { - return complement; - } - } - - /** - * Sets the value of the complement property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setComplement(Boolean value) { - this.complement = value; - } - - } + } } - /** - *

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained + * within this class. * *

      * <complexType>
      *   <complexContent>
      *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
      *       <sequence>
-     *         <element name="taxon" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <sequence>
-     *                   <element name="lineage" minOccurs="0">
-     *                     <complexType>
-     *                       <complexContent>
-     *                         <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                           <sequence>
-     *                             <element name="taxon" maxOccurs="unbounded">
-     *                               <complexType>
-     *                                 <complexContent>
-     *                                   <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                                     <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                                   </restriction>
-     *                                 </complexContent>
-     *                               </complexType>
-     *                             </element>
-     *                           </sequence>
-     *                         </restriction>
-     *                       </complexContent>
-     *                     </complexType>
-     *                   </element>
-     *                 </sequence>
-     *                 <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                 <attribute name="commonName" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                 <attribute name="taxId" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *         <element name="xref" type="{}XrefType" maxOccurs="unbounded" minOccurs="0"/>
-     *         <element name="qualifier" maxOccurs="unbounded" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <sequence>
-     *                   <element name="value" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *                 </sequence>
-     *                 <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
+     *         <element name="value" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
      *       </sequence>
      *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="location" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
      *     </restriction>
      *   </complexContent>
      * </complexType>
@@ -1664,1017 +2154,578 @@ public class EntryType {
      * 
      */
     @XmlAccessorType(XmlAccessType.FIELD)
-    @XmlType(name = "", propOrder = {
-        "taxon",
-        "xref",
-        "qualifier"
-    })
-    public static class Feature {
-
-        protected EntryType.Feature.FeatureTaxon taxon;
-        protected List xref;
-        protected List qualifier;
-        @XmlAttribute(name = "name", required = true)
-        protected String name;
-        @XmlAttribute(name = "location", required = true)
-        protected String location;
+    @XmlType(name = "", propOrder = { "value" })
+    public static class Qualifier
+    {
+
+      protected String value;
+
+      @XmlAttribute(name = "name", required = true)
+      protected String name;
+
+      /**
+       * Gets the value of the value property.
+       * 
+       * @return possible object is {@link String }
+       * 
+       */
+      public String getValue()
+      {
+        return value;
+      }
+
+      /**
+       * Sets the value of the value property.
+       * 
+       * @param value
+       *          allowed object is {@link String }
+       * 
+       */
+      public void setValue(String value)
+      {
+        this.value = value;
+      }
+
+      /**
+       * Gets the value of the name property.
+       * 
+       * @return possible object is {@link String }
+       * 
+       */
+      public String getName()
+      {
+        return name;
+      }
+
+      /**
+       * Sets the value of the name property.
+       * 
+       * @param value
+       *          allowed object is {@link String }
+       * 
+       */
+      public void setName(String value)
+      {
+        this.name = value;
+      }
 
-        /**
-         * Gets the value of the taxon property.
-         * 
-         * @return
-         *     possible object is
-         *     {@link EntryType.Feature.FeatureTaxon }
-         *     
-         */
-        public EntryType.Feature.FeatureTaxon getTaxon() {
-            return taxon;
-        }
+    }
 
-        /**
-         * Sets the value of the taxon property.
-         * 
-         * @param value
-         *     allowed object is
-         *     {@link EntryType.Feature.FeatureTaxon }
-         *     
-         */
-        public void setTaxon(EntryType.Feature.FeatureTaxon value) {
-            this.taxon = value;
-        }
+  }
+
+  /**
+   * 

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="title" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="author" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
+   *         <element name="applicant" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
+   *         <element name="consortium" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="submissionDate" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/>
+   *         <element name="journal" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="year" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="volume" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="issue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="firstPage" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="lastPage" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="comment" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="referenceLocation" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+   *         <element name="xref" type="{}XrefType" maxOccurs="unbounded" minOccurs="0"/>
+   *       </sequence>
+   *       <attribute name="type" use="required">
+   *         <simpleType>
+   *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+   *             <enumeration value="submission"/>
+   *             <enumeration value="book"/>
+   *             <enumeration value="article"/>
+   *             <enumeration value="patent"/>
+   *             <enumeration value="thesis"/>
+   *             <enumeration value="unpublished"/>
+   *           </restriction>
+   *         </simpleType>
+   *       </attribute>
+   *       <attribute name="number" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *       <attribute name="location" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType( + name = "", + propOrder = + { "title", "author", "applicant", "consortium", "submissionDate", + "journal", "year", "volume", "issue", "firstPage", "lastPage", + "comment", "referenceLocation", "xref" }) + public static class Reference + { + + protected String title; + + protected List author; + + protected List applicant; + + protected String consortium; - /** - * Gets the value of the xref property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the xref property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getXref().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link XrefType } - * - * - */ - public List getXref() { - if (xref == null) { - xref = new ArrayList(); - } - return this.xref; - } + @XmlSchemaType(name = "date") + protected XMLGregorianCalendar submissionDate; - /** - * Gets the value of the qualifier property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the qualifier property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getQualifier().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EntryType.Feature.Qualifier } - * - * - */ - public List getQualifier() { - if (qualifier == null) { - qualifier = new ArrayList(); - } - return this.qualifier; - } + protected String journal; - /** - * Gets the value of the name property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } + protected String year; - /** - * Sets the value of the name property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } + protected String volume; - /** - * Gets the value of the location property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getLocation() { - return location; - } + protected String issue; - /** - * Sets the value of the location property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setLocation(String value) { - this.location = value; - } + protected String firstPage; + protected String lastPage; - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <sequence>
-         *         <element name="lineage" minOccurs="0">
-         *           <complexType>
-         *             <complexContent>
-         *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *                 <sequence>
-         *                   <element name="taxon" maxOccurs="unbounded">
-         *                     <complexType>
-         *                       <complexContent>
-         *                         <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *                           <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *                         </restriction>
-         *                       </complexContent>
-         *                     </complexType>
-         *                   </element>
-         *                 </sequence>
-         *               </restriction>
-         *             </complexContent>
-         *           </complexType>
-         *         </element>
-         *       </sequence>
-         *       <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="commonName" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="taxId" type="{http://www.w3.org/2001/XMLSchema}integer" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "lineage" - }) - public static class FeatureTaxon { - - protected EntryType.Feature.FeatureTaxon.Lineage lineage; - @XmlAttribute(name = "scientificName", required = true) - protected String scientificName; - @XmlAttribute(name = "commonName") - protected String commonName; - @XmlAttribute(name = "taxId") - protected BigInteger taxId; - - /** - * Gets the value of the lineage property. - * - * @return - * possible object is - * {@link EntryType.Feature.FeatureTaxon.Lineage } - * - */ - public EntryType.Feature.FeatureTaxon.Lineage getLineage() { - return lineage; - } - - /** - * Sets the value of the lineage property. - * - * @param value - * allowed object is - * {@link EntryType.Feature.FeatureTaxon.Lineage } - * - */ - public void setLineage(EntryType.Feature.FeatureTaxon.Lineage value) { - this.lineage = value; - } - - /** - * Gets the value of the scientificName property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getScientificName() { - return scientificName; - } - - /** - * Sets the value of the scientificName property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setScientificName(String value) { - this.scientificName = value; - } - - /** - * Gets the value of the commonName property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCommonName() { - return commonName; - } - - /** - * Sets the value of the commonName property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCommonName(String value) { - this.commonName = value; - } - - /** - * Gets the value of the taxId property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getTaxId() { - return taxId; - } - - /** - * Sets the value of the taxId property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setTaxId(BigInteger value) { - this.taxId = value; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-             * <complexType>
-             *   <complexContent>
-             *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-             *       <sequence>
-             *         <element name="taxon" maxOccurs="unbounded">
-             *           <complexType>
-             *             <complexContent>
-             *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-             *                 <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-             *               </restriction>
-             *             </complexContent>
-             *           </complexType>
-             *         </element>
-             *       </sequence>
-             *     </restriction>
-             *   </complexContent>
-             * </complexType>
-             * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "taxon" - }) - public static class Lineage { - - @XmlElement(required = true) - protected List taxon; - - /** - * Gets the value of the taxon property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the taxon property. - * - *

- * For example, to add a new item, do as follows: - *

-                 *    getTaxon().add(newItem);
-                 * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EntryType.Feature.FeatureTaxon.Lineage.Taxon } - * - * - */ - public List getTaxon() { - if (taxon == null) { - taxon = new ArrayList(); - } - return this.taxon; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-                 * <complexType>
-                 *   <complexContent>
-                 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-                 *       <attribute name="scientificName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-                 *     </restriction>
-                 *   </complexContent>
-                 * </complexType>
-                 * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Taxon { - - @XmlAttribute(name = "scientificName", required = true) - protected String scientificName; - - /** - * Gets the value of the scientificName property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getScientificName() { - return scientificName; - } - - /** - * Sets the value of the scientificName property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setScientificName(String value) { - this.scientificName = value; - } - - } - - } + protected String comment; - } + protected String referenceLocation; + protected List xref; - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <sequence>
-         *         <element name="value" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-         *       </sequence>
-         *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "value" - }) - public static class Qualifier { - - protected String value; - @XmlAttribute(name = "name", required = true) - protected String name; - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Gets the value of the name property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Sets the value of the name property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } + @XmlAttribute(name = "type", required = true) + protected String type; - } + @XmlAttribute(name = "number", required = true) + protected BigInteger number; + + @XmlAttribute(name = "location") + protected String location; + /** + * Gets the value of the title property. + * + * @return possible object is {@link String } + * + */ + public String getTitle() + { + return title; } + /** + * Sets the value of the title property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTitle(String value) + { + this.title = value; + } /** - *

Java class for anonymous complex type. + * Gets the value of the author property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the author property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="title" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="author" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
-     *         <element name="applicant" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
-     *         <element name="consortium" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="submissionDate" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/>
-     *         <element name="journal" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="year" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="volume" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="issue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="firstPage" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="lastPage" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="comment" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="referenceLocation" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
-     *         <element name="xref" type="{}XrefType" maxOccurs="unbounded" minOccurs="0"/>
-     *       </sequence>
-     *       <attribute name="type" use="required">
-     *         <simpleType>
-     *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
-     *             <enumeration value="submission"/>
-     *             <enumeration value="book"/>
-     *             <enumeration value="article"/>
-     *             <enumeration value="patent"/>
-     *             <enumeration value="thesis"/>
-     *             <enumeration value="unpublished"/>
-     *           </restriction>
-     *         </simpleType>
-     *       </attribute>
-     *       <attribute name="number" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *       <attribute name="location" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getAuthor().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "title", - "author", - "applicant", - "consortium", - "submissionDate", - "journal", - "year", - "volume", - "issue", - "firstPage", - "lastPage", - "comment", - "referenceLocation", - "xref" - }) - public static class Reference { - - protected String title; - protected List author; - protected List applicant; - protected String consortium; - @XmlSchemaType(name = "date") - protected XMLGregorianCalendar submissionDate; - protected String journal; - protected String year; - protected String volume; - protected String issue; - protected String firstPage; - protected String lastPage; - protected String comment; - protected String referenceLocation; - protected List xref; - @XmlAttribute(name = "type", required = true) - protected String type; - @XmlAttribute(name = "number", required = true) - protected BigInteger number; - @XmlAttribute(name = "location") - protected String location; - - /** - * Gets the value of the title property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTitle() { - return title; - } - - /** - * Sets the value of the title property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTitle(String value) { - this.title = value; - } + public List getAuthor() + { + if (author == null) + { + author = new ArrayList(); + } + return this.author; + } - /** - * Gets the value of the author property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the author property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getAuthor().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getAuthor() { - if (author == null) { - author = new ArrayList(); - } - return this.author; - } - - /** - * Gets the value of the applicant property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the applicant property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getApplicant().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getApplicant() { - if (applicant == null) { - applicant = new ArrayList(); - } - return this.applicant; - } - - /** - * Gets the value of the consortium property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getConsortium() { - return consortium; - } + /** + * Gets the value of the applicant property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the applicant property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getApplicant().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getApplicant() + { + if (applicant == null) + { + applicant = new ArrayList(); + } + return this.applicant; + } - /** - * Sets the value of the consortium property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setConsortium(String value) { - this.consortium = value; - } + /** + * Gets the value of the consortium property. + * + * @return possible object is {@link String } + * + */ + public String getConsortium() + { + return consortium; + } - /** - * Gets the value of the submissionDate property. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getSubmissionDate() { - return submissionDate; - } + /** + * Sets the value of the consortium property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setConsortium(String value) + { + this.consortium = value; + } - /** - * Sets the value of the submissionDate property. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setSubmissionDate(XMLGregorianCalendar value) { - this.submissionDate = value; - } + /** + * Gets the value of the submissionDate property. + * + * @return possible object is {@link XMLGregorianCalendar } + * + */ + public XMLGregorianCalendar getSubmissionDate() + { + return submissionDate; + } - /** - * Gets the value of the journal property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getJournal() { - return journal; - } + /** + * Sets the value of the submissionDate property. + * + * @param value + * allowed object is {@link XMLGregorianCalendar } + * + */ + public void setSubmissionDate(XMLGregorianCalendar value) + { + this.submissionDate = value; + } - /** - * Sets the value of the journal property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setJournal(String value) { - this.journal = value; - } + /** + * Gets the value of the journal property. + * + * @return possible object is {@link String } + * + */ + public String getJournal() + { + return journal; + } - /** - * Gets the value of the year property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getYear() { - return year; - } + /** + * Sets the value of the journal property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setJournal(String value) + { + this.journal = value; + } - /** - * Sets the value of the year property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setYear(String value) { - this.year = value; - } + /** + * Gets the value of the year property. + * + * @return possible object is {@link String } + * + */ + public String getYear() + { + return year; + } - /** - * Gets the value of the volume property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVolume() { - return volume; - } + /** + * Sets the value of the year property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setYear(String value) + { + this.year = value; + } - /** - * Sets the value of the volume property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVolume(String value) { - this.volume = value; - } + /** + * Gets the value of the volume property. + * + * @return possible object is {@link String } + * + */ + public String getVolume() + { + return volume; + } - /** - * Gets the value of the issue property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getIssue() { - return issue; - } + /** + * Sets the value of the volume property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setVolume(String value) + { + this.volume = value; + } - /** - * Sets the value of the issue property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setIssue(String value) { - this.issue = value; - } + /** + * Gets the value of the issue property. + * + * @return possible object is {@link String } + * + */ + public String getIssue() + { + return issue; + } - /** - * Gets the value of the firstPage property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFirstPage() { - return firstPage; - } + /** + * Sets the value of the issue property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setIssue(String value) + { + this.issue = value; + } - /** - * Sets the value of the firstPage property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFirstPage(String value) { - this.firstPage = value; - } + /** + * Gets the value of the firstPage property. + * + * @return possible object is {@link String } + * + */ + public String getFirstPage() + { + return firstPage; + } - /** - * Gets the value of the lastPage property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getLastPage() { - return lastPage; - } + /** + * Sets the value of the firstPage property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setFirstPage(String value) + { + this.firstPage = value; + } - /** - * Sets the value of the lastPage property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setLastPage(String value) { - this.lastPage = value; - } + /** + * Gets the value of the lastPage property. + * + * @return possible object is {@link String } + * + */ + public String getLastPage() + { + return lastPage; + } - /** - * Gets the value of the comment property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getComment() { - return comment; - } + /** + * Sets the value of the lastPage property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setLastPage(String value) + { + this.lastPage = value; + } - /** - * Sets the value of the comment property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setComment(String value) { - this.comment = value; - } + /** + * Gets the value of the comment property. + * + * @return possible object is {@link String } + * + */ + public String getComment() + { + return comment; + } - /** - * Gets the value of the referenceLocation property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getReferenceLocation() { - return referenceLocation; - } + /** + * Sets the value of the comment property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setComment(String value) + { + this.comment = value; + } - /** - * Sets the value of the referenceLocation property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setReferenceLocation(String value) { - this.referenceLocation = value; - } + /** + * Gets the value of the referenceLocation property. + * + * @return possible object is {@link String } + * + */ + public String getReferenceLocation() + { + return referenceLocation; + } - /** - * Gets the value of the xref property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the xref property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getXref().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link XrefType } - * - * - */ - public List getXref() { - if (xref == null) { - xref = new ArrayList(); - } - return this.xref; - } + /** + * Sets the value of the referenceLocation property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setReferenceLocation(String value) + { + this.referenceLocation = value; + } - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } + /** + * Gets the value of the xref property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the xref property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getXref().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link XrefType + * } + * + * + */ + public List getXref() + { + if (xref == null) + { + xref = new ArrayList(); + } + return this.xref; + } - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } - /** - * Gets the value of the number property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getNumber() { - return number; - } + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } - /** - * Sets the value of the number property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setNumber(BigInteger value) { - this.number = value; - } + /** + * Gets the value of the number property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getNumber() + { + return number; + } - /** - * Gets the value of the location property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getLocation() { - return location; - } + /** + * Sets the value of the number property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setNumber(BigInteger value) + { + this.number = value; + } - /** - * Sets the value of the location property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setLocation(String value) { - this.location = value; - } + /** + * Gets the value of the location property. + * + * @return possible object is {@link String } + * + */ + public String getLocation() + { + return location; + } + /** + * Sets the value of the location property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setLocation(String value) + { + this.location = value; } + } + } diff --git a/src/jalview/xml/binding/embl/ObjectFactory.java b/src/jalview/xml/binding/embl/ObjectFactory.java index e1a917a..0bb5c59 100644 --- a/src/jalview/xml/binding/embl/ObjectFactory.java +++ b/src/jalview/xml/binding/embl/ObjectFactory.java @@ -2,158 +2,170 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:45 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.embl; import javax.xml.bind.annotation.XmlRegistry; - /** - * This object contains factory methods for each - * Java content interface and Java element interface - * generated in the jalview.xml.binding.embl package. - *

An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. + * This object contains factory methods for each Java content interface and Java + * element interface generated in the jalview.xml.binding.embl package. + *

+ * An ObjectFactory allows you to programatically construct new instances of the + * Java representation for XML content. The Java representation of XML content + * can consist of schema derived interfaces and classes representing the binding + * of schema type definitions, element declarations and model groups. Factory + * methods for each of these are provided in this class. * */ @XmlRegistry -public class ObjectFactory { - - - /** - * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: jalview.xml.binding.embl - * - */ - public ObjectFactory() { - } - - /** - * Create an instance of {@link EntryType } - * - */ - public EntryType createEntryType() { - return new EntryType(); - } - - /** - * Create an instance of {@link EntryType.Contig } - * - */ - public EntryType.Contig createEntryTypeContig() { - return new EntryType.Contig(); - } - - /** - * Create an instance of {@link EntryType.Assembly } - * - */ - public EntryType.Assembly createEntryTypeAssembly() { - return new EntryType.Assembly(); - } - - /** - * Create an instance of {@link EntryType.Feature } - * - */ - public EntryType.Feature createEntryTypeFeature() { - return new EntryType.Feature(); - } - - /** - * Create an instance of {@link EntryType.Feature.FeatureTaxon } - * - */ - public EntryType.Feature.FeatureTaxon createEntryTypeFeatureFeatureTaxon() { - return new EntryType.Feature.FeatureTaxon(); - } - - /** - * Create an instance of {@link EntryType.Feature.FeatureTaxon.Lineage } - * - */ - public EntryType.Feature.FeatureTaxon.Lineage createEntryTypeFeatureFeatureTaxonLineage() { - return new EntryType.Feature.FeatureTaxon.Lineage(); - } - - /** - * Create an instance of {@link ROOT } - * - */ - public ROOT createROOT() { - return new ROOT(); - } - - /** - * Create an instance of {@link EntrySetType } - * - */ - public EntrySetType createEntrySetType() { - return new EntrySetType(); - } - - /** - * Create an instance of {@link XrefType } - * - */ - public XrefType createXrefType() { - return new XrefType(); - } - - /** - * Create an instance of {@link EntryType.Reference } - * - */ - public EntryType.Reference createEntryTypeReference() { - return new EntryType.Reference(); - } - - /** - * Create an instance of {@link EntryType.Contig.Range } - * - */ - public EntryType.Contig.Range createEntryTypeContigRange() { - return new EntryType.Contig.Range(); - } - - /** - * Create an instance of {@link EntryType.Contig.Gap } - * - */ - public EntryType.Contig.Gap createEntryTypeContigGap() { - return new EntryType.Contig.Gap(); - } - - /** - * Create an instance of {@link EntryType.Assembly.Range } - * - */ - public EntryType.Assembly.Range createEntryTypeAssemblyRange() { - return new EntryType.Assembly.Range(); - } - - /** - * Create an instance of {@link EntryType.Feature.Qualifier } - * - */ - public EntryType.Feature.Qualifier createEntryTypeFeatureQualifier() { - return new EntryType.Feature.Qualifier(); - } - - /** - * Create an instance of {@link EntryType.Feature.FeatureTaxon.Lineage.Taxon } - * - */ - public EntryType.Feature.FeatureTaxon.Lineage.Taxon createEntryTypeFeatureFeatureTaxonLineageTaxon() { - return new EntryType.Feature.FeatureTaxon.Lineage.Taxon(); - } +public class ObjectFactory +{ + + /** + * Create a new ObjectFactory that can be used to create new instances of + * schema derived classes for package: jalview.xml.binding.embl + * + */ + public ObjectFactory() + { + } + + /** + * Create an instance of {@link EntryType } + * + */ + public EntryType createEntryType() + { + return new EntryType(); + } + + /** + * Create an instance of {@link EntryType.Contig } + * + */ + public EntryType.Contig createEntryTypeContig() + { + return new EntryType.Contig(); + } + + /** + * Create an instance of {@link EntryType.Assembly } + * + */ + public EntryType.Assembly createEntryTypeAssembly() + { + return new EntryType.Assembly(); + } + + /** + * Create an instance of {@link EntryType.Feature } + * + */ + public EntryType.Feature createEntryTypeFeature() + { + return new EntryType.Feature(); + } + + /** + * Create an instance of {@link EntryType.Feature.FeatureTaxon } + * + */ + public EntryType.Feature.FeatureTaxon createEntryTypeFeatureFeatureTaxon() + { + return new EntryType.Feature.FeatureTaxon(); + } + + /** + * Create an instance of {@link EntryType.Feature.FeatureTaxon.Lineage } + * + */ + public EntryType.Feature.FeatureTaxon.Lineage createEntryTypeFeatureFeatureTaxonLineage() + { + return new EntryType.Feature.FeatureTaxon.Lineage(); + } + + /** + * Create an instance of {@link ROOT } + * + */ + public ROOT createROOT() + { + return new ROOT(); + } + + /** + * Create an instance of {@link EntrySetType } + * + */ + public EntrySetType createEntrySetType() + { + return new EntrySetType(); + } + + /** + * Create an instance of {@link XrefType } + * + */ + public XrefType createXrefType() + { + return new XrefType(); + } + + /** + * Create an instance of {@link EntryType.Reference } + * + */ + public EntryType.Reference createEntryTypeReference() + { + return new EntryType.Reference(); + } + + /** + * Create an instance of {@link EntryType.Contig.Range } + * + */ + public EntryType.Contig.Range createEntryTypeContigRange() + { + return new EntryType.Contig.Range(); + } + + /** + * Create an instance of {@link EntryType.Contig.Gap } + * + */ + public EntryType.Contig.Gap createEntryTypeContigGap() + { + return new EntryType.Contig.Gap(); + } + + /** + * Create an instance of {@link EntryType.Assembly.Range } + * + */ + public EntryType.Assembly.Range createEntryTypeAssemblyRange() + { + return new EntryType.Assembly.Range(); + } + + /** + * Create an instance of {@link EntryType.Feature.Qualifier } + * + */ + public EntryType.Feature.Qualifier createEntryTypeFeatureQualifier() + { + return new EntryType.Feature.Qualifier(); + } + + /** + * Create an instance of {@link EntryType.Feature.FeatureTaxon.Lineage.Taxon } + * + */ + public EntryType.Feature.FeatureTaxon.Lineage.Taxon createEntryTypeFeatureFeatureTaxonLineageTaxon() + { + return new EntryType.Feature.FeatureTaxon.Lineage.Taxon(); + } } diff --git a/src/jalview/xml/binding/embl/ROOT.java b/src/jalview/xml/binding/embl/ROOT.java index 958cdbc..b3fad01 100644 --- a/src/jalview/xml/binding/embl/ROOT.java +++ b/src/jalview/xml/binding/embl/ROOT.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:45 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.embl; import javax.xml.bind.annotation.XmlAccessType; @@ -13,11 +12,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType>
@@ -35,62 +36,59 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
-    "entrySet",
-    "entry"
-})
+@XmlType(name = "", propOrder = { "entrySet", "entry" })
 @XmlRootElement(name = "ROOT")
-public class ROOT {
+public class ROOT
+{
+
+  protected EntrySetType entrySet;
 
-    protected EntrySetType entrySet;
-    protected EntryType entry;
+  protected EntryType entry;
 
-    /**
-     * Gets the value of the entrySet property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link EntrySetType }
-     *     
-     */
-    public EntrySetType getEntrySet() {
-        return entrySet;
-    }
+  /**
+   * Gets the value of the entrySet property.
+   * 
+   * @return possible object is {@link EntrySetType }
+   * 
+   */
+  public EntrySetType getEntrySet()
+  {
+    return entrySet;
+  }
 
-    /**
-     * Sets the value of the entrySet property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link EntrySetType }
-     *     
-     */
-    public void setEntrySet(EntrySetType value) {
-        this.entrySet = value;
-    }
+  /**
+   * Sets the value of the entrySet property.
+   * 
+   * @param value
+   *          allowed object is {@link EntrySetType }
+   * 
+   */
+  public void setEntrySet(EntrySetType value)
+  {
+    this.entrySet = value;
+  }
 
-    /**
-     * Gets the value of the entry property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link EntryType }
-     *     
-     */
-    public EntryType getEntry() {
-        return entry;
-    }
+  /**
+   * Gets the value of the entry property.
+   * 
+   * @return possible object is {@link EntryType }
+   * 
+   */
+  public EntryType getEntry()
+  {
+    return entry;
+  }
 
-    /**
-     * Sets the value of the entry property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link EntryType }
-     *     
-     */
-    public void setEntry(EntryType value) {
-        this.entry = value;
-    }
+  /**
+   * Sets the value of the entry property.
+   * 
+   * @param value
+   *          allowed object is {@link EntryType }
+   * 
+   */
+  public void setEntry(EntryType value)
+  {
+    this.entry = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/embl/XrefType.java b/src/jalview/xml/binding/embl/XrefType.java
index 244d0fe..03bbba4 100644
--- a/src/jalview/xml/binding/embl/XrefType.java
+++ b/src/jalview/xml/binding/embl/XrefType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:45 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.embl;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -13,13 +12,15 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
  * Database cross-reference.
  * 
- * 

Java class for XrefType complex type. + *

+ * Java class for XrefType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="XrefType">
@@ -37,85 +38,85 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "XrefType")
-public class XrefType {
+public class XrefType
+{
+
+  @XmlAttribute(name = "db", required = true)
+  protected String db;
+
+  @XmlAttribute(name = "id", required = true)
+  protected String id;
 
-    @XmlAttribute(name = "db", required = true)
-    protected String db;
-    @XmlAttribute(name = "id", required = true)
-    protected String id;
-    @XmlAttribute(name = "secondaryId")
-    protected String secondaryId;
+  @XmlAttribute(name = "secondaryId")
+  protected String secondaryId;
 
-    /**
-     * Gets the value of the db property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getDb() {
-        return db;
-    }
+  /**
+   * Gets the value of the db property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getDb()
+  {
+    return db;
+  }
 
-    /**
-     * Sets the value of the db property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setDb(String value) {
-        this.db = value;
-    }
+  /**
+   * Sets the value of the db property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setDb(String value)
+  {
+    this.db = value;
+  }
 
-    /**
-     * Gets the value of the id property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getId() {
-        return id;
-    }
+  /**
+   * Gets the value of the id property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getId()
+  {
+    return id;
+  }
 
-    /**
-     * Sets the value of the id property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setId(String value) {
-        this.id = value;
-    }
+  /**
+   * Sets the value of the id property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setId(String value)
+  {
+    this.id = value;
+  }
 
-    /**
-     * Gets the value of the secondaryId property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getSecondaryId() {
-        return secondaryId;
-    }
+  /**
+   * Gets the value of the secondaryId property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getSecondaryId()
+  {
+    return secondaryId;
+  }
 
-    /**
-     * Sets the value of the secondaryId property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setSecondaryId(String value) {
-        this.secondaryId = value;
-    }
+  /**
+   * Sets the value of the secondaryId property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setSecondaryId(String value)
+  {
+    this.secondaryId = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/AlcodonFrame.java b/src/jalview/xml/binding/jalview/AlcodonFrame.java
index 2a40e11..6b98b6a 100644
--- a/src/jalview/xml/binding/jalview/AlcodonFrame.java
+++ b/src/jalview/xml/binding/jalview/AlcodonFrame.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
-
 package jalview.xml.binding.jalview;
 
 import java.math.BigInteger;
@@ -18,11 +17,13 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * 

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType>
@@ -61,266 +62,275 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
-    "alcodon",
-    "alcodMap"
-})
+@XmlType(name = "", propOrder = { "alcodon", "alcodMap" })
 @XmlRootElement(name = "AlcodonFrame")
-public class AlcodonFrame {
+public class AlcodonFrame
+{
+
+  protected List alcodon;
+
+  protected List alcodMap;
 
-    protected List alcodon;
-    protected List alcodMap;
+  /**
+   * Gets the value of the alcodon property.
+   * 
+   * 

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the alcodon property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getAlcodon().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link AlcodonFrame.Alcodon } + * + * + */ + public List getAlcodon() + { + if (alcodon == null) + { + alcodon = new ArrayList(); + } + return this.alcodon; + } + + /** + * Gets the value of the alcodMap property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the alcodMap property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getAlcodMap().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link AlcodonFrame.AlcodMap } + * + * + */ + public List getAlcodMap() + { + if (alcodMap == null) + { + alcodMap = new ArrayList(); + } + return this.alcodMap; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element ref="{www.vamsas.ac.uk/jalview/version2}Mapping"/>
+   *       </sequence>
+   *       <attribute name="dnasq" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "mapping" }) + public static class AlcodMap + { + + @XmlElement(name = "Mapping", required = true) + protected Mapping mapping; + + @XmlAttribute(name = "dnasq", required = true) + protected String dnasq; /** - * Gets the value of the alcodon property. * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the alcodon property. + * a Mapping entry and an associated protein sequence * - *

- * For example, to add a new item, do as follows: - *

-     *    getAlcodon().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link AlcodonFrame.Alcodon } * + * @return possible object is {@link Mapping } * */ - public List getAlcodon() { - if (alcodon == null) { - alcodon = new ArrayList(); - } - return this.alcodon; + public Mapping getMapping() + { + return mapping; } /** - * Gets the value of the alcodMap property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the alcodMap property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAlcodMap().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link AlcodonFrame.AlcodMap } + * Sets the value of the mapping property. * + * @param value + * allowed object is {@link Mapping } * */ - public List getAlcodMap() { - if (alcodMap == null) { - alcodMap = new ArrayList(); - } - return this.alcodMap; + public void setMapping(Mapping value) + { + this.mapping = value; } - /** - *

Java class for anonymous complex type. + * Gets the value of the dnasq property. * - *

The following schema fragment specifies the expected content contained within this class. + * @return possible object is {@link String } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element ref="{www.vamsas.ac.uk/jalview/version2}Mapping"/>
-     *       </sequence>
-     *       <attribute name="dnasq" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public String getDnasq() + { + return dnasq; + } + + /** + * Sets the value of the dnasq property. * + * @param value + * allowed object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "mapping" - }) - public static class AlcodMap { + public void setDnasq(String value) + { + this.dnasq = value; + } - @XmlElement(name = "Mapping", required = true) - protected Mapping mapping; - @XmlAttribute(name = "dnasq", required = true) - protected String dnasq; + } - /** - * - * a Mapping entry and an associated protein sequence - * - * - * @return - * possible object is - * {@link Mapping } - * - */ - public Mapping getMapping() { - return mapping; - } + /** + * + * specifies a series of aligned codons from an associated DNA sequence + * alignment that when translated correspond to columns of a peptide + * alignment. Element may have either all pos1,2,3 attributes specified, or + * none at all (indicating a gapped column with no translated peptide). + * + * + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <attribute name="pos1" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *       <attribute name="pos2" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *       <attribute name="pos3" type="{http://www.w3.org/2001/XMLSchema}integer" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Alcodon + { - /** - * Sets the value of the mapping property. - * - * @param value - * allowed object is - * {@link Mapping } - * - */ - public void setMapping(Mapping value) { - this.mapping = value; - } + @XmlAttribute(name = "pos1") + protected BigInteger pos1; - /** - * Gets the value of the dnasq property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDnasq() { - return dnasq; - } + @XmlAttribute(name = "pos2") + protected BigInteger pos2; - /** - * Sets the value of the dnasq property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDnasq(String value) { - this.dnasq = value; - } + @XmlAttribute(name = "pos3") + protected BigInteger pos3; + /** + * Gets the value of the pos1 property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getPos1() + { + return pos1; } - /** + * Sets the value of the pos1 property. * - * specifies a series of aligned codons from an associated DNA sequence alignment that when translated correspond to columns of a peptide alignment. - * Element may have either all pos1,2,3 attributes specified, or none at all (indicating a gapped column with no translated peptide). - * + * @param value + * allowed object is {@link BigInteger } * - *

Java class for anonymous complex type. + */ + public void setPos1(BigInteger value) + { + this.pos1 = value; + } + + /** + * Gets the value of the pos2 property. * - *

The following schema fragment specifies the expected content contained within this class. + * @return possible object is {@link BigInteger } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="pos1" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *       <attribute name="pos2" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *       <attribute name="pos3" type="{http://www.w3.org/2001/XMLSchema}integer" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public BigInteger getPos2() + { + return pos2; + } + + /** + * Sets the value of the pos2 property. * + * @param value + * allowed object is {@link BigInteger } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Alcodon { - - @XmlAttribute(name = "pos1") - protected BigInteger pos1; - @XmlAttribute(name = "pos2") - protected BigInteger pos2; - @XmlAttribute(name = "pos3") - protected BigInteger pos3; - - /** - * Gets the value of the pos1 property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPos1() { - return pos1; - } - - /** - * Sets the value of the pos1 property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPos1(BigInteger value) { - this.pos1 = value; - } - - /** - * Gets the value of the pos2 property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPos2() { - return pos2; - } - - /** - * Sets the value of the pos2 property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPos2(BigInteger value) { - this.pos2 = value; - } - - /** - * Gets the value of the pos3 property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPos3() { - return pos3; - } + public void setPos2(BigInteger value) + { + this.pos2 = value; + } - /** - * Sets the value of the pos3 property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPos3(BigInteger value) { - this.pos3 = value; - } + /** + * Gets the value of the pos3 property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getPos3() + { + return pos3; + } + /** + * Sets the value of the pos3 property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setPos3(BigInteger value) + { + this.pos3 = value; } + } + } diff --git a/src/jalview/xml/binding/jalview/Annotation.java b/src/jalview/xml/binding/jalview/Annotation.java index 8d99141..2feda64 100644 --- a/src/jalview/xml/binding/jalview/Annotation.java +++ b/src/jalview/xml/binding/jalview/Annotation.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import java.util.ArrayList; @@ -17,11 +16,13 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType>
@@ -70,733 +71,755 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
-    "annotationElement",
-    "label",
-    "description",
-    "thresholdLine",
-    "contactmatrix",
-    "property"
-})
+@XmlType(
+  name = "",
+  propOrder =
+  { "annotationElement", "label", "description", "thresholdLine",
+      "contactmatrix", "property" })
 @XmlRootElement(name = "Annotation")
-public class Annotation {
-
-    protected List annotationElement;
-    @XmlElement(required = true)
-    protected String label;
-    protected String description;
-    protected Annotation.ThresholdLine thresholdLine;
-    protected List contactmatrix;
-    protected List property;
-    @XmlAttribute(name = "graph", required = true)
-    protected boolean graph;
-    @XmlAttribute(name = "graphType")
-    protected Integer graphType;
-    @XmlAttribute(name = "sequenceRef")
-    protected String sequenceRef;
-    @XmlAttribute(name = "groupRef")
-    protected String groupRef;
-    @XmlAttribute(name = "graphColour")
-    protected Integer graphColour;
-    @XmlAttribute(name = "graphGroup")
-    protected Integer graphGroup;
-    @XmlAttribute(name = "graphHeight")
-    protected Integer graphHeight;
-    @XmlAttribute(name = "id")
-    protected String id;
-    @XmlAttribute(name = "scoreOnly")
-    protected Boolean scoreOnly;
-    @XmlAttribute(name = "score")
-    protected Double score;
-    @XmlAttribute(name = "visible")
-    protected Boolean visible;
-    @XmlAttribute(name = "centreColLabels")
-    protected Boolean centreColLabels;
-    @XmlAttribute(name = "scaleColLabels")
-    protected Boolean scaleColLabels;
-    @XmlAttribute(name = "showAllColLabels")
-    protected Boolean showAllColLabels;
-    @XmlAttribute(name = "autoCalculated")
-    protected Boolean autoCalculated;
-    @XmlAttribute(name = "belowAlignment")
-    protected Boolean belowAlignment;
-    @XmlAttribute(name = "calcId")
-    protected String calcId;
-
-    /**
-     * Gets the value of the annotationElement property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the annotationElement property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAnnotationElement().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link AnnotationElement } - * - * - */ - public List getAnnotationElement() { - if (annotationElement == null) { - annotationElement = new ArrayList(); - } - return this.annotationElement; - } - - /** - * Gets the value of the label property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getLabel() { - return label; - } - - /** - * Sets the value of the label property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setLabel(String value) { - this.label = value; - } - - /** - * Gets the value of the description property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDescription() { - return description; - } - - /** - * Sets the value of the description property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDescription(String value) { - this.description = value; - } - - /** - * Gets the value of the thresholdLine property. - * - * @return - * possible object is - * {@link Annotation.ThresholdLine } - * - */ - public Annotation.ThresholdLine getThresholdLine() { - return thresholdLine; - } - - /** - * Sets the value of the thresholdLine property. - * - * @param value - * allowed object is - * {@link Annotation.ThresholdLine } - * - */ - public void setThresholdLine(Annotation.ThresholdLine value) { - this.thresholdLine = value; - } - - /** - * Gets the value of the contactmatrix property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the contactmatrix property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getContactmatrix().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link MatrixType } - * - * - */ - public List getContactmatrix() { - if (contactmatrix == null) { - contactmatrix = new ArrayList(); - } - return this.contactmatrix; - } - - /** - * Gets the value of the property property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the property property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getProperty().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Property } - * - * - */ - public List getProperty() { - if (property == null) { - property = new ArrayList(); - } - return this.property; - } - - /** - * Gets the value of the graph property. - * - */ - public boolean isGraph() { - return graph; - } - - /** - * Sets the value of the graph property. - * - */ - public void setGraph(boolean value) { - this.graph = value; - } - - /** - * Gets the value of the graphType property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getGraphType() { - return graphType; - } +public class Annotation +{ - /** - * Sets the value of the graphType property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setGraphType(Integer value) { - this.graphType = value; - } - - /** - * Gets the value of the sequenceRef property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSequenceRef() { - return sequenceRef; - } - - /** - * Sets the value of the sequenceRef property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSequenceRef(String value) { - this.sequenceRef = value; - } - - /** - * Gets the value of the groupRef property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getGroupRef() { - return groupRef; - } + protected List annotationElement; - /** - * Sets the value of the groupRef property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setGroupRef(String value) { - this.groupRef = value; - } + @XmlElement(required = true) + protected String label; + + protected String description; - /** - * Gets the value of the graphColour property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getGraphColour() { - return graphColour; - } - - /** - * Sets the value of the graphColour property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setGraphColour(Integer value) { - this.graphColour = value; - } - - /** - * Gets the value of the graphGroup property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getGraphGroup() { - return graphGroup; - } - - /** - * Sets the value of the graphGroup property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setGraphGroup(Integer value) { - this.graphGroup = value; - } - - /** - * Gets the value of the graphHeight property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getGraphHeight() { - return graphHeight; - } - - /** - * Sets the value of the graphHeight property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setGraphHeight(Integer value) { - this.graphHeight = value; - } - - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } - - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; - } - - /** - * Gets the value of the scoreOnly property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isScoreOnly() { - if (scoreOnly == null) { - return false; - } else { - return scoreOnly; - } - } - - /** - * Sets the value of the scoreOnly property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setScoreOnly(Boolean value) { - this.scoreOnly = value; - } - - /** - * Gets the value of the score property. - * - * @return - * possible object is - * {@link Double } - * - */ - public Double getScore() { - return score; - } + protected Annotation.ThresholdLine thresholdLine; + + protected List contactmatrix; + + protected List property; + + @XmlAttribute(name = "graph", required = true) + protected boolean graph; + + @XmlAttribute(name = "graphType") + protected Integer graphType; + + @XmlAttribute(name = "sequenceRef") + protected String sequenceRef; + + @XmlAttribute(name = "groupRef") + protected String groupRef; + + @XmlAttribute(name = "graphColour") + protected Integer graphColour; + + @XmlAttribute(name = "graphGroup") + protected Integer graphGroup; + + @XmlAttribute(name = "graphHeight") + protected Integer graphHeight; + + @XmlAttribute(name = "id") + protected String id; + + @XmlAttribute(name = "scoreOnly") + protected Boolean scoreOnly; + + @XmlAttribute(name = "score") + protected Double score; + + @XmlAttribute(name = "visible") + protected Boolean visible; + + @XmlAttribute(name = "centreColLabels") + protected Boolean centreColLabels; + + @XmlAttribute(name = "scaleColLabels") + protected Boolean scaleColLabels; + + @XmlAttribute(name = "showAllColLabels") + protected Boolean showAllColLabels; + + @XmlAttribute(name = "autoCalculated") + protected Boolean autoCalculated; + + @XmlAttribute(name = "belowAlignment") + protected Boolean belowAlignment; + + @XmlAttribute(name = "calcId") + protected String calcId; + + /** + * Gets the value of the annotationElement property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the annotationElement property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getAnnotationElement().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link AnnotationElement } + * + * + */ + public List getAnnotationElement() + { + if (annotationElement == null) + { + annotationElement = new ArrayList(); + } + return this.annotationElement; + } + + /** + * Gets the value of the label property. + * + * @return possible object is {@link String } + * + */ + public String getLabel() + { + return label; + } + + /** + * Sets the value of the label property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setLabel(String value) + { + this.label = value; + } + + /** + * Gets the value of the description property. + * + * @return possible object is {@link String } + * + */ + public String getDescription() + { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDescription(String value) + { + this.description = value; + } + + /** + * Gets the value of the thresholdLine property. + * + * @return possible object is {@link Annotation.ThresholdLine } + * + */ + public Annotation.ThresholdLine getThresholdLine() + { + return thresholdLine; + } + + /** + * Sets the value of the thresholdLine property. + * + * @param value + * allowed object is {@link Annotation.ThresholdLine } + * + */ + public void setThresholdLine(Annotation.ThresholdLine value) + { + this.thresholdLine = value; + } + + /** + * Gets the value of the contactmatrix property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the contactmatrix property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getContactmatrix().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link MatrixType + * } + * + * + */ + public List getContactmatrix() + { + if (contactmatrix == null) + { + contactmatrix = new ArrayList(); + } + return this.contactmatrix; + } + + /** + * Gets the value of the property property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the property property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getProperty().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Property } + * + * + */ + public List getProperty() + { + if (property == null) + { + property = new ArrayList(); + } + return this.property; + } + + /** + * Gets the value of the graph property. + * + */ + public boolean isGraph() + { + return graph; + } + + /** + * Sets the value of the graph property. + * + */ + public void setGraph(boolean value) + { + this.graph = value; + } + + /** + * Gets the value of the graphType property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getGraphType() + { + return graphType; + } + + /** + * Sets the value of the graphType property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setGraphType(Integer value) + { + this.graphType = value; + } + + /** + * Gets the value of the sequenceRef property. + * + * @return possible object is {@link String } + * + */ + public String getSequenceRef() + { + return sequenceRef; + } + + /** + * Sets the value of the sequenceRef property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setSequenceRef(String value) + { + this.sequenceRef = value; + } + + /** + * Gets the value of the groupRef property. + * + * @return possible object is {@link String } + * + */ + public String getGroupRef() + { + return groupRef; + } + + /** + * Sets the value of the groupRef property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setGroupRef(String value) + { + this.groupRef = value; + } + + /** + * Gets the value of the graphColour property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getGraphColour() + { + return graphColour; + } + + /** + * Sets the value of the graphColour property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setGraphColour(Integer value) + { + this.graphColour = value; + } + + /** + * Gets the value of the graphGroup property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getGraphGroup() + { + return graphGroup; + } + + /** + * Sets the value of the graphGroup property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setGraphGroup(Integer value) + { + this.graphGroup = value; + } + + /** + * Gets the value of the graphHeight property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getGraphHeight() + { + return graphHeight; + } + + /** + * Sets the value of the graphHeight property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setGraphHeight(Integer value) + { + this.graphHeight = value; + } + + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } + + /** + * Gets the value of the scoreOnly property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isScoreOnly() + { + if (scoreOnly == null) + { + return false; + } + else + { + return scoreOnly; + } + } + + /** + * Sets the value of the scoreOnly property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setScoreOnly(Boolean value) + { + this.scoreOnly = value; + } + + /** + * Gets the value of the score property. + * + * @return possible object is {@link Double } + * + */ + public Double getScore() + { + return score; + } + + /** + * Sets the value of the score property. + * + * @param value + * allowed object is {@link Double } + * + */ + public void setScore(Double value) + { + this.score = value; + } + + /** + * Gets the value of the visible property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isVisible() + { + return visible; + } + + /** + * Sets the value of the visible property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setVisible(Boolean value) + { + this.visible = value; + } + + /** + * Gets the value of the centreColLabels property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isCentreColLabels() + { + return centreColLabels; + } + + /** + * Sets the value of the centreColLabels property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setCentreColLabels(Boolean value) + { + this.centreColLabels = value; + } + + /** + * Gets the value of the scaleColLabels property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isScaleColLabels() + { + return scaleColLabels; + } + + /** + * Sets the value of the scaleColLabels property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setScaleColLabels(Boolean value) + { + this.scaleColLabels = value; + } + + /** + * Gets the value of the showAllColLabels property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowAllColLabels() + { + return showAllColLabels; + } + + /** + * Sets the value of the showAllColLabels property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowAllColLabels(Boolean value) + { + this.showAllColLabels = value; + } + + /** + * Gets the value of the autoCalculated property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isAutoCalculated() + { + if (autoCalculated == null) + { + return false; + } + else + { + return autoCalculated; + } + } + + /** + * Sets the value of the autoCalculated property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setAutoCalculated(Boolean value) + { + this.autoCalculated = value; + } + + /** + * Gets the value of the belowAlignment property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isBelowAlignment() + { + if (belowAlignment == null) + { + return true; + } + else + { + return belowAlignment; + } + } + + /** + * Sets the value of the belowAlignment property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setBelowAlignment(Boolean value) + { + this.belowAlignment = value; + } + + /** + * Gets the value of the calcId property. + * + * @return possible object is {@link String } + * + */ + public String getCalcId() + { + return calcId; + } + + /** + * Sets the value of the calcId property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setCalcId(String value) + { + this.calcId = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <attribute name="label" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="value" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *       <attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class ThresholdLine + { + + @XmlAttribute(name = "label") + protected String label; - /** - * Sets the value of the score property. - * - * @param value - * allowed object is - * {@link Double } - * - */ - public void setScore(Double value) { - this.score = value; - } + @XmlAttribute(name = "value") + protected Float value; - /** - * Gets the value of the visible property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isVisible() { - return visible; - } + @XmlAttribute(name = "colour") + protected Integer colour; /** - * Sets the value of the visible property. + * Gets the value of the label property. * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setVisible(Boolean value) { - this.visible = value; - } - - /** - * Gets the value of the centreColLabels property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link Boolean } - * */ - public Boolean isCentreColLabels() { - return centreColLabels; + public String getLabel() + { + return label; } /** - * Sets the value of the centreColLabels property. + * Sets the value of the label property. * * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setCentreColLabels(Boolean value) { - this.centreColLabels = value; - } - - /** - * Gets the value of the scaleColLabels property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link Boolean } - * */ - public Boolean isScaleColLabels() { - return scaleColLabels; + public void setLabel(String value) + { + this.label = value; } /** - * Sets the value of the scaleColLabels property. + * Gets the value of the value property. * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setScaleColLabels(Boolean value) { - this.scaleColLabels = value; - } - - /** - * Gets the value of the showAllColLabels property. + * @return possible object is {@link Float } * - * @return - * possible object is - * {@link Boolean } - * */ - public Boolean isShowAllColLabels() { - return showAllColLabels; + public Float getValue() + { + return value; } /** - * Sets the value of the showAllColLabels property. + * Sets the value of the value property. * * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowAllColLabels(Boolean value) { - this.showAllColLabels = value; - } - - /** - * Gets the value of the autoCalculated property. + * allowed object is {@link Float } * - * @return - * possible object is - * {@link Boolean } - * */ - public boolean isAutoCalculated() { - if (autoCalculated == null) { - return false; - } else { - return autoCalculated; - } + public void setValue(Float value) + { + this.value = value; } /** - * Sets the value of the autoCalculated property. + * Gets the value of the colour property. * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setAutoCalculated(Boolean value) { - this.autoCalculated = value; - } - - /** - * Gets the value of the belowAlignment property. + * @return possible object is {@link Integer } * - * @return - * possible object is - * {@link Boolean } - * */ - public boolean isBelowAlignment() { - if (belowAlignment == null) { - return true; - } else { - return belowAlignment; - } + public Integer getColour() + { + return colour; } /** - * Sets the value of the belowAlignment property. + * Sets the value of the colour property. * * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setBelowAlignment(Boolean value) { - this.belowAlignment = value; - } - - /** - * Gets the value of the calcId property. + * allowed object is {@link Integer } * - * @return - * possible object is - * {@link String } - * */ - public String getCalcId() { - return calcId; + public void setColour(Integer value) + { + this.colour = value; } - /** - * Sets the value of the calcId property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCalcId(String value) { - this.calcId = value; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="label" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="value" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *       <attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class ThresholdLine { - - @XmlAttribute(name = "label") - protected String label; - @XmlAttribute(name = "value") - protected Float value; - @XmlAttribute(name = "colour") - protected Integer colour; - - /** - * Gets the value of the label property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getLabel() { - return label; - } - - /** - * Sets the value of the label property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setLabel(String value) { - this.label = value; - } - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setValue(Float value) { - this.value = value; - } - - /** - * Gets the value of the colour property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getColour() { - return colour; - } - - /** - * Sets the value of the colour property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setColour(Integer value) { - this.colour = value; - } - - } + } } diff --git a/src/jalview/xml/binding/jalview/AnnotationColourScheme.java b/src/jalview/xml/binding/jalview/AnnotationColourScheme.java index 27e0cc6..c820076 100644 --- a/src/jalview/xml/binding/jalview/AnnotationColourScheme.java +++ b/src/jalview/xml/binding/jalview/AnnotationColourScheme.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import javax.xml.bind.annotation.XmlAccessType; @@ -13,11 +12,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for AnnotationColourScheme complex type. + *

+ * Java class for AnnotationColourScheme complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="AnnotationColourScheme">
@@ -40,215 +41,215 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "AnnotationColourScheme", namespace = "www.jalview.org")
-public class AnnotationColourScheme {
-
-    @XmlAttribute(name = "aboveThreshold")
-    protected Integer aboveThreshold;
-    @XmlAttribute(name = "annotation")
-    protected String annotation;
-    @XmlAttribute(name = "minColour")
-    protected Integer minColour;
-    @XmlAttribute(name = "maxColour")
-    protected Integer maxColour;
-    @XmlAttribute(name = "colourScheme")
-    protected String colourScheme;
-    @XmlAttribute(name = "threshold")
-    protected Float threshold;
-    @XmlAttribute(name = "perSequence")
-    protected Boolean perSequence;
-    @XmlAttribute(name = "predefinedColours")
-    protected Boolean predefinedColours;
-
-    /**
-     * Gets the value of the aboveThreshold property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Integer }
-     *     
-     */
-    public Integer getAboveThreshold() {
-        return aboveThreshold;
-    }
-
-    /**
-     * Sets the value of the aboveThreshold property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Integer }
-     *     
-     */
-    public void setAboveThreshold(Integer value) {
-        this.aboveThreshold = value;
-    }
-
-    /**
-     * Gets the value of the annotation property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getAnnotation() {
-        return annotation;
-    }
-
-    /**
-     * Sets the value of the annotation property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setAnnotation(String value) {
-        this.annotation = value;
-    }
-
-    /**
-     * Gets the value of the minColour property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Integer }
-     *     
-     */
-    public Integer getMinColour() {
-        return minColour;
-    }
-
-    /**
-     * Sets the value of the minColour property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Integer }
-     *     
-     */
-    public void setMinColour(Integer value) {
-        this.minColour = value;
-    }
-
-    /**
-     * Gets the value of the maxColour property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Integer }
-     *     
-     */
-    public Integer getMaxColour() {
-        return maxColour;
-    }
-
-    /**
-     * Sets the value of the maxColour property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Integer }
-     *     
-     */
-    public void setMaxColour(Integer value) {
-        this.maxColour = value;
-    }
-
-    /**
-     * Gets the value of the colourScheme property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getColourScheme() {
-        return colourScheme;
-    }
-
-    /**
-     * Sets the value of the colourScheme property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setColourScheme(String value) {
-        this.colourScheme = value;
-    }
-
-    /**
-     * Gets the value of the threshold property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Float }
-     *     
-     */
-    public Float getThreshold() {
-        return threshold;
-    }
-
-    /**
-     * Sets the value of the threshold property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Float }
-     *     
-     */
-    public void setThreshold(Float value) {
-        this.threshold = value;
-    }
-
-    /**
-     * Gets the value of the perSequence property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Boolean }
-     *     
-     */
-    public Boolean isPerSequence() {
-        return perSequence;
-    }
-
-    /**
-     * Sets the value of the perSequence property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Boolean }
-     *     
-     */
-    public void setPerSequence(Boolean value) {
-        this.perSequence = value;
-    }
-
-    /**
-     * Gets the value of the predefinedColours property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Boolean }
-     *     
-     */
-    public Boolean isPredefinedColours() {
-        return predefinedColours;
-    }
-
-    /**
-     * Sets the value of the predefinedColours property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Boolean }
-     *     
-     */
-    public void setPredefinedColours(Boolean value) {
-        this.predefinedColours = value;
-    }
+public class AnnotationColourScheme
+{
+
+  @XmlAttribute(name = "aboveThreshold")
+  protected Integer aboveThreshold;
+
+  @XmlAttribute(name = "annotation")
+  protected String annotation;
+
+  @XmlAttribute(name = "minColour")
+  protected Integer minColour;
+
+  @XmlAttribute(name = "maxColour")
+  protected Integer maxColour;
+
+  @XmlAttribute(name = "colourScheme")
+  protected String colourScheme;
+
+  @XmlAttribute(name = "threshold")
+  protected Float threshold;
+
+  @XmlAttribute(name = "perSequence")
+  protected Boolean perSequence;
+
+  @XmlAttribute(name = "predefinedColours")
+  protected Boolean predefinedColours;
+
+  /**
+   * Gets the value of the aboveThreshold property.
+   * 
+   * @return possible object is {@link Integer }
+   * 
+   */
+  public Integer getAboveThreshold()
+  {
+    return aboveThreshold;
+  }
+
+  /**
+   * Sets the value of the aboveThreshold property.
+   * 
+   * @param value
+   *          allowed object is {@link Integer }
+   * 
+   */
+  public void setAboveThreshold(Integer value)
+  {
+    this.aboveThreshold = value;
+  }
+
+  /**
+   * Gets the value of the annotation property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getAnnotation()
+  {
+    return annotation;
+  }
+
+  /**
+   * Sets the value of the annotation property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setAnnotation(String value)
+  {
+    this.annotation = value;
+  }
+
+  /**
+   * Gets the value of the minColour property.
+   * 
+   * @return possible object is {@link Integer }
+   * 
+   */
+  public Integer getMinColour()
+  {
+    return minColour;
+  }
+
+  /**
+   * Sets the value of the minColour property.
+   * 
+   * @param value
+   *          allowed object is {@link Integer }
+   * 
+   */
+  public void setMinColour(Integer value)
+  {
+    this.minColour = value;
+  }
+
+  /**
+   * Gets the value of the maxColour property.
+   * 
+   * @return possible object is {@link Integer }
+   * 
+   */
+  public Integer getMaxColour()
+  {
+    return maxColour;
+  }
+
+  /**
+   * Sets the value of the maxColour property.
+   * 
+   * @param value
+   *          allowed object is {@link Integer }
+   * 
+   */
+  public void setMaxColour(Integer value)
+  {
+    this.maxColour = value;
+  }
+
+  /**
+   * Gets the value of the colourScheme property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getColourScheme()
+  {
+    return colourScheme;
+  }
+
+  /**
+   * Sets the value of the colourScheme property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setColourScheme(String value)
+  {
+    this.colourScheme = value;
+  }
+
+  /**
+   * Gets the value of the threshold property.
+   * 
+   * @return possible object is {@link Float }
+   * 
+   */
+  public Float getThreshold()
+  {
+    return threshold;
+  }
+
+  /**
+   * Sets the value of the threshold property.
+   * 
+   * @param value
+   *          allowed object is {@link Float }
+   * 
+   */
+  public void setThreshold(Float value)
+  {
+    this.threshold = value;
+  }
+
+  /**
+   * Gets the value of the perSequence property.
+   * 
+   * @return possible object is {@link Boolean }
+   * 
+   */
+  public Boolean isPerSequence()
+  {
+    return perSequence;
+  }
+
+  /**
+   * Sets the value of the perSequence property.
+   * 
+   * @param value
+   *          allowed object is {@link Boolean }
+   * 
+   */
+  public void setPerSequence(Boolean value)
+  {
+    this.perSequence = value;
+  }
+
+  /**
+   * Gets the value of the predefinedColours property.
+   * 
+   * @return possible object is {@link Boolean }
+   * 
+   */
+  public Boolean isPredefinedColours()
+  {
+    return predefinedColours;
+  }
+
+  /**
+   * Sets the value of the predefinedColours property.
+   * 
+   * @param value
+   *          allowed object is {@link Boolean }
+   * 
+   */
+  public void setPredefinedColours(Boolean value)
+  {
+    this.predefinedColours = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/AnnotationElement.java b/src/jalview/xml/binding/jalview/AnnotationElement.java
index c5f75e0..087667a 100644
--- a/src/jalview/xml/binding/jalview/AnnotationElement.java
+++ b/src/jalview/xml/binding/jalview/AnnotationElement.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
-
 package jalview.xml.binding.jalview;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -14,11 +13,13 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * 

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType>
@@ -46,158 +47,159 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
-    "displayCharacter",
-    "description",
-    "secondaryStructure",
-    "value"
-})
+@XmlType(
+  name = "",
+  propOrder =
+  { "displayCharacter", "description", "secondaryStructure", "value" })
 @XmlRootElement(name = "annotationElement")
-public class AnnotationElement {
-
-    protected String displayCharacter;
-    protected String description;
-    protected String secondaryStructure;
-    protected Float value;
-    @XmlAttribute(name = "position", required = true)
-    protected int position;
-    @XmlAttribute(name = "colour")
-    protected Integer colour;
-
-    /**
-     * Gets the value of the displayCharacter property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getDisplayCharacter() {
-        return displayCharacter;
-    }
-
-    /**
-     * Sets the value of the displayCharacter property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setDisplayCharacter(String value) {
-        this.displayCharacter = value;
-    }
-
-    /**
-     * Gets the value of the description property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Sets the value of the description property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setDescription(String value) {
-        this.description = value;
-    }
-
-    /**
-     * Gets the value of the secondaryStructure property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getSecondaryStructure() {
-        return secondaryStructure;
-    }
-
-    /**
-     * Sets the value of the secondaryStructure property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setSecondaryStructure(String value) {
-        this.secondaryStructure = value;
-    }
-
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Float }
-     *     
-     */
-    public Float getValue() {
-        return value;
-    }
-
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Float }
-     *     
-     */
-    public void setValue(Float value) {
-        this.value = value;
-    }
-
-    /**
-     * Gets the value of the position property.
-     * 
-     */
-    public int getPosition() {
-        return position;
-    }
-
-    /**
-     * Sets the value of the position property.
-     * 
-     */
-    public void setPosition(int value) {
-        this.position = value;
-    }
-
-    /**
-     * Gets the value of the colour property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Integer }
-     *     
-     */
-    public Integer getColour() {
-        return colour;
-    }
-
-    /**
-     * Sets the value of the colour property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Integer }
-     *     
-     */
-    public void setColour(Integer value) {
-        this.colour = value;
-    }
+public class AnnotationElement
+{
+
+  protected String displayCharacter;
+
+  protected String description;
+
+  protected String secondaryStructure;
+
+  protected Float value;
+
+  @XmlAttribute(name = "position", required = true)
+  protected int position;
+
+  @XmlAttribute(name = "colour")
+  protected Integer colour;
+
+  /**
+   * Gets the value of the displayCharacter property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getDisplayCharacter()
+  {
+    return displayCharacter;
+  }
+
+  /**
+   * Sets the value of the displayCharacter property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setDisplayCharacter(String value)
+  {
+    this.displayCharacter = value;
+  }
+
+  /**
+   * Gets the value of the description property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getDescription()
+  {
+    return description;
+  }
+
+  /**
+   * Sets the value of the description property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setDescription(String value)
+  {
+    this.description = value;
+  }
+
+  /**
+   * Gets the value of the secondaryStructure property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getSecondaryStructure()
+  {
+    return secondaryStructure;
+  }
+
+  /**
+   * Sets the value of the secondaryStructure property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setSecondaryStructure(String value)
+  {
+    this.secondaryStructure = value;
+  }
+
+  /**
+   * Gets the value of the value property.
+   * 
+   * @return possible object is {@link Float }
+   * 
+   */
+  public Float getValue()
+  {
+    return value;
+  }
+
+  /**
+   * Sets the value of the value property.
+   * 
+   * @param value
+   *          allowed object is {@link Float }
+   * 
+   */
+  public void setValue(Float value)
+  {
+    this.value = value;
+  }
+
+  /**
+   * Gets the value of the position property.
+   * 
+   */
+  public int getPosition()
+  {
+    return position;
+  }
+
+  /**
+   * Sets the value of the position property.
+   * 
+   */
+  public void setPosition(int value)
+  {
+    this.position = value;
+  }
+
+  /**
+   * Gets the value of the colour property.
+   * 
+   * @return possible object is {@link Integer }
+   * 
+   */
+  public Integer getColour()
+  {
+    return colour;
+  }
+
+  /**
+   * Sets the value of the colour property.
+   * 
+   * @param value
+   *          allowed object is {@link Integer }
+   * 
+   */
+  public void setColour(Integer value)
+  {
+    this.colour = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/DoubleMatrix.java b/src/jalview/xml/binding/jalview/DoubleMatrix.java
index 9be9876..b42a170 100644
--- a/src/jalview/xml/binding/jalview/DoubleMatrix.java
+++ b/src/jalview/xml/binding/jalview/DoubleMatrix.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
-
 package jalview.xml.binding.jalview;
 
 import java.util.ArrayList;
@@ -16,11 +15,13 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * 

Java class for DoubleMatrix complex type. + *

+ * Java class for DoubleMatrix complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="DoubleMatrix">
@@ -41,146 +42,150 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "DoubleMatrix", namespace = "www.jalview.org", propOrder = {
-    "row",
-    "d",
-    "e"
-})
-public class DoubleMatrix {
-
-    protected List row;
-    @XmlElement(name = "D")
-    protected DoubleVector d;
-    @XmlElement(name = "E")
-    protected DoubleVector e;
-    @XmlAttribute(name = "rows")
-    protected Integer rows;
-    @XmlAttribute(name = "columns")
-    protected Integer columns;
-
-    /**
-     * Gets the value of the row property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the row property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getRow().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link DoubleVector } - * - * - */ - public List getRow() { - if (row == null) { - row = new ArrayList(); - } - return this.row; - } - - /** - * Gets the value of the d property. - * - * @return - * possible object is - * {@link DoubleVector } - * - */ - public DoubleVector getD() { - return d; - } - - /** - * Sets the value of the d property. - * - * @param value - * allowed object is - * {@link DoubleVector } - * - */ - public void setD(DoubleVector value) { - this.d = value; - } - - /** - * Gets the value of the e property. - * - * @return - * possible object is - * {@link DoubleVector } - * - */ - public DoubleVector getE() { - return e; - } - - /** - * Sets the value of the e property. - * - * @param value - * allowed object is - * {@link DoubleVector } - * - */ - public void setE(DoubleVector value) { - this.e = value; - } - - /** - * Gets the value of the rows property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getRows() { - return rows; - } - - /** - * Sets the value of the rows property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setRows(Integer value) { - this.rows = value; - } - - /** - * Gets the value of the columns property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getColumns() { - return columns; - } - - /** - * Sets the value of the columns property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setColumns(Integer value) { - this.columns = value; +@XmlType( + name = "DoubleMatrix", + namespace = "www.jalview.org", + propOrder = + { "row", "d", "e" }) +public class DoubleMatrix +{ + + protected List row; + + @XmlElement(name = "D") + protected DoubleVector d; + + @XmlElement(name = "E") + protected DoubleVector e; + + @XmlAttribute(name = "rows") + protected Integer rows; + + @XmlAttribute(name = "columns") + protected Integer columns; + + /** + * Gets the value of the row property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the row property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getRow().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link DoubleVector } + * + * + */ + public List getRow() + { + if (row == null) + { + row = new ArrayList(); } + return this.row; + } + + /** + * Gets the value of the d property. + * + * @return possible object is {@link DoubleVector } + * + */ + public DoubleVector getD() + { + return d; + } + + /** + * Sets the value of the d property. + * + * @param value + * allowed object is {@link DoubleVector } + * + */ + public void setD(DoubleVector value) + { + this.d = value; + } + + /** + * Gets the value of the e property. + * + * @return possible object is {@link DoubleVector } + * + */ + public DoubleVector getE() + { + return e; + } + + /** + * Sets the value of the e property. + * + * @param value + * allowed object is {@link DoubleVector } + * + */ + public void setE(DoubleVector value) + { + this.e = value; + } + + /** + * Gets the value of the rows property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getRows() + { + return rows; + } + + /** + * Sets the value of the rows property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setRows(Integer value) + { + this.rows = value; + } + + /** + * Gets the value of the columns property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getColumns() + { + return columns; + } + + /** + * Sets the value of the columns property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setColumns(Integer value) + { + this.columns = value; + } } diff --git a/src/jalview/xml/binding/jalview/DoubleVector.java b/src/jalview/xml/binding/jalview/DoubleVector.java index 6546be9..3b449fe 100644 --- a/src/jalview/xml/binding/jalview/DoubleVector.java +++ b/src/jalview/xml/binding/jalview/DoubleVector.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import java.util.ArrayList; @@ -15,11 +14,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for DoubleVector complex type. + *

+ * Java class for DoubleVector complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="DoubleVector">
@@ -36,41 +37,46 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "DoubleVector", namespace = "www.jalview.org", propOrder = {
-    "v"
-})
-public class DoubleVector {
+@XmlType(
+  name = "DoubleVector",
+  namespace = "www.jalview.org",
+  propOrder =
+  { "v" })
+public class DoubleVector
+{
 
-    @XmlElement(type = Double.class)
-    protected List v;
+  @XmlElement(type = Double.class)
+  protected List v;
 
-    /**
-     * Gets the value of the v property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the v property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getV().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Double } - * - * - */ - public List getV() { - if (v == null) { - v = new ArrayList(); - } - return this.v; + /** + * Gets the value of the v property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the v property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getV().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Double } + * + * + */ + public List getV() + { + if (v == null) + { + v = new ArrayList(); } + return this.v; + } } diff --git a/src/jalview/xml/binding/jalview/Feature.java b/src/jalview/xml/binding/jalview/Feature.java index a124e62..afedb4c 100644 --- a/src/jalview/xml/binding/jalview/Feature.java +++ b/src/jalview/xml/binding/jalview/Feature.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import java.util.ArrayList; @@ -15,11 +14,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for feature complex type. + *

+ * Java class for feature complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="feature">
@@ -53,311 +54,325 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "feature", namespace = "www.jalview.org", propOrder = {
-    "otherData"
-})
-public class Feature {
-
-    protected List otherData;
-    @XmlAttribute(name = "begin", required = true)
-    protected int begin;
-    @XmlAttribute(name = "end", required = true)
-    protected int end;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
-    @XmlAttribute(name = "description")
-    protected String description;
-    @XmlAttribute(name = "status")
-    protected String status;
-    @XmlAttribute(name = "featureGroup")
-    protected String featureGroup;
-    @XmlAttribute(name = "score")
-    protected Float score;
-
-    /**
-     * Gets the value of the otherData property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the otherData property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getOtherData().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Feature.OtherData } - * - * - */ - public List getOtherData() { - if (otherData == null) { - otherData = new ArrayList(); - } - return this.otherData; +@XmlType( + name = "feature", + namespace = "www.jalview.org", + propOrder = + { "otherData" }) +public class Feature +{ + + protected List otherData; + + @XmlAttribute(name = "begin", required = true) + protected int begin; + + @XmlAttribute(name = "end", required = true) + protected int end; + + @XmlAttribute(name = "type", required = true) + protected String type; + + @XmlAttribute(name = "description") + protected String description; + + @XmlAttribute(name = "status") + protected String status; + + @XmlAttribute(name = "featureGroup") + protected String featureGroup; + + @XmlAttribute(name = "score") + protected Float score; + + /** + * Gets the value of the otherData property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the otherData property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getOtherData().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Feature.OtherData } + * + * + */ + public List getOtherData() + { + if (otherData == null) + { + otherData = new ArrayList(); } + return this.otherData; + } + + /** + * Gets the value of the begin property. + * + */ + public int getBegin() + { + return begin; + } + + /** + * Sets the value of the begin property. + * + */ + public void setBegin(int value) + { + this.begin = value; + } + + /** + * Gets the value of the end property. + * + */ + public int getEnd() + { + return end; + } + + /** + * Sets the value of the end property. + * + */ + public void setEnd(int value) + { + this.end = value; + } + + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } + + /** + * Gets the value of the description property. + * + * @return possible object is {@link String } + * + */ + public String getDescription() + { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDescription(String value) + { + this.description = value; + } + + /** + * Gets the value of the status property. + * + * @return possible object is {@link String } + * + */ + public String getStatus() + { + return status; + } + + /** + * Sets the value of the status property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setStatus(String value) + { + this.status = value; + } + + /** + * Gets the value of the featureGroup property. + * + * @return possible object is {@link String } + * + */ + public String getFeatureGroup() + { + return featureGroup; + } + + /** + * Sets the value of the featureGroup property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setFeatureGroup(String value) + { + this.featureGroup = value; + } + + /** + * Gets the value of the score property. + * + * @return possible object is {@link Float } + * + */ + public Float getScore() + { + return score; + } + + /** + * Sets the value of the score property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setScore(Float value) + { + this.score = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <attribute name="key" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="key2" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="value" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class OtherData + { + + @XmlAttribute(name = "key", required = true) + protected String key; + + @XmlAttribute(name = "key2") + protected String key2; + + @XmlAttribute(name = "value", required = true) + protected String value; /** - * Gets the value of the begin property. + * Gets the value of the key property. * - */ - public int getBegin() { - return begin; - } - - /** - * Sets the value of the begin property. - * - */ - public void setBegin(int value) { - this.begin = value; - } - - /** - * Gets the value of the end property. - * - */ - public int getEnd() { - return end; - } - - /** - * Sets the value of the end property. - * - */ - public void setEnd(int value) { - this.end = value; - } - - /** - * Gets the value of the type property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getType() { - return type; + public String getKey() + { + return key; } /** - * Sets the value of the type property. + * Sets the value of the key property. * * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Gets the value of the description property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getDescription() { - return description; + public void setKey(String value) + { + this.key = value; } /** - * Sets the value of the description property. + * Gets the value of the key2 property. * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDescription(String value) { - this.description = value; - } - - /** - * Gets the value of the status property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getStatus() { - return status; + public String getKey2() + { + return key2; } /** - * Sets the value of the status property. + * Sets the value of the key2 property. * * @param value - * allowed object is - * {@link String } - * - */ - public void setStatus(String value) { - this.status = value; - } - - /** - * Gets the value of the featureGroup property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getFeatureGroup() { - return featureGroup; + public void setKey2(String value) + { + this.key2 = value; } /** - * Sets the value of the featureGroup property. + * Gets the value of the value property. * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFeatureGroup(String value) { - this.featureGroup = value; - } - - /** - * Gets the value of the score property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link Float } - * */ - public Float getScore() { - return score; + public String getValue() + { + return value; } /** - * Sets the value of the score property. + * Sets the value of the value property. * * @param value - * allowed object is - * {@link Float } - * - */ - public void setScore(Float value) { - this.score = value; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="key" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="key2" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="value" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- * + * allowed object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class OtherData { - - @XmlAttribute(name = "key", required = true) - protected String key; - @XmlAttribute(name = "key2") - protected String key2; - @XmlAttribute(name = "value", required = true) - protected String value; - - /** - * Gets the value of the key property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getKey() { - return key; - } - - /** - * Sets the value of the key property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setKey(String value) { - this.key = value; - } - - /** - * Gets the value of the key2 property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getKey2() { - return key2; - } - - /** - * Sets the value of the key2 property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setKey2(String value) { - this.key2 = value; - } - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - + public void setValue(String value) + { + this.value = value; } + } + } diff --git a/src/jalview/xml/binding/jalview/FeatureMatcher.java b/src/jalview/xml/binding/jalview/FeatureMatcher.java index 61e66ce..fa80569 100644 --- a/src/jalview/xml/binding/jalview/FeatureMatcher.java +++ b/src/jalview/xml/binding/jalview/FeatureMatcher.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import java.util.ArrayList; @@ -16,11 +15,13 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for FeatureMatcher complex type. + *

+ * Java class for FeatureMatcher complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="FeatureMatcher">
@@ -40,121 +41,124 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "FeatureMatcher", namespace = "www.jalview.org/colours", propOrder = {
-    "attributeName",
-    "condition",
-    "value"
-})
-public class FeatureMatcher {
+@XmlType(
+  name = "FeatureMatcher",
+  namespace = "www.jalview.org/colours",
+  propOrder =
+  { "attributeName", "condition", "value" })
+public class FeatureMatcher
+{
 
-    @XmlElement(namespace = "")
-    protected List attributeName;
-    @XmlElement(namespace = "", required = true)
-    protected String condition;
-    @XmlElement(namespace = "", required = true)
-    protected String value;
-    @XmlAttribute(name = "by")
-    protected FilterBy by;
+  @XmlElement(namespace = "")
+  protected List attributeName;
 
-    /**
-     * Gets the value of the attributeName property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the attributeName property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAttributeName().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getAttributeName() { - if (attributeName == null) { - attributeName = new ArrayList(); - } - return this.attributeName; - } + @XmlElement(namespace = "", required = true) + protected String condition; - /** - * Gets the value of the condition property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCondition() { - return condition; - } + @XmlElement(namespace = "", required = true) + protected String value; - /** - * Sets the value of the condition property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCondition(String value) { - this.condition = value; - } + @XmlAttribute(name = "by") + protected FilterBy by; - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; + /** + * Gets the value of the attributeName property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the attributeName property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getAttributeName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getAttributeName() + { + if (attributeName == null) + { + attributeName = new ArrayList(); } + return this.attributeName; + } - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } + /** + * Gets the value of the condition property. + * + * @return possible object is {@link String } + * + */ + public String getCondition() + { + return condition; + } - /** - * Gets the value of the by property. - * - * @return - * possible object is - * {@link FilterBy } - * - */ - public FilterBy getBy() { - return by; - } + /** + * Sets the value of the condition property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setCondition(String value) + { + this.condition = value; + } - /** - * Sets the value of the by property. - * - * @param value - * allowed object is - * {@link FilterBy } - * - */ - public void setBy(FilterBy value) { - this.by = value; - } + /** + * Gets the value of the value property. + * + * @return possible object is {@link String } + * + */ + public String getValue() + { + return value; + } + + /** + * Sets the value of the value property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setValue(String value) + { + this.value = value; + } + + /** + * Gets the value of the by property. + * + * @return possible object is {@link FilterBy } + * + */ + public FilterBy getBy() + { + return by; + } + + /** + * Sets the value of the by property. + * + * @param value + * allowed object is {@link FilterBy } + * + */ + public void setBy(FilterBy value) + { + this.by = value; + } } diff --git a/src/jalview/xml/binding/jalview/FeatureMatcherSet.java b/src/jalview/xml/binding/jalview/FeatureMatcherSet.java index 24190b8..45077af 100644 --- a/src/jalview/xml/binding/jalview/FeatureMatcherSet.java +++ b/src/jalview/xml/binding/jalview/FeatureMatcherSet.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import java.util.ArrayList; @@ -16,13 +15,15 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** * A feature match condition, which may be simple or compound * - *

Java class for FeatureMatcherSet complex type. + *

+ * Java class for FeatureMatcherSet complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="FeatureMatcherSet">
@@ -51,142 +52,150 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "FeatureMatcherSet", namespace = "www.jalview.org/colours", propOrder = {
-    "matchCondition",
-    "compoundMatcher"
-})
-public class FeatureMatcherSet {
-
-    @XmlElement(namespace = "")
-    protected FeatureMatcher matchCondition;
-    @XmlElement(namespace = "")
-    protected FeatureMatcherSet.CompoundMatcher compoundMatcher;
+@XmlType(
+  name = "FeatureMatcherSet",
+  namespace = "www.jalview.org/colours",
+  propOrder =
+  { "matchCondition", "compoundMatcher" })
+public class FeatureMatcherSet
+{
+
+  @XmlElement(namespace = "")
+  protected FeatureMatcher matchCondition;
+
+  @XmlElement(namespace = "")
+  protected FeatureMatcherSet.CompoundMatcher compoundMatcher;
+
+  /**
+   * Gets the value of the matchCondition property.
+   * 
+   * @return possible object is {@link FeatureMatcher }
+   * 
+   */
+  public FeatureMatcher getMatchCondition()
+  {
+    return matchCondition;
+  }
+
+  /**
+   * Sets the value of the matchCondition property.
+   * 
+   * @param value
+   *          allowed object is {@link FeatureMatcher }
+   * 
+   */
+  public void setMatchCondition(FeatureMatcher value)
+  {
+    this.matchCondition = value;
+  }
+
+  /**
+   * Gets the value of the compoundMatcher property.
+   * 
+   * @return possible object is {@link FeatureMatcherSet.CompoundMatcher }
+   * 
+   */
+  public FeatureMatcherSet.CompoundMatcher getCompoundMatcher()
+  {
+    return compoundMatcher;
+  }
+
+  /**
+   * Sets the value of the compoundMatcher property.
+   * 
+   * @param value
+   *          allowed object is {@link FeatureMatcherSet.CompoundMatcher }
+   * 
+   */
+  public void setCompoundMatcher(FeatureMatcherSet.CompoundMatcher value)
+  {
+    this.compoundMatcher = value;
+  }
+
+  /**
+   * 

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet" maxOccurs="2" minOccurs="2"/>
+   *       </sequence>
+   *       <attribute name="and" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "matcherSet" }) + public static class CompoundMatcher + { + + @XmlElement(namespace = "", required = true) + protected List matcherSet; + + @XmlAttribute(name = "and", required = true) + protected boolean and; /** - * Gets the value of the matchCondition property. + * Gets the value of the matcherSet property. * - * @return - * possible object is - * {@link FeatureMatcher } - * - */ - public FeatureMatcher getMatchCondition() { - return matchCondition; - } - - /** - * Sets the value of the matchCondition property. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the matcherSet property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getMatcherSet().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link FeatureMatcherSet } * - * @param value - * allowed object is - * {@link FeatureMatcher } - * - */ - public void setMatchCondition(FeatureMatcher value) { - this.matchCondition = value; - } - - /** - * Gets the value of the compoundMatcher property. * - * @return - * possible object is - * {@link FeatureMatcherSet.CompoundMatcher } - * */ - public FeatureMatcherSet.CompoundMatcher getCompoundMatcher() { - return compoundMatcher; + public List getMatcherSet() + { + if (matcherSet == null) + { + matcherSet = new ArrayList(); + } + return this.matcherSet; } /** - * Sets the value of the compoundMatcher property. + * Gets the value of the and property. * - * @param value - * allowed object is - * {@link FeatureMatcherSet.CompoundMatcher } - * */ - public void setCompoundMatcher(FeatureMatcherSet.CompoundMatcher value) { - this.compoundMatcher = value; + public boolean isAnd() + { + return and; } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet" maxOccurs="2" minOccurs="2"/>
-     *       </sequence>
-     *       <attribute name="and" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- * + * Sets the value of the and property. * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "matcherSet" - }) - public static class CompoundMatcher { - - @XmlElement(namespace = "", required = true) - protected List matcherSet; - @XmlAttribute(name = "and", required = true) - protected boolean and; - - /** - * Gets the value of the matcherSet property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the matcherSet property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getMatcherSet().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link FeatureMatcherSet } - * - * - */ - public List getMatcherSet() { - if (matcherSet == null) { - matcherSet = new ArrayList(); - } - return this.matcherSet; - } - - /** - * Gets the value of the and property. - * - */ - public boolean isAnd() { - return and; - } - - /** - * Sets the value of the and property. - * - */ - public void setAnd(boolean value) { - this.and = value; - } - + public void setAnd(boolean value) + { + this.and = value; } + } + } diff --git a/src/jalview/xml/binding/jalview/FilterBy.java b/src/jalview/xml/binding/jalview/FilterBy.java index 3a9428c..76fc6cd 100644 --- a/src/jalview/xml/binding/jalview/FilterBy.java +++ b/src/jalview/xml/binding/jalview/FilterBy.java @@ -2,22 +2,24 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import javax.xml.bind.annotation.XmlEnum; import javax.xml.bind.annotation.XmlEnumValue; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for FilterBy. + *

+ * Java class for FilterBy. * - *

The following schema fragment specifies the expected content contained within this class. *

+ * The following schema fragment specifies the expected content contained within + * this class. + *

+ * *

  * <simpleType name="FilterBy">
  *   <restriction base="{http://www.w3.org/2001/XMLSchema}string">
@@ -31,31 +33,36 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlType(name = "FilterBy", namespace = "www.jalview.org/colours")
 @XmlEnum
-public enum FilterBy {
-
-    @XmlEnumValue("byLabel")
-    BY_LABEL("byLabel"),
-    @XmlEnumValue("byScore")
-    BY_SCORE("byScore"),
-    @XmlEnumValue("byAttribute")
-    BY_ATTRIBUTE("byAttribute");
-    private final String value;
-
-    FilterBy(String v) {
-        value = v;
-    }
+public enum FilterBy
+{
 
-    public String value() {
-        return value;
-    }
+  @XmlEnumValue("byLabel")
+  BY_LABEL("byLabel"), @XmlEnumValue("byScore")
+  BY_SCORE("byScore"), @XmlEnumValue("byAttribute")
+  BY_ATTRIBUTE("byAttribute");
+
+  private final String value;
+
+  FilterBy(String v)
+  {
+    value = v;
+  }
+
+  public String value()
+  {
+    return value;
+  }
 
-    public static FilterBy fromValue(String v) {
-        for (FilterBy c: FilterBy.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
+  public static FilterBy fromValue(String v)
+  {
+    for (FilterBy c : FilterBy.values())
+    {
+      if (c.value.equals(v))
+      {
+        return c;
+      }
     }
+    throw new IllegalArgumentException(v);
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/JalviewModel.java b/src/jalview/xml/binding/jalview/JalviewModel.java
index 22b2533..94f9373 100644
--- a/src/jalview/xml/binding/jalview/JalviewModel.java
+++ b/src/jalview/xml/binding/jalview/JalviewModel.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
-
 package jalview.xml.binding.jalview;
 
 import java.util.ArrayList;
@@ -22,11 +21,13 @@ import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import javax.xml.datatype.XMLGregorianCalendar;
 
-
 /**
- * 

Java class for JalviewModel complex type. + *

+ * Java class for JalviewModel complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="JalviewModel">
@@ -381,2762 +382,3475 @@ import javax.xml.datatype.XMLGregorianCalendar;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "JalviewModel", namespace = "www.jalview.org", propOrder = {
-    "creationDate",
-    "version",
-    "vamsasModel",
-    "jSeq",
-    "jGroup",
-    "viewport",
-    "userColours",
-    "tree",
-    "pcaViewer",
-    "featureSettings"
-})
-public class JalviewModel {
-
-    @XmlElement(required = true)
-    @XmlSchemaType(name = "dateTime")
-    protected XMLGregorianCalendar creationDate;
-    @XmlElement(required = true)
-    protected String version;
-    @XmlElement(required = true)
-    protected VAMSAS vamsasModel;
-    @XmlElement(name = "JSeq")
-    protected List jSeq;
-    @XmlElement(name = "JGroup")
-    protected List jGroup;
-    @XmlElement(name = "Viewport")
-    protected List viewport;
-    @XmlElement(name = "UserColours")
-    protected List userColours;
-    protected List tree;
-    @XmlElement(name = "PcaViewer")
-    protected List pcaViewer;
-    @XmlElement(name = "FeatureSettings")
-    protected JalviewModel.FeatureSettings featureSettings;
-
-    /**
-     * Gets the value of the creationDate property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link XMLGregorianCalendar }
-     *     
-     */
-    public XMLGregorianCalendar getCreationDate() {
-        return creationDate;
-    }
-
-    /**
-     * Sets the value of the creationDate property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link XMLGregorianCalendar }
-     *     
-     */
-    public void setCreationDate(XMLGregorianCalendar value) {
-        this.creationDate = value;
+@XmlType(
+  name = "JalviewModel",
+  namespace = "www.jalview.org",
+  propOrder =
+  { "creationDate", "version", "vamsasModel", "jSeq", "jGroup", "viewport",
+      "userColours", "tree", "pcaViewer", "featureSettings" })
+public class JalviewModel
+{
+
+  @XmlElement(required = true)
+  @XmlSchemaType(name = "dateTime")
+  protected XMLGregorianCalendar creationDate;
+
+  @XmlElement(required = true)
+  protected String version;
+
+  @XmlElement(required = true)
+  protected VAMSAS vamsasModel;
+
+  @XmlElement(name = "JSeq")
+  protected List jSeq;
+
+  @XmlElement(name = "JGroup")
+  protected List jGroup;
+
+  @XmlElement(name = "Viewport")
+  protected List viewport;
+
+  @XmlElement(name = "UserColours")
+  protected List userColours;
+
+  protected List tree;
+
+  @XmlElement(name = "PcaViewer")
+  protected List pcaViewer;
+
+  @XmlElement(name = "FeatureSettings")
+  protected JalviewModel.FeatureSettings featureSettings;
+
+  /**
+   * Gets the value of the creationDate property.
+   * 
+   * @return possible object is {@link XMLGregorianCalendar }
+   * 
+   */
+  public XMLGregorianCalendar getCreationDate()
+  {
+    return creationDate;
+  }
+
+  /**
+   * Sets the value of the creationDate property.
+   * 
+   * @param value
+   *          allowed object is {@link XMLGregorianCalendar }
+   * 
+   */
+  public void setCreationDate(XMLGregorianCalendar value)
+  {
+    this.creationDate = value;
+  }
+
+  /**
+   * Gets the value of the version property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getVersion()
+  {
+    return version;
+  }
+
+  /**
+   * Sets the value of the version property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setVersion(String value)
+  {
+    this.version = value;
+  }
+
+  /**
+   * Gets the value of the vamsasModel property.
+   * 
+   * @return possible object is {@link VAMSAS }
+   * 
+   */
+  public VAMSAS getVamsasModel()
+  {
+    return vamsasModel;
+  }
+
+  /**
+   * Sets the value of the vamsasModel property.
+   * 
+   * @param value
+   *          allowed object is {@link VAMSAS }
+   * 
+   */
+  public void setVamsasModel(VAMSAS value)
+  {
+    this.vamsasModel = value;
+  }
+
+  /**
+   * Gets the value of the jSeq property.
+   * 
+   * 

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the jSeq property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getJSeq().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.JSeq } + * + * + */ + public List getJSeq() + { + if (jSeq == null) + { + jSeq = new ArrayList(); } - - /** - * Gets the value of the version property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVersion() { - return version; + return this.jSeq; + } + + /** + * Gets the value of the jGroup property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the jGroup property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getJGroup().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.JGroup } + * + * + */ + public List getJGroup() + { + if (jGroup == null) + { + jGroup = new ArrayList(); } - - /** - * Sets the value of the version property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVersion(String value) { - this.version = value; + return this.jGroup; + } + + /** + * Gets the value of the viewport property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the viewport property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getViewport().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.Viewport } + * + * + */ + public List getViewport() + { + if (viewport == null) + { + viewport = new ArrayList(); } - - /** - * Gets the value of the vamsasModel property. - * - * @return - * possible object is - * {@link VAMSAS } - * - */ - public VAMSAS getVamsasModel() { - return vamsasModel; + return this.viewport; + } + + /** + * Gets the value of the userColours property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the userColours property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getUserColours().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.UserColours } + * + * + */ + public List getUserColours() + { + if (userColours == null) + { + userColours = new ArrayList(); } - - /** - * Sets the value of the vamsasModel property. - * - * @param value - * allowed object is - * {@link VAMSAS } - * - */ - public void setVamsasModel(VAMSAS value) { - this.vamsasModel = value; + return this.userColours; + } + + /** + * Gets the value of the tree property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the tree property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getTree().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.Tree } + * + * + */ + public List getTree() + { + if (tree == null) + { + tree = new ArrayList(); + } + return this.tree; + } + + /** + * Gets the value of the pcaViewer property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the pcaViewer property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getPcaViewer().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.PcaViewer } + * + * + */ + public List getPcaViewer() + { + if (pcaViewer == null) + { + pcaViewer = new ArrayList(); } + return this.pcaViewer; + } + + /** + * Gets the value of the featureSettings property. + * + * @return possible object is {@link JalviewModel.FeatureSettings } + * + */ + public JalviewModel.FeatureSettings getFeatureSettings() + { + return featureSettings; + } + + /** + * Sets the value of the featureSettings property. + * + * @param value + * allowed object is {@link JalviewModel.FeatureSettings } + * + */ + public void setFeatureSettings(JalviewModel.FeatureSettings value) + { + this.featureSettings = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="setting" maxOccurs="unbounded" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <sequence>
+   *                   <element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="2" minOccurs="0"/>
+   *                   <element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet" minOccurs="0"/>
+   *                 </sequence>
+   *                 <attribute name="type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 <attribute name="colour" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 <attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *                 <attribute name="order" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *                 <attribute name="mincolour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 <attribute name="noValueColour" type="{www.jalview.org/colours}NoValueColour" default="Min" />
+   *                 <attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *                 <attribute name="threshstate" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 <attribute name="max" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *                 <attribute name="min" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *                 <attribute name="colourByLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *                 <attribute name="autoScale" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *         <element name="group" maxOccurs="unbounded" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 <attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "setting", "group" }) + public static class FeatureSettings + { + + @XmlElement(namespace = "www.jalview.org") + protected List setting; + + @XmlElement(namespace = "www.jalview.org") + protected List group; /** - * Gets the value of the jSeq property. + * Gets the value of the setting property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the jSeq property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the setting property. * *

* For example, to add a new item, do as follows: + * *

-     *    getJSeq().add(newItem);
+     * getSetting().add(newItem);
      * 
* * *

* Objects of the following type(s) are allowed in the list - * {@link JalviewModel.JSeq } + * {@link JalviewModel.FeatureSettings.Setting } * * */ - public List getJSeq() { - if (jSeq == null) { - jSeq = new ArrayList(); - } - return this.jSeq; + public List getSetting() + { + if (setting == null) + { + setting = new ArrayList(); + } + return this.setting; } /** - * Gets the value of the jGroup property. + * Gets the value of the group property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the jGroup property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the group property. * *

* For example, to add a new item, do as follows: + * *

-     *    getJGroup().add(newItem);
+     * getGroup().add(newItem);
      * 
* * *

* Objects of the following type(s) are allowed in the list - * {@link JalviewModel.JGroup } + * {@link JalviewModel.FeatureSettings.Group } * * */ - public List getJGroup() { - if (jGroup == null) { - jGroup = new ArrayList(); - } - return this.jGroup; + public List getGroup() + { + if (group == null) + { + group = new ArrayList(); + } + return this.group; } /** - * Gets the value of the viewport property. - * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the viewport property. + * Java class for anonymous complex type. * *

- * For example, to add a new item, do as follows: + * The following schema fragment specifies the expected content contained + * within this class. + * *

-     *    getViewport().add(newItem);
+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
      * 
* * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Group + { + + @XmlAttribute(name = "name", required = true) + protected String name; + + @XmlAttribute(name = "display", required = true) + protected boolean display; + + /** + * Gets the value of the name property. + * + * @return possible object is {@link String } + * + */ + public String getName() + { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setName(String value) + { + this.name = value; + } + + /** + * Gets the value of the display property. + * + */ + public boolean isDisplay() + { + return display; + } + + /** + * Sets the value of the display property. + * + */ + public void setDisplay(boolean value) + { + this.display = value; + } + + } + + /** + *

+ * Java class for anonymous complex type. + * *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.Viewport } + * The following schema fragment specifies the expected content contained + * within this class. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="2" minOccurs="0"/>
+     *         <element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet" minOccurs="0"/>
+     *       </sequence>
+     *       <attribute name="type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="colour" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       <attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *       <attribute name="order" type="{http://www.w3.org/2001/XMLSchema}float" />
+     *       <attribute name="mincolour" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       <attribute name="noValueColour" type="{www.jalview.org/colours}NoValueColour" default="Min" />
+     *       <attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
+     *       <attribute name="threshstate" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       <attribute name="max" type="{http://www.w3.org/2001/XMLSchema}float" />
+     *       <attribute name="min" type="{http://www.w3.org/2001/XMLSchema}float" />
+     *       <attribute name="colourByLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *       <attribute name="autoScale" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
* * */ - public List getViewport() { - if (viewport == null) { - viewport = new ArrayList(); + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "attributeName", "matcherSet" }) + public static class Setting + { + + @XmlElement(namespace = "www.jalview.org") + protected List attributeName; + + @XmlElement(namespace = "www.jalview.org") + protected FeatureMatcherSet matcherSet; + + @XmlAttribute(name = "type", required = true) + protected String type; + + @XmlAttribute(name = "colour", required = true) + protected int colour; + + @XmlAttribute(name = "display", required = true) + protected boolean display; + + @XmlAttribute(name = "order") + protected Float order; + + @XmlAttribute(name = "mincolour") + protected Integer mincolour; + + @XmlAttribute(name = "noValueColour") + protected NoValueColour noValueColour; + + @XmlAttribute(name = "threshold") + protected Float threshold; + + @XmlAttribute(name = "threshstate") + protected Integer threshstate; + + @XmlAttribute(name = "max") + protected Float max; + + @XmlAttribute(name = "min") + protected Float min; + + @XmlAttribute(name = "colourByLabel") + protected Boolean colourByLabel; + + @XmlAttribute(name = "autoScale") + protected Boolean autoScale; + + /** + * Gets the value of the attributeName property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the attributeName property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+       * getAttributeName().add(newItem);
+       * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String + * } + * + * + */ + public List getAttributeName() + { + if (attributeName == null) + { + attributeName = new ArrayList(); + } + return this.attributeName; + } + + /** + * Gets the value of the matcherSet property. + * + * @return possible object is {@link FeatureMatcherSet } + * + */ + public FeatureMatcherSet getMatcherSet() + { + return matcherSet; + } + + /** + * Sets the value of the matcherSet property. + * + * @param value + * allowed object is {@link FeatureMatcherSet } + * + */ + public void setMatcherSet(FeatureMatcherSet value) + { + this.matcherSet = value; + } + + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } + + /** + * Gets the value of the colour property. + * + */ + public int getColour() + { + return colour; + } + + /** + * Sets the value of the colour property. + * + */ + public void setColour(int value) + { + this.colour = value; + } + + /** + * Gets the value of the display property. + * + */ + public boolean isDisplay() + { + return display; + } + + /** + * Sets the value of the display property. + * + */ + public void setDisplay(boolean value) + { + this.display = value; + } + + /** + * Gets the value of the order property. + * + * @return possible object is {@link Float } + * + */ + public Float getOrder() + { + return order; + } + + /** + * Sets the value of the order property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setOrder(Float value) + { + this.order = value; + } + + /** + * Gets the value of the mincolour property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getMincolour() + { + return mincolour; + } + + /** + * Sets the value of the mincolour property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setMincolour(Integer value) + { + this.mincolour = value; + } + + /** + * Gets the value of the noValueColour property. + * + * @return possible object is {@link NoValueColour } + * + */ + public NoValueColour getNoValueColour() + { + if (noValueColour == null) + { + return NoValueColour.MIN; } - return this.viewport; + else + { + return noValueColour; + } + } + + /** + * Sets the value of the noValueColour property. + * + * @param value + * allowed object is {@link NoValueColour } + * + */ + public void setNoValueColour(NoValueColour value) + { + this.noValueColour = value; + } + + /** + * Gets the value of the threshold property. + * + * @return possible object is {@link Float } + * + */ + public Float getThreshold() + { + return threshold; + } + + /** + * Sets the value of the threshold property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setThreshold(Float value) + { + this.threshold = value; + } + + /** + * Gets the value of the threshstate property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getThreshstate() + { + return threshstate; + } + + /** + * Sets the value of the threshstate property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setThreshstate(Integer value) + { + this.threshstate = value; + } + + /** + * Gets the value of the max property. + * + * @return possible object is {@link Float } + * + */ + public Float getMax() + { + return max; + } + + /** + * Sets the value of the max property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setMax(Float value) + { + this.max = value; + } + + /** + * Gets the value of the min property. + * + * @return possible object is {@link Float } + * + */ + public Float getMin() + { + return min; + } + + /** + * Sets the value of the min property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setMin(Float value) + { + this.min = value; + } + + /** + * Gets the value of the colourByLabel property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isColourByLabel() + { + return colourByLabel; + } + + /** + * Sets the value of the colourByLabel property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setColourByLabel(Boolean value) + { + this.colourByLabel = value; + } + + /** + * Gets the value of the autoScale property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isAutoScale() + { + return autoScale; + } + + /** + * Sets the value of the autoScale property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setAutoScale(Boolean value) + { + this.autoScale = value; + } + } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="seq" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
+   *         <element name="annotationColours" type="{www.jalview.org}AnnotationColourScheme" minOccurs="0"/>
+   *       </sequence>
+   *       <attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="consThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="pidThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="outlineColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="displayBoxes" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="displayText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="colourText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="textCol1" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="textCol2" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="textColThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="showUnconserved" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="ignoreGapsinConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       <attribute name="showConsensusHistogram" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       <attribute name="showSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="normaliseSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="id" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "seq", "annotationColours" }) + public static class JGroup + { + + @XmlElement(namespace = "www.jalview.org", required = true) + protected List seq; + + @XmlElement(namespace = "www.jalview.org") + protected AnnotationColourScheme annotationColours; + + @XmlAttribute(name = "start") + protected Integer start; + + @XmlAttribute(name = "end") + protected Integer end; + + @XmlAttribute(name = "name") + protected String name; + + @XmlAttribute(name = "colour") + protected String colour; + + @XmlAttribute(name = "consThreshold") + protected Integer consThreshold; + + @XmlAttribute(name = "pidThreshold") + protected Integer pidThreshold; + + @XmlAttribute(name = "outlineColour") + protected Integer outlineColour; + + @XmlAttribute(name = "displayBoxes") + protected Boolean displayBoxes; + + @XmlAttribute(name = "displayText") + protected Boolean displayText; + + @XmlAttribute(name = "colourText") + protected Boolean colourText; + + @XmlAttribute(name = "textCol1") + protected Integer textCol1; + + @XmlAttribute(name = "textCol2") + protected Integer textCol2; + + @XmlAttribute(name = "textColThreshold") + protected Integer textColThreshold; + + @XmlAttribute(name = "showUnconserved") + protected Boolean showUnconserved; + + @XmlAttribute(name = "ignoreGapsinConsensus") + protected Boolean ignoreGapsinConsensus; + + @XmlAttribute(name = "showConsensusHistogram") + protected Boolean showConsensusHistogram; + + @XmlAttribute(name = "showSequenceLogo") + protected Boolean showSequenceLogo; + + @XmlAttribute(name = "normaliseSequenceLogo") + protected Boolean normaliseSequenceLogo; + + @XmlAttribute(name = "id") + protected String id; + /** - * Gets the value of the userColours property. + * Gets the value of the seq property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the userColours property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the seq property. * *

* For example, to add a new item, do as follows: + * *

-     *    getUserColours().add(newItem);
+     * getSeq().add(newItem);
      * 
* * *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.UserColours } + * Objects of the following type(s) are allowed in the list {@link String } * * */ - public List getUserColours() { - if (userColours == null) { - userColours = new ArrayList(); - } - return this.userColours; + public List getSeq() + { + if (seq == null) + { + seq = new ArrayList(); + } + return this.seq; } /** - * Gets the value of the tree property. + * Gets the value of the annotationColours property. * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the tree property. + * @return possible object is {@link AnnotationColourScheme } * - *

- * For example, to add a new item, do as follows: - *

-     *    getTree().add(newItem);
-     * 
+ */ + public AnnotationColourScheme getAnnotationColours() + { + return annotationColours; + } + + /** + * Sets the value of the annotationColours property. * + * @param value + * allowed object is {@link AnnotationColourScheme } * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.Tree } + */ + public void setAnnotationColours(AnnotationColourScheme value) + { + this.annotationColours = value; + } + + /** + * Gets the value of the start property. * + * @return possible object is {@link Integer } * */ - public List getTree() { - if (tree == null) { - tree = new ArrayList(); - } - return this.tree; + public Integer getStart() + { + return start; } /** - * Gets the value of the pcaViewer property. + * Sets the value of the start property. * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the pcaViewer property. + * @param value + * allowed object is {@link Integer } * - *

- * For example, to add a new item, do as follows: - *

-     *    getPcaViewer().add(newItem);
-     * 
+ */ + public void setStart(Integer value) + { + this.start = value; + } + + /** + * Gets the value of the end property. * + * @return possible object is {@link Integer } * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.PcaViewer } + */ + public Integer getEnd() + { + return end; + } + + /** + * Sets the value of the end property. * + * @param value + * allowed object is {@link Integer } * */ - public List getPcaViewer() { - if (pcaViewer == null) { - pcaViewer = new ArrayList(); - } - return this.pcaViewer; + public void setEnd(Integer value) + { + this.end = value; } /** - * Gets the value of the featureSettings property. + * Gets the value of the name property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link JalviewModel.FeatureSettings } - * */ - public JalviewModel.FeatureSettings getFeatureSettings() { - return featureSettings; + public String getName() + { + return name; } /** - * Sets the value of the featureSettings property. + * Sets the value of the name property. * * @param value - * allowed object is - * {@link JalviewModel.FeatureSettings } - * + * allowed object is {@link String } + * */ - public void setFeatureSettings(JalviewModel.FeatureSettings value) { - this.featureSettings = value; + public void setName(String value) + { + this.name = value; } + /** + * Gets the value of the colour property. + * + * @return possible object is {@link String } + * + */ + public String getColour() + { + return colour; + } /** - *

Java class for anonymous complex type. + * Sets the value of the colour property. * - *

The following schema fragment specifies the expected content contained within this class. + * @param value + * allowed object is {@link String } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="setting" maxOccurs="unbounded" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <sequence>
-     *                   <element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="2" minOccurs="0"/>
-     *                   <element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet" minOccurs="0"/>
-     *                 </sequence>
-     *                 <attribute name="type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                 <attribute name="colour" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *                 <attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *                 <attribute name="order" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *                 <attribute name="mincolour" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *                 <attribute name="noValueColour" type="{www.jalview.org/colours}NoValueColour" default="Min" />
-     *                 <attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *                 <attribute name="threshstate" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *                 <attribute name="max" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *                 <attribute name="min" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *                 <attribute name="colourByLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *                 <attribute name="autoScale" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *         <element name="group" maxOccurs="unbounded" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                 <attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public void setColour(String value) + { + this.colour = value; + } + + /** + * Gets the value of the consThreshold property. * + * @return possible object is {@link Integer } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "setting", - "group" - }) - public static class FeatureSettings { + public Integer getConsThreshold() + { + return consThreshold; + } - @XmlElement(namespace = "www.jalview.org") - protected List setting; - @XmlElement(namespace = "www.jalview.org") - protected List group; + /** + * Sets the value of the consThreshold property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setConsThreshold(Integer value) + { + this.consThreshold = value; + } - /** - * Gets the value of the setting property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the setting property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getSetting().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.FeatureSettings.Setting } - * - * - */ - public List getSetting() { - if (setting == null) { - setting = new ArrayList(); - } - return this.setting; - } + /** + * Gets the value of the pidThreshold property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getPidThreshold() + { + return pidThreshold; + } - /** - * Gets the value of the group property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the group property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getGroup().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.FeatureSettings.Group } - * - * - */ - public List getGroup() { - if (group == null) { - group = new ArrayList(); - } - return this.group; - } + /** + * Sets the value of the pidThreshold property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setPidThreshold(Integer value) + { + this.pidThreshold = value; + } + /** + * Gets the value of the outlineColour property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getOutlineColour() + { + return outlineColour; + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Group { - - @XmlAttribute(name = "name", required = true) - protected String name; - @XmlAttribute(name = "display", required = true) - protected boolean display; - - /** - * Gets the value of the name property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Sets the value of the name property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Gets the value of the display property. - * - */ - public boolean isDisplay() { - return display; - } - - /** - * Sets the value of the display property. - * - */ - public void setDisplay(boolean value) { - this.display = value; - } + /** + * Sets the value of the outlineColour property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setOutlineColour(Integer value) + { + this.outlineColour = value; + } - } + /** + * Gets the value of the displayBoxes property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isDisplayBoxes() + { + return displayBoxes; + } + /** + * Sets the value of the displayBoxes property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setDisplayBoxes(Boolean value) + { + this.displayBoxes = value; + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <sequence>
-         *         <element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="2" minOccurs="0"/>
-         *         <element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet" minOccurs="0"/>
-         *       </sequence>
-         *       <attribute name="type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="colour" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *       <attribute name="display" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-         *       <attribute name="order" type="{http://www.w3.org/2001/XMLSchema}float" />
-         *       <attribute name="mincolour" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *       <attribute name="noValueColour" type="{www.jalview.org/colours}NoValueColour" default="Min" />
-         *       <attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
-         *       <attribute name="threshstate" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *       <attribute name="max" type="{http://www.w3.org/2001/XMLSchema}float" />
-         *       <attribute name="min" type="{http://www.w3.org/2001/XMLSchema}float" />
-         *       <attribute name="colourByLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-         *       <attribute name="autoScale" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "attributeName", - "matcherSet" - }) - public static class Setting { - - @XmlElement(namespace = "www.jalview.org") - protected List attributeName; - @XmlElement(namespace = "www.jalview.org") - protected FeatureMatcherSet matcherSet; - @XmlAttribute(name = "type", required = true) - protected String type; - @XmlAttribute(name = "colour", required = true) - protected int colour; - @XmlAttribute(name = "display", required = true) - protected boolean display; - @XmlAttribute(name = "order") - protected Float order; - @XmlAttribute(name = "mincolour") - protected Integer mincolour; - @XmlAttribute(name = "noValueColour") - protected NoValueColour noValueColour; - @XmlAttribute(name = "threshold") - protected Float threshold; - @XmlAttribute(name = "threshstate") - protected Integer threshstate; - @XmlAttribute(name = "max") - protected Float max; - @XmlAttribute(name = "min") - protected Float min; - @XmlAttribute(name = "colourByLabel") - protected Boolean colourByLabel; - @XmlAttribute(name = "autoScale") - protected Boolean autoScale; - - /** - * Gets the value of the attributeName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the attributeName property. - * - *

- * For example, to add a new item, do as follows: - *

-             *    getAttributeName().add(newItem);
-             * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getAttributeName() { - if (attributeName == null) { - attributeName = new ArrayList(); - } - return this.attributeName; - } - - /** - * Gets the value of the matcherSet property. - * - * @return - * possible object is - * {@link FeatureMatcherSet } - * - */ - public FeatureMatcherSet getMatcherSet() { - return matcherSet; - } - - /** - * Sets the value of the matcherSet property. - * - * @param value - * allowed object is - * {@link FeatureMatcherSet } - * - */ - public void setMatcherSet(FeatureMatcherSet value) { - this.matcherSet = value; - } - - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Gets the value of the colour property. - * - */ - public int getColour() { - return colour; - } - - /** - * Sets the value of the colour property. - * - */ - public void setColour(int value) { - this.colour = value; - } - - /** - * Gets the value of the display property. - * - */ - public boolean isDisplay() { - return display; - } - - /** - * Sets the value of the display property. - * - */ - public void setDisplay(boolean value) { - this.display = value; - } - - /** - * Gets the value of the order property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getOrder() { - return order; - } - - /** - * Sets the value of the order property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setOrder(Float value) { - this.order = value; - } - - /** - * Gets the value of the mincolour property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getMincolour() { - return mincolour; - } - - /** - * Sets the value of the mincolour property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setMincolour(Integer value) { - this.mincolour = value; - } - - /** - * Gets the value of the noValueColour property. - * - * @return - * possible object is - * {@link NoValueColour } - * - */ - public NoValueColour getNoValueColour() { - if (noValueColour == null) { - return NoValueColour.MIN; - } else { - return noValueColour; - } - } - - /** - * Sets the value of the noValueColour property. - * - * @param value - * allowed object is - * {@link NoValueColour } - * - */ - public void setNoValueColour(NoValueColour value) { - this.noValueColour = value; - } - - /** - * Gets the value of the threshold property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getThreshold() { - return threshold; - } - - /** - * Sets the value of the threshold property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setThreshold(Float value) { - this.threshold = value; - } - - /** - * Gets the value of the threshstate property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getThreshstate() { - return threshstate; - } - - /** - * Sets the value of the threshstate property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setThreshstate(Integer value) { - this.threshstate = value; - } - - /** - * Gets the value of the max property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getMax() { - return max; - } - - /** - * Sets the value of the max property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setMax(Float value) { - this.max = value; - } - - /** - * Gets the value of the min property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getMin() { - return min; - } - - /** - * Sets the value of the min property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setMin(Float value) { - this.min = value; - } - - /** - * Gets the value of the colourByLabel property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isColourByLabel() { - return colourByLabel; - } - - /** - * Sets the value of the colourByLabel property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setColourByLabel(Boolean value) { - this.colourByLabel = value; - } - - /** - * Gets the value of the autoScale property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isAutoScale() { - return autoScale; - } - - /** - * Sets the value of the autoScale property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setAutoScale(Boolean value) { - this.autoScale = value; - } + /** + * Gets the value of the displayText property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isDisplayText() + { + return displayText; + } - } + /** + * Sets the value of the displayText property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setDisplayText(Boolean value) + { + this.displayText = value; + } + /** + * Gets the value of the colourText property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isColourText() + { + return colourText; } + /** + * Sets the value of the colourText property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setColourText(Boolean value) + { + this.colourText = value; + } /** - *

Java class for anonymous complex type. + * Gets the value of the textCol1 property. * - *

The following schema fragment specifies the expected content contained within this class. + * @return possible object is {@link Integer } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="seq" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
-     *         <element name="annotationColours" type="{www.jalview.org}AnnotationColourScheme" minOccurs="0"/>
-     *       </sequence>
-     *       <attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="consThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="pidThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="outlineColour" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="displayBoxes" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="displayText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="colourText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="textCol1" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="textCol2" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="textColThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="showUnconserved" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="ignoreGapsinConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-     *       <attribute name="showConsensusHistogram" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-     *       <attribute name="showSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="normaliseSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="id" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public Integer getTextCol1() + { + return textCol1; + } + + /** + * Sets the value of the textCol1 property. * + * @param value + * allowed object is {@link Integer } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "seq", - "annotationColours" - }) - public static class JGroup { - - @XmlElement(namespace = "www.jalview.org", required = true) - protected List seq; - @XmlElement(namespace = "www.jalview.org") - protected AnnotationColourScheme annotationColours; - @XmlAttribute(name = "start") - protected Integer start; - @XmlAttribute(name = "end") - protected Integer end; - @XmlAttribute(name = "name") - protected String name; - @XmlAttribute(name = "colour") - protected String colour; - @XmlAttribute(name = "consThreshold") - protected Integer consThreshold; - @XmlAttribute(name = "pidThreshold") - protected Integer pidThreshold; - @XmlAttribute(name = "outlineColour") - protected Integer outlineColour; - @XmlAttribute(name = "displayBoxes") - protected Boolean displayBoxes; - @XmlAttribute(name = "displayText") - protected Boolean displayText; - @XmlAttribute(name = "colourText") - protected Boolean colourText; - @XmlAttribute(name = "textCol1") - protected Integer textCol1; - @XmlAttribute(name = "textCol2") - protected Integer textCol2; - @XmlAttribute(name = "textColThreshold") - protected Integer textColThreshold; - @XmlAttribute(name = "showUnconserved") - protected Boolean showUnconserved; - @XmlAttribute(name = "ignoreGapsinConsensus") - protected Boolean ignoreGapsinConsensus; - @XmlAttribute(name = "showConsensusHistogram") - protected Boolean showConsensusHistogram; - @XmlAttribute(name = "showSequenceLogo") - protected Boolean showSequenceLogo; - @XmlAttribute(name = "normaliseSequenceLogo") - protected Boolean normaliseSequenceLogo; - @XmlAttribute(name = "id") - protected String id; + public void setTextCol1(Integer value) + { + this.textCol1 = value; + } - /** - * Gets the value of the seq property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the seq property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getSeq().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getSeq() { - if (seq == null) { - seq = new ArrayList(); - } - return this.seq; - } + /** + * Gets the value of the textCol2 property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getTextCol2() + { + return textCol2; + } + + /** + * Sets the value of the textCol2 property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setTextCol2(Integer value) + { + this.textCol2 = value; + } + + /** + * Gets the value of the textColThreshold property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getTextColThreshold() + { + return textColThreshold; + } + + /** + * Sets the value of the textColThreshold property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setTextColThreshold(Integer value) + { + this.textColThreshold = value; + } + + /** + * Gets the value of the showUnconserved property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowUnconserved() + { + return showUnconserved; + } + + /** + * Sets the value of the showUnconserved property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowUnconserved(Boolean value) + { + this.showUnconserved = value; + } + + /** + * Gets the value of the ignoreGapsinConsensus property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isIgnoreGapsinConsensus() + { + if (ignoreGapsinConsensus == null) + { + return true; + } + else + { + return ignoreGapsinConsensus; + } + } + + /** + * Sets the value of the ignoreGapsinConsensus property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setIgnoreGapsinConsensus(Boolean value) + { + this.ignoreGapsinConsensus = value; + } + + /** + * Gets the value of the showConsensusHistogram property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isShowConsensusHistogram() + { + if (showConsensusHistogram == null) + { + return true; + } + else + { + return showConsensusHistogram; + } + } + + /** + * Sets the value of the showConsensusHistogram property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowConsensusHistogram(Boolean value) + { + this.showConsensusHistogram = value; + } + + /** + * Gets the value of the showSequenceLogo property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isShowSequenceLogo() + { + if (showSequenceLogo == null) + { + return false; + } + else + { + return showSequenceLogo; + } + } + + /** + * Sets the value of the showSequenceLogo property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowSequenceLogo(Boolean value) + { + this.showSequenceLogo = value; + } + + /** + * Gets the value of the normaliseSequenceLogo property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isNormaliseSequenceLogo() + { + if (normaliseSequenceLogo == null) + { + return false; + } + else + { + return normaliseSequenceLogo; + } + } + + /** + * Sets the value of the normaliseSequenceLogo property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setNormaliseSequenceLogo(Boolean value) + { + this.normaliseSequenceLogo = value; + } + + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } + + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="features" type="{www.jalview.org}feature" maxOccurs="unbounded" minOccurs="0"/>
+   *         <element name="pdbids" maxOccurs="unbounded" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <extension base="{www.jalview.org}pdbentry">
+   *                 <sequence>
+   *                   <element name="structureState" maxOccurs="unbounded" minOccurs="0">
+   *                     <complexType>
+   *                       <simpleContent>
+   *                         <extension base="<http://www.w3.org/2001/XMLSchema>string">
+   *                           <attGroup ref="{www.jalview.org}swingwindow"/>
+   *                           <attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *                           <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                           <attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *                           <attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *                           <attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *                           <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                         </extension>
+   *                       </simpleContent>
+   *                     </complexType>
+   *                   </element>
+   *                 </sequence>
+   *               </extension>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *         <element name="hiddenSequences" type="{http://www.w3.org/2001/XMLSchema}int" maxOccurs="unbounded" minOccurs="0"/>
+   *         <element name="rnaViewer" maxOccurs="unbounded" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <sequence>
+   *                   <element name="secondaryStructure" maxOccurs="unbounded">
+   *                     <complexType>
+   *                       <complexContent>
+   *                         <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                           <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                           <attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                           <attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *                           <attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                         </restriction>
+   *                       </complexContent>
+   *                     </complexType>
+   *                   </element>
+   *                 </sequence>
+   *                 <attGroup ref="{www.jalview.org}swingwindow"/>
+   *                 <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 <attribute name="dividerLocation" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 <attribute name="selectedRna" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *       </sequence>
+   *       <attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="start" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="hidden" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="viewreference" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType( + name = "", + propOrder = + { "features", "pdbids", "hiddenSequences", "rnaViewer" }) + public static class JSeq + { + + @XmlElement(namespace = "www.jalview.org") + protected List features; + + @XmlElement(namespace = "www.jalview.org") + protected List pdbids; + + @XmlElement(namespace = "www.jalview.org", type = Integer.class) + protected List hiddenSequences; + + @XmlElement(namespace = "www.jalview.org") + protected List rnaViewer; + + @XmlAttribute(name = "colour") + protected Integer colour; + + @XmlAttribute(name = "start", required = true) + protected int start; + + @XmlAttribute(name = "end", required = true) + protected int end; + + @XmlAttribute(name = "id", required = true) + protected String id; + + @XmlAttribute(name = "hidden") + protected Boolean hidden; + + @XmlAttribute(name = "viewreference") + protected Boolean viewreference; + + /** + * Gets the value of the features property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the features property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getFeatures().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Feature } + * + * + */ + public List getFeatures() + { + if (features == null) + { + features = new ArrayList(); + } + return this.features; + } + + /** + * Gets the value of the pdbids property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the pdbids property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getPdbids().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.JSeq.Pdbids } + * + * + */ + public List getPdbids() + { + if (pdbids == null) + { + pdbids = new ArrayList(); + } + return this.pdbids; + } + + /** + * Gets the value of the hiddenSequences property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the hiddenSequences property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getHiddenSequences().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getHiddenSequences() + { + if (hiddenSequences == null) + { + hiddenSequences = new ArrayList(); + } + return this.hiddenSequences; + } + + /** + * Gets the value of the rnaViewer property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the rnaViewer property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getRnaViewer().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.JSeq.RnaViewer } + * + * + */ + public List getRnaViewer() + { + if (rnaViewer == null) + { + rnaViewer = new ArrayList(); + } + return this.rnaViewer; + } + + /** + * Gets the value of the colour property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getColour() + { + return colour; + } + + /** + * Sets the value of the colour property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setColour(Integer value) + { + this.colour = value; + } + + /** + * Gets the value of the start property. + * + */ + public int getStart() + { + return start; + } + + /** + * Sets the value of the start property. + * + */ + public void setStart(int value) + { + this.start = value; + } + + /** + * Gets the value of the end property. + * + */ + public int getEnd() + { + return end; + } + + /** + * Sets the value of the end property. + * + */ + public void setEnd(int value) + { + this.end = value; + } + + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } + + /** + * Gets the value of the hidden property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isHidden() + { + return hidden; + } + + /** + * Sets the value of the hidden property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setHidden(Boolean value) + { + this.hidden = value; + } + + /** + * Gets the value of the viewreference property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isViewreference() + { + return viewreference; + } + + /** + * Sets the value of the viewreference property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setViewreference(Boolean value) + { + this.viewreference = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <extension base="{www.jalview.org}pdbentry">
+     *       <sequence>
+     *         <element name="structureState" maxOccurs="unbounded" minOccurs="0">
+     *           <complexType>
+     *             <simpleContent>
+     *               <extension base="<http://www.w3.org/2001/XMLSchema>string">
+     *                 <attGroup ref="{www.jalview.org}swingwindow"/>
+     *                 <attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *                 <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *                 <attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+     *                 <attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+     *                 <attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+     *                 <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *               </extension>
+     *             </simpleContent>
+     *           </complexType>
+     *         </element>
+     *       </sequence>
+     *     </extension>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "structureState" }) + public static class Pdbids extends Pdbentry + { + + @XmlElement(namespace = "www.jalview.org") + protected List structureState; + + /** + * Gets the value of the structureState property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the structureState property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+       * getStructureState().add(newItem);
+       * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.JSeq.Pdbids.StructureState } + * + * + */ + public List getStructureState() + { + if (structureState == null) + { + structureState = new ArrayList(); + } + return this.structureState; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+       * <complexType>
+       *   <simpleContent>
+       *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
+       *       <attGroup ref="{www.jalview.org}swingwindow"/>
+       *       <attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+       *       <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *       <attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+       *       <attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+       *       <attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+       *       <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *     </extension>
+       *   </simpleContent>
+       * </complexType>
+       * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "value" }) + public static class StructureState + { + + @XmlValue + protected String value; + + @XmlAttribute(name = "visible") + protected Boolean visible; + + @XmlAttribute(name = "viewId") + protected String viewId; + + @XmlAttribute(name = "alignwithAlignPanel") + protected Boolean alignwithAlignPanel; + + @XmlAttribute(name = "colourwithAlignPanel") + protected Boolean colourwithAlignPanel; + + @XmlAttribute(name = "colourByJmol") + protected Boolean colourByJmol; + + @XmlAttribute(name = "type") + protected String type; + + @XmlAttribute(name = "width") + protected Integer width; + + @XmlAttribute(name = "height") + protected Integer height; + + @XmlAttribute(name = "xpos") + protected Integer xpos; - /** - * Gets the value of the annotationColours property. - * - * @return - * possible object is - * {@link AnnotationColourScheme } - * - */ - public AnnotationColourScheme getAnnotationColours() { - return annotationColours; - } + @XmlAttribute(name = "ypos") + protected Integer ypos; /** - * Sets the value of the annotationColours property. + * Gets the value of the value property. * - * @param value - * allowed object is - * {@link AnnotationColourScheme } - * - */ - public void setAnnotationColours(AnnotationColourScheme value) { - this.annotationColours = value; - } - - /** - * Gets the value of the start property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link Integer } - * */ - public Integer getStart() { - return start; + public String getValue() + { + return value; } /** - * Sets the value of the start property. + * Sets the value of the value property. * * @param value - * allowed object is - * {@link Integer } - * - */ - public void setStart(Integer value) { - this.start = value; - } - - /** - * Gets the value of the end property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link Integer } - * */ - public Integer getEnd() { - return end; + public void setValue(String value) + { + this.value = value; } /** - * Sets the value of the end property. + * Gets the value of the visible property. * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setEnd(Integer value) { - this.end = value; - } - - /** - * Gets the value of the name property. + * @return possible object is {@link Boolean } * - * @return - * possible object is - * {@link String } - * */ - public String getName() { - return name; + public Boolean isVisible() + { + return visible; } /** - * Sets the value of the name property. + * Sets the value of the visible property. * * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Gets the value of the colour property. + * allowed object is {@link Boolean } * - * @return - * possible object is - * {@link String } - * */ - public String getColour() { - return colour; + public void setVisible(Boolean value) + { + this.visible = value; } /** - * Sets the value of the colour property. + * Gets the value of the viewId property. * - * @param value - * allowed object is - * {@link String } - * - */ - public void setColour(String value) { - this.colour = value; - } - - /** - * Gets the value of the consThreshold property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link Integer } - * */ - public Integer getConsThreshold() { - return consThreshold; + public String getViewId() + { + return viewId; } /** - * Sets the value of the consThreshold property. + * Sets the value of the viewId property. * * @param value - * allowed object is - * {@link Integer } - * - */ - public void setConsThreshold(Integer value) { - this.consThreshold = value; - } - - /** - * Gets the value of the pidThreshold property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link Integer } - * */ - public Integer getPidThreshold() { - return pidThreshold; + public void setViewId(String value) + { + this.viewId = value; } /** - * Sets the value of the pidThreshold property. + * Gets the value of the alignwithAlignPanel property. * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setPidThreshold(Integer value) { - this.pidThreshold = value; - } - - /** - * Gets the value of the outlineColour property. + * @return possible object is {@link Boolean } * - * @return - * possible object is - * {@link Integer } - * */ - public Integer getOutlineColour() { - return outlineColour; + public boolean isAlignwithAlignPanel() + { + if (alignwithAlignPanel == null) + { + return true; + } + else + { + return alignwithAlignPanel; + } } /** - * Sets the value of the outlineColour property. + * Sets the value of the alignwithAlignPanel property. * * @param value - * allowed object is - * {@link Integer } - * - */ - public void setOutlineColour(Integer value) { - this.outlineColour = value; - } - - /** - * Gets the value of the displayBoxes property. + * allowed object is {@link Boolean } * - * @return - * possible object is - * {@link Boolean } - * */ - public Boolean isDisplayBoxes() { - return displayBoxes; + public void setAlignwithAlignPanel(Boolean value) + { + this.alignwithAlignPanel = value; } /** - * Sets the value of the displayBoxes property. + * Gets the value of the colourwithAlignPanel property. * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setDisplayBoxes(Boolean value) { - this.displayBoxes = value; - } - - /** - * Gets the value of the displayText property. + * @return possible object is {@link Boolean } * - * @return - * possible object is - * {@link Boolean } - * */ - public Boolean isDisplayText() { - return displayText; + public boolean isColourwithAlignPanel() + { + if (colourwithAlignPanel == null) + { + return false; + } + else + { + return colourwithAlignPanel; + } } /** - * Sets the value of the displayText property. + * Sets the value of the colourwithAlignPanel property. * * @param value - * allowed object is - * {@link Boolean } - * + * allowed object is {@link Boolean } + * */ - public void setDisplayText(Boolean value) { - this.displayText = value; + public void setColourwithAlignPanel(Boolean value) + { + this.colourwithAlignPanel = value; } /** - * Gets the value of the colourText property. + * Gets the value of the colourByJmol property. + * + * @return possible object is {@link Boolean } * - * @return - * possible object is - * {@link Boolean } - * */ - public Boolean isColourText() { - return colourText; + public boolean isColourByJmol() + { + if (colourByJmol == null) + { + return true; + } + else + { + return colourByJmol; + } } /** - * Sets the value of the colourText property. + * Sets the value of the colourByJmol property. * * @param value - * allowed object is - * {@link Boolean } - * + * allowed object is {@link Boolean } + * */ - public void setColourText(Boolean value) { - this.colourText = value; + public void setColourByJmol(Boolean value) + { + this.colourByJmol = value; } /** - * Gets the value of the textCol1 property. + * Gets the value of the type property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link Integer } - * */ - public Integer getTextCol1() { - return textCol1; + public String getType() + { + return type; } /** - * Sets the value of the textCol1 property. + * Sets the value of the type property. * * @param value - * allowed object is - * {@link Integer } - * + * allowed object is {@link String } + * */ - public void setTextCol1(Integer value) { - this.textCol1 = value; + public void setType(String value) + { + this.type = value; } /** - * Gets the value of the textCol2 property. + * Gets the value of the width property. + * + * @return possible object is {@link Integer } * - * @return - * possible object is - * {@link Integer } - * */ - public Integer getTextCol2() { - return textCol2; + public Integer getWidth() + { + return width; } /** - * Sets the value of the textCol2 property. + * Sets the value of the width property. * * @param value - * allowed object is - * {@link Integer } - * + * allowed object is {@link Integer } + * */ - public void setTextCol2(Integer value) { - this.textCol2 = value; + public void setWidth(Integer value) + { + this.width = value; } /** - * Gets the value of the textColThreshold property. + * Gets the value of the height property. + * + * @return possible object is {@link Integer } * - * @return - * possible object is - * {@link Integer } - * */ - public Integer getTextColThreshold() { - return textColThreshold; + public Integer getHeight() + { + return height; } /** - * Sets the value of the textColThreshold property. + * Sets the value of the height property. * * @param value - * allowed object is - * {@link Integer } - * + * allowed object is {@link Integer } + * */ - public void setTextColThreshold(Integer value) { - this.textColThreshold = value; + public void setHeight(Integer value) + { + this.height = value; } /** - * Gets the value of the showUnconserved property. + * Gets the value of the xpos property. + * + * @return possible object is {@link Integer } * - * @return - * possible object is - * {@link Boolean } - * */ - public Boolean isShowUnconserved() { - return showUnconserved; + public Integer getXpos() + { + return xpos; } /** - * Sets the value of the showUnconserved property. + * Sets the value of the xpos property. * * @param value - * allowed object is - * {@link Boolean } - * + * allowed object is {@link Integer } + * */ - public void setShowUnconserved(Boolean value) { - this.showUnconserved = value; + public void setXpos(Integer value) + { + this.xpos = value; } /** - * Gets the value of the ignoreGapsinConsensus property. + * Gets the value of the ypos property. + * + * @return possible object is {@link Integer } * - * @return - * possible object is - * {@link Boolean } - * */ - public boolean isIgnoreGapsinConsensus() { - if (ignoreGapsinConsensus == null) { - return true; - } else { - return ignoreGapsinConsensus; - } + public Integer getYpos() + { + return ypos; } /** - * Sets the value of the ignoreGapsinConsensus property. + * Sets the value of the ypos property. * * @param value - * allowed object is - * {@link Boolean } - * + * allowed object is {@link Integer } + * */ - public void setIgnoreGapsinConsensus(Boolean value) { - this.ignoreGapsinConsensus = value; + public void setYpos(Integer value) + { + this.ypos = value; } + } + + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <element name="secondaryStructure" maxOccurs="unbounded">
+     *           <complexType>
+     *             <complexContent>
+     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *                 <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *                 <attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *                 <attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *                 <attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *               </restriction>
+     *             </complexContent>
+     *           </complexType>
+     *         </element>
+     *       </sequence>
+     *       <attGroup ref="{www.jalview.org}swingwindow"/>
+     *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="dividerLocation" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       <attribute name="selectedRna" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "secondaryStructure" }) + public static class RnaViewer + { + + @XmlElement(namespace = "www.jalview.org", required = true) + protected List secondaryStructure; + + @XmlAttribute(name = "title") + protected String title; + + @XmlAttribute(name = "viewId") + protected String viewId; + + @XmlAttribute(name = "dividerLocation") + protected Integer dividerLocation; + + @XmlAttribute(name = "selectedRna") + protected Integer selectedRna; + + @XmlAttribute(name = "width") + protected Integer width; + + @XmlAttribute(name = "height") + protected Integer height; + + @XmlAttribute(name = "xpos") + protected Integer xpos; + + @XmlAttribute(name = "ypos") + protected Integer ypos; + + /** + * Gets the value of the secondaryStructure property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the secondaryStructure property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+       * getSecondaryStructure().add(newItem);
+       * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.JSeq.RnaViewer.SecondaryStructure } + * + * + */ + public List getSecondaryStructure() + { + if (secondaryStructure == null) + { + secondaryStructure = new ArrayList(); + } + return this.secondaryStructure; + } + + /** + * Gets the value of the title property. + * + * @return possible object is {@link String } + * + */ + public String getTitle() + { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTitle(String value) + { + this.title = value; + } + + /** + * Gets the value of the viewId property. + * + * @return possible object is {@link String } + * + */ + public String getViewId() + { + return viewId; + } + + /** + * Sets the value of the viewId property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setViewId(String value) + { + this.viewId = value; + } + + /** + * Gets the value of the dividerLocation property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getDividerLocation() + { + return dividerLocation; + } + + /** + * Sets the value of the dividerLocation property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setDividerLocation(Integer value) + { + this.dividerLocation = value; + } + + /** + * Gets the value of the selectedRna property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getSelectedRna() + { + return selectedRna; + } + + /** + * Sets the value of the selectedRna property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setSelectedRna(Integer value) + { + this.selectedRna = value; + } + + /** + * Gets the value of the width property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getWidth() + { + return width; + } + + /** + * Sets the value of the width property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setWidth(Integer value) + { + this.width = value; + } + + /** + * Gets the value of the height property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getHeight() + { + return height; + } + + /** + * Sets the value of the height property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setHeight(Integer value) + { + this.height = value; + } + + /** + * Gets the value of the xpos property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getXpos() + { + return xpos; + } + + /** + * Sets the value of the xpos property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setXpos(Integer value) + { + this.xpos = value; + } + + /** + * Gets the value of the ypos property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getYpos() + { + return ypos; + } + + /** + * Sets the value of the ypos property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setYpos(Integer value) + { + this.ypos = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+       * <complexType>
+       *   <complexContent>
+       *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+       *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *       <attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *       <attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+       *       <attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
+       *     </restriction>
+       *   </complexContent>
+       * </complexType>
+       * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class SecondaryStructure + { + + @XmlAttribute(name = "title") + protected String title; + + @XmlAttribute(name = "annotationId", required = true) + protected String annotationId; + + @XmlAttribute(name = "gapped") + protected Boolean gapped; + + @XmlAttribute(name = "viewerState") + protected String viewerState; + /** - * Gets the value of the showConsensusHistogram property. + * Gets the value of the title property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link Boolean } - * */ - public boolean isShowConsensusHistogram() { - if (showConsensusHistogram == null) { - return true; - } else { - return showConsensusHistogram; - } + public String getTitle() + { + return title; } /** - * Sets the value of the showConsensusHistogram property. + * Sets the value of the title property. * * @param value - * allowed object is - * {@link Boolean } - * + * allowed object is {@link String } + * */ - public void setShowConsensusHistogram(Boolean value) { - this.showConsensusHistogram = value; + public void setTitle(String value) + { + this.title = value; } /** - * Gets the value of the showSequenceLogo property. + * Gets the value of the annotationId property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link Boolean } - * */ - public boolean isShowSequenceLogo() { - if (showSequenceLogo == null) { - return false; - } else { - return showSequenceLogo; - } + public String getAnnotationId() + { + return annotationId; } /** - * Sets the value of the showSequenceLogo property. + * Sets the value of the annotationId property. * * @param value - * allowed object is - * {@link Boolean } - * + * allowed object is {@link String } + * */ - public void setShowSequenceLogo(Boolean value) { - this.showSequenceLogo = value; + public void setAnnotationId(String value) + { + this.annotationId = value; } /** - * Gets the value of the normaliseSequenceLogo property. + * Gets the value of the gapped property. + * + * @return possible object is {@link Boolean } * - * @return - * possible object is - * {@link Boolean } - * */ - public boolean isNormaliseSequenceLogo() { - if (normaliseSequenceLogo == null) { - return false; - } else { - return normaliseSequenceLogo; - } + public Boolean isGapped() + { + return gapped; } /** - * Sets the value of the normaliseSequenceLogo property. + * Sets the value of the gapped property. * * @param value - * allowed object is - * {@link Boolean } - * + * allowed object is {@link Boolean } + * */ - public void setNormaliseSequenceLogo(Boolean value) { - this.normaliseSequenceLogo = value; + public void setGapped(Boolean value) + { + this.gapped = value; } /** - * Gets the value of the id property. + * Gets the value of the viewerState property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getId() { - return id; + public String getViewerState() + { + return viewerState; } /** - * Sets the value of the id property. + * Sets the value of the viewerState property. * * @param value - * allowed object is - * {@link String } - * + * allowed object is {@link String } + * */ - public void setId(String value) { - this.id = value; + public void setViewerState(String value) + { + this.viewerState = value; } + } + + } + + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="sequencePoint" maxOccurs="unbounded">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <attGroup ref="{www.jalview.org}position"/>
+   *                 <attribute name="sequenceRef" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *         <element name="axis" maxOccurs="3" minOccurs="3">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <attGroup ref="{www.jalview.org}position"/>
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *         <element name="seqPointMin">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <attGroup ref="{www.jalview.org}position"/>
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *         <element name="seqPointMax">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <attGroup ref="{www.jalview.org}position"/>
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *         <element name="pcaData" type="{www.jalview.org}PcaDataType"/>
+   *       </sequence>
+   *       <attGroup ref="{www.jalview.org}SimilarityParams"/>
+   *       <attGroup ref="{www.jalview.org}swingwindow"/>
+   *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="scoreModelName" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="xDim" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="yDim" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="zDim" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="bgColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="scaleFactor" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *       <attribute name="showLabels" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="linkToAllViews" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType( + name = "", + propOrder = + { "sequencePoint", "axis", "seqPointMin", "seqPointMax", "pcaData" }) + public static class PcaViewer + { + + @XmlElement(namespace = "www.jalview.org", required = true) + protected List sequencePoint; + + @XmlElement(namespace = "www.jalview.org", required = true) + protected List axis; + + @XmlElement(namespace = "www.jalview.org", required = true) + protected JalviewModel.PcaViewer.SeqPointMin seqPointMin; + + @XmlElement(namespace = "www.jalview.org", required = true) + protected JalviewModel.PcaViewer.SeqPointMax seqPointMax; + + @XmlElement(namespace = "www.jalview.org", required = true) + protected PcaDataType pcaData; + + @XmlAttribute(name = "title") + protected String title; + + @XmlAttribute(name = "scoreModelName") + protected String scoreModelName; + + @XmlAttribute(name = "xDim") + protected Integer xDim; + + @XmlAttribute(name = "yDim") + protected Integer yDim; + + @XmlAttribute(name = "zDim") + protected Integer zDim; + + @XmlAttribute(name = "bgColour") + protected Integer bgColour; + + @XmlAttribute(name = "scaleFactor") + protected Float scaleFactor; + + @XmlAttribute(name = "showLabels") + protected Boolean showLabels; + + @XmlAttribute(name = "linkToAllViews") + protected Boolean linkToAllViews; + + @XmlAttribute(name = "includeGaps") + protected Boolean includeGaps; + + @XmlAttribute(name = "matchGaps") + protected Boolean matchGaps; + + @XmlAttribute(name = "includeGappedColumns") + protected Boolean includeGappedColumns; + + @XmlAttribute(name = "denominateByShortestLength") + protected Boolean denominateByShortestLength; + + @XmlAttribute(name = "width") + protected Integer width; + + @XmlAttribute(name = "height") + protected Integer height; + + @XmlAttribute(name = "xpos") + protected Integer xpos; + + @XmlAttribute(name = "ypos") + protected Integer ypos; + + /** + * Gets the value of the sequencePoint property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the sequencePoint property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getSequencePoint().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.PcaViewer.SequencePoint } + * + * + */ + public List getSequencePoint() + { + if (sequencePoint == null) + { + sequencePoint = new ArrayList(); + } + return this.sequencePoint; + } + + /** + * Gets the value of the axis property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the axis property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getAxis().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.PcaViewer.Axis } + * + * + */ + public List getAxis() + { + if (axis == null) + { + axis = new ArrayList(); + } + return this.axis; + } + + /** + * Gets the value of the seqPointMin property. + * + * @return possible object is {@link JalviewModel.PcaViewer.SeqPointMin } + * + */ + public JalviewModel.PcaViewer.SeqPointMin getSeqPointMin() + { + return seqPointMin; + } + + /** + * Sets the value of the seqPointMin property. + * + * @param value + * allowed object is {@link JalviewModel.PcaViewer.SeqPointMin } + * + */ + public void setSeqPointMin(JalviewModel.PcaViewer.SeqPointMin value) + { + this.seqPointMin = value; + } + + /** + * Gets the value of the seqPointMax property. + * + * @return possible object is {@link JalviewModel.PcaViewer.SeqPointMax } + * + */ + public JalviewModel.PcaViewer.SeqPointMax getSeqPointMax() + { + return seqPointMax; + } + + /** + * Sets the value of the seqPointMax property. + * + * @param value + * allowed object is {@link JalviewModel.PcaViewer.SeqPointMax } + * + */ + public void setSeqPointMax(JalviewModel.PcaViewer.SeqPointMax value) + { + this.seqPointMax = value; + } + + /** + * Gets the value of the pcaData property. + * + * @return possible object is {@link PcaDataType } + * + */ + public PcaDataType getPcaData() + { + return pcaData; + } + + /** + * Sets the value of the pcaData property. + * + * @param value + * allowed object is {@link PcaDataType } + * + */ + public void setPcaData(PcaDataType value) + { + this.pcaData = value; + } + + /** + * Gets the value of the title property. + * + * @return possible object is {@link String } + * + */ + public String getTitle() + { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTitle(String value) + { + this.title = value; + } + + /** + * Gets the value of the scoreModelName property. + * + * @return possible object is {@link String } + * + */ + public String getScoreModelName() + { + return scoreModelName; + } + + /** + * Sets the value of the scoreModelName property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setScoreModelName(String value) + { + this.scoreModelName = value; + } + + /** + * Gets the value of the xDim property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getXDim() + { + return xDim; + } + + /** + * Sets the value of the xDim property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setXDim(Integer value) + { + this.xDim = value; } + /** + * Gets the value of the yDim property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getYDim() + { + return yDim; + } /** - *

Java class for anonymous complex type. + * Sets the value of the yDim property. * - *

The following schema fragment specifies the expected content contained within this class. + * @param value + * allowed object is {@link Integer } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="features" type="{www.jalview.org}feature" maxOccurs="unbounded" minOccurs="0"/>
-     *         <element name="pdbids" maxOccurs="unbounded" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <extension base="{www.jalview.org}pdbentry">
-     *                 <sequence>
-     *                   <element name="structureState" maxOccurs="unbounded" minOccurs="0">
-     *                     <complexType>
-     *                       <simpleContent>
-     *                         <extension base="<http://www.w3.org/2001/XMLSchema>string">
-     *                           <attGroup ref="{www.jalview.org}swingwindow"/>
-     *                           <attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *                           <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                           <attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-     *                           <attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *                           <attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-     *                           <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                         </extension>
-     *                       </simpleContent>
-     *                     </complexType>
-     *                   </element>
-     *                 </sequence>
-     *               </extension>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *         <element name="hiddenSequences" type="{http://www.w3.org/2001/XMLSchema}int" maxOccurs="unbounded" minOccurs="0"/>
-     *         <element name="rnaViewer" maxOccurs="unbounded" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <sequence>
-     *                   <element name="secondaryStructure" maxOccurs="unbounded">
-     *                     <complexType>
-     *                       <complexContent>
-     *                         <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                           <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                           <attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                           <attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *                           <attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                         </restriction>
-     *                       </complexContent>
-     *                     </complexType>
-     *                   </element>
-     *                 </sequence>
-     *                 <attGroup ref="{www.jalview.org}swingwindow"/>
-     *                 <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                 <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                 <attribute name="dividerLocation" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *                 <attribute name="selectedRna" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *       </sequence>
-     *       <attribute name="colour" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="start" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="hidden" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="viewreference" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public void setYDim(Integer value) + { + this.yDim = value; + } + + /** + * Gets the value of the zDim property. * + * @return possible object is {@link Integer } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "features", - "pdbids", - "hiddenSequences", - "rnaViewer" - }) - public static class JSeq { - - @XmlElement(namespace = "www.jalview.org") - protected List features; - @XmlElement(namespace = "www.jalview.org") - protected List pdbids; - @XmlElement(namespace = "www.jalview.org", type = Integer.class) - protected List hiddenSequences; - @XmlElement(namespace = "www.jalview.org") - protected List rnaViewer; - @XmlAttribute(name = "colour") - protected Integer colour; - @XmlAttribute(name = "start", required = true) - protected int start; - @XmlAttribute(name = "end", required = true) - protected int end; - @XmlAttribute(name = "id", required = true) - protected String id; - @XmlAttribute(name = "hidden") - protected Boolean hidden; - @XmlAttribute(name = "viewreference") - protected Boolean viewreference; + public Integer getZDim() + { + return zDim; + } - /** - * Gets the value of the features property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the features property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getFeatures().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Feature } - * - * - */ - public List getFeatures() { - if (features == null) { - features = new ArrayList(); - } - return this.features; - } + /** + * Sets the value of the zDim property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setZDim(Integer value) + { + this.zDim = value; + } - /** - * Gets the value of the pdbids property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the pdbids property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getPdbids().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.JSeq.Pdbids } - * - * - */ - public List getPdbids() { - if (pdbids == null) { - pdbids = new ArrayList(); - } - return this.pdbids; - } + /** + * Gets the value of the bgColour property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getBgColour() + { + return bgColour; + } - /** - * Gets the value of the hiddenSequences property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the hiddenSequences property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getHiddenSequences().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getHiddenSequences() { - if (hiddenSequences == null) { - hiddenSequences = new ArrayList(); - } - return this.hiddenSequences; - } + /** + * Sets the value of the bgColour property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setBgColour(Integer value) + { + this.bgColour = value; + } - /** - * Gets the value of the rnaViewer property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the rnaViewer property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getRnaViewer().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.JSeq.RnaViewer } - * - * - */ - public List getRnaViewer() { - if (rnaViewer == null) { - rnaViewer = new ArrayList(); - } - return this.rnaViewer; - } + /** + * Gets the value of the scaleFactor property. + * + * @return possible object is {@link Float } + * + */ + public Float getScaleFactor() + { + return scaleFactor; + } - /** - * Gets the value of the colour property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getColour() { - return colour; - } + /** + * Sets the value of the scaleFactor property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setScaleFactor(Float value) + { + this.scaleFactor = value; + } - /** - * Sets the value of the colour property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setColour(Integer value) { - this.colour = value; - } + /** + * Gets the value of the showLabels property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowLabels() + { + return showLabels; + } - /** - * Gets the value of the start property. - * - */ - public int getStart() { - return start; - } + /** + * Sets the value of the showLabels property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowLabels(Boolean value) + { + this.showLabels = value; + } - /** - * Sets the value of the start property. - * - */ - public void setStart(int value) { - this.start = value; - } + /** + * Gets the value of the linkToAllViews property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isLinkToAllViews() + { + return linkToAllViews; + } - /** - * Gets the value of the end property. - * - */ - public int getEnd() { - return end; - } + /** + * Sets the value of the linkToAllViews property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setLinkToAllViews(Boolean value) + { + this.linkToAllViews = value; + } - /** - * Sets the value of the end property. - * - */ - public void setEnd(int value) { - this.end = value; - } + /** + * Gets the value of the includeGaps property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isIncludeGaps() + { + return includeGaps; + } - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } + /** + * Sets the value of the includeGaps property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setIncludeGaps(Boolean value) + { + this.includeGaps = value; + } - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; - } + /** + * Gets the value of the matchGaps property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isMatchGaps() + { + return matchGaps; + } - /** - * Gets the value of the hidden property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isHidden() { - return hidden; - } + /** + * Sets the value of the matchGaps property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setMatchGaps(Boolean value) + { + this.matchGaps = value; + } - /** - * Sets the value of the hidden property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setHidden(Boolean value) { - this.hidden = value; - } + /** + * Gets the value of the includeGappedColumns property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isIncludeGappedColumns() + { + return includeGappedColumns; + } - /** - * Gets the value of the viewreference property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isViewreference() { - return viewreference; - } + /** + * Sets the value of the includeGappedColumns property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setIncludeGappedColumns(Boolean value) + { + this.includeGappedColumns = value; + } - /** - * Sets the value of the viewreference property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setViewreference(Boolean value) { - this.viewreference = value; - } + /** + * Gets the value of the denominateByShortestLength property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isDenominateByShortestLength() + { + return denominateByShortestLength; + } + /** + * Sets the value of the denominateByShortestLength property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setDenominateByShortestLength(Boolean value) + { + this.denominateByShortestLength = value; + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <extension base="{www.jalview.org}pdbentry">
-         *       <sequence>
-         *         <element name="structureState" maxOccurs="unbounded" minOccurs="0">
-         *           <complexType>
-         *             <simpleContent>
-         *               <extension base="<http://www.w3.org/2001/XMLSchema>string">
-         *                 <attGroup ref="{www.jalview.org}swingwindow"/>
-         *                 <attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-         *                 <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *                 <attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-         *                 <attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-         *                 <attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-         *                 <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *               </extension>
-         *             </simpleContent>
-         *           </complexType>
-         *         </element>
-         *       </sequence>
-         *     </extension>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "structureState" - }) - public static class Pdbids - extends Pdbentry - { + /** + * Gets the value of the width property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getWidth() + { + return width; + } - @XmlElement(namespace = "www.jalview.org") - protected List structureState; - - /** - * Gets the value of the structureState property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the structureState property. - * - *

- * For example, to add a new item, do as follows: - *

-             *    getStructureState().add(newItem);
-             * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.JSeq.Pdbids.StructureState } - * - * - */ - public List getStructureState() { - if (structureState == null) { - structureState = new ArrayList(); - } - return this.structureState; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-             * <complexType>
-             *   <simpleContent>
-             *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
-             *       <attGroup ref="{www.jalview.org}swingwindow"/>
-             *       <attribute name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-             *       <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
-             *       <attribute name="alignwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-             *       <attribute name="colourwithAlignPanel" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-             *       <attribute name="colourByJmol" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-             *       <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
-             *     </extension>
-             *   </simpleContent>
-             * </complexType>
-             * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "value" - }) - public static class StructureState { - - @XmlValue - protected String value; - @XmlAttribute(name = "visible") - protected Boolean visible; - @XmlAttribute(name = "viewId") - protected String viewId; - @XmlAttribute(name = "alignwithAlignPanel") - protected Boolean alignwithAlignPanel; - @XmlAttribute(name = "colourwithAlignPanel") - protected Boolean colourwithAlignPanel; - @XmlAttribute(name = "colourByJmol") - protected Boolean colourByJmol; - @XmlAttribute(name = "type") - protected String type; - @XmlAttribute(name = "width") - protected Integer width; - @XmlAttribute(name = "height") - protected Integer height; - @XmlAttribute(name = "xpos") - protected Integer xpos; - @XmlAttribute(name = "ypos") - protected Integer ypos; - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Gets the value of the visible property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isVisible() { - return visible; - } - - /** - * Sets the value of the visible property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setVisible(Boolean value) { - this.visible = value; - } - - /** - * Gets the value of the viewId property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getViewId() { - return viewId; - } - - /** - * Sets the value of the viewId property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setViewId(String value) { - this.viewId = value; - } - - /** - * Gets the value of the alignwithAlignPanel property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isAlignwithAlignPanel() { - if (alignwithAlignPanel == null) { - return true; - } else { - return alignwithAlignPanel; - } - } - - /** - * Sets the value of the alignwithAlignPanel property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setAlignwithAlignPanel(Boolean value) { - this.alignwithAlignPanel = value; - } - - /** - * Gets the value of the colourwithAlignPanel property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isColourwithAlignPanel() { - if (colourwithAlignPanel == null) { - return false; - } else { - return colourwithAlignPanel; - } - } - - /** - * Sets the value of the colourwithAlignPanel property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setColourwithAlignPanel(Boolean value) { - this.colourwithAlignPanel = value; - } - - /** - * Gets the value of the colourByJmol property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isColourByJmol() { - if (colourByJmol == null) { - return true; - } else { - return colourByJmol; - } - } - - /** - * Sets the value of the colourByJmol property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setColourByJmol(Boolean value) { - this.colourByJmol = value; - } - - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Gets the value of the width property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getWidth() { - return width; - } - - /** - * Sets the value of the width property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setWidth(Integer value) { - this.width = value; - } - - /** - * Gets the value of the height property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getHeight() { - return height; - } - - /** - * Sets the value of the height property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setHeight(Integer value) { - this.height = value; - } - - /** - * Gets the value of the xpos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getXpos() { - return xpos; - } - - /** - * Sets the value of the xpos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setXpos(Integer value) { - this.xpos = value; - } - - /** - * Gets the value of the ypos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getYpos() { - return ypos; - } - - /** - * Sets the value of the ypos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setYpos(Integer value) { - this.ypos = value; - } - - } + /** + * Sets the value of the width property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setWidth(Integer value) + { + this.width = value; + } - } + /** + * Gets the value of the height property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getHeight() + { + return height; + } + /** + * Sets the value of the height property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setHeight(Integer value) + { + this.height = value; + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <sequence>
-         *         <element name="secondaryStructure" maxOccurs="unbounded">
-         *           <complexType>
-         *             <complexContent>
-         *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *                 <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *                 <attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *                 <attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-         *                 <attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *               </restriction>
-         *             </complexContent>
-         *           </complexType>
-         *         </element>
-         *       </sequence>
-         *       <attGroup ref="{www.jalview.org}swingwindow"/>
-         *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="viewId" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="dividerLocation" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *       <attribute name="selectedRna" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "secondaryStructure" - }) - public static class RnaViewer { - - @XmlElement(namespace = "www.jalview.org", required = true) - protected List secondaryStructure; - @XmlAttribute(name = "title") - protected String title; - @XmlAttribute(name = "viewId") - protected String viewId; - @XmlAttribute(name = "dividerLocation") - protected Integer dividerLocation; - @XmlAttribute(name = "selectedRna") - protected Integer selectedRna; - @XmlAttribute(name = "width") - protected Integer width; - @XmlAttribute(name = "height") - protected Integer height; - @XmlAttribute(name = "xpos") - protected Integer xpos; - @XmlAttribute(name = "ypos") - protected Integer ypos; - - /** - * Gets the value of the secondaryStructure property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the secondaryStructure property. - * - *

- * For example, to add a new item, do as follows: - *

-             *    getSecondaryStructure().add(newItem);
-             * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.JSeq.RnaViewer.SecondaryStructure } - * - * - */ - public List getSecondaryStructure() { - if (secondaryStructure == null) { - secondaryStructure = new ArrayList(); - } - return this.secondaryStructure; - } - - /** - * Gets the value of the title property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTitle() { - return title; - } - - /** - * Sets the value of the title property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTitle(String value) { - this.title = value; - } - - /** - * Gets the value of the viewId property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getViewId() { - return viewId; - } - - /** - * Sets the value of the viewId property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setViewId(String value) { - this.viewId = value; - } - - /** - * Gets the value of the dividerLocation property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getDividerLocation() { - return dividerLocation; - } - - /** - * Sets the value of the dividerLocation property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setDividerLocation(Integer value) { - this.dividerLocation = value; - } - - /** - * Gets the value of the selectedRna property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getSelectedRna() { - return selectedRna; - } - - /** - * Sets the value of the selectedRna property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setSelectedRna(Integer value) { - this.selectedRna = value; - } - - /** - * Gets the value of the width property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getWidth() { - return width; - } - - /** - * Sets the value of the width property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setWidth(Integer value) { - this.width = value; - } - - /** - * Gets the value of the height property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getHeight() { - return height; - } - - /** - * Sets the value of the height property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setHeight(Integer value) { - this.height = value; - } - - /** - * Gets the value of the xpos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getXpos() { - return xpos; - } - - /** - * Sets the value of the xpos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setXpos(Integer value) { - this.xpos = value; - } - - /** - * Gets the value of the ypos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getYpos() { - return ypos; - } - - /** - * Sets the value of the ypos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setYpos(Integer value) { - this.ypos = value; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-             * <complexType>
-             *   <complexContent>
-             *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-             *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
-             *       <attribute name="annotationId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-             *       <attribute name="gapped" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-             *       <attribute name="viewerState" type="{http://www.w3.org/2001/XMLSchema}string" />
-             *     </restriction>
-             *   </complexContent>
-             * </complexType>
-             * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class SecondaryStructure { - - @XmlAttribute(name = "title") - protected String title; - @XmlAttribute(name = "annotationId", required = true) - protected String annotationId; - @XmlAttribute(name = "gapped") - protected Boolean gapped; - @XmlAttribute(name = "viewerState") - protected String viewerState; - - /** - * Gets the value of the title property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTitle() { - return title; - } - - /** - * Sets the value of the title property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTitle(String value) { - this.title = value; - } - - /** - * Gets the value of the annotationId property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAnnotationId() { - return annotationId; - } - - /** - * Sets the value of the annotationId property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAnnotationId(String value) { - this.annotationId = value; - } - - /** - * Gets the value of the gapped property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isGapped() { - return gapped; - } - - /** - * Sets the value of the gapped property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setGapped(Boolean value) { - this.gapped = value; - } - - /** - * Gets the value of the viewerState property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getViewerState() { - return viewerState; - } - - /** - * Sets the value of the viewerState property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setViewerState(String value) { - this.viewerState = value; - } - - } + /** + * Gets the value of the xpos property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getXpos() + { + return xpos; + } - } + /** + * Sets the value of the xpos property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setXpos(Integer value) + { + this.xpos = value; + } + /** + * Gets the value of the ypos property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getYpos() + { + return ypos; } + /** + * Sets the value of the ypos property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setYpos(Integer value) + { + this.ypos = value; + } /** - *

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained + * within this class. * *

      * <complexType>
      *   <complexContent>
      *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="sequencePoint" maxOccurs="unbounded">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <attGroup ref="{www.jalview.org}position"/>
-     *                 <attribute name="sequenceRef" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *         <element name="axis" maxOccurs="3" minOccurs="3">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <attGroup ref="{www.jalview.org}position"/>
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *         <element name="seqPointMin">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <attGroup ref="{www.jalview.org}position"/>
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *         <element name="seqPointMax">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <attGroup ref="{www.jalview.org}position"/>
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *         <element name="pcaData" type="{www.jalview.org}PcaDataType"/>
-     *       </sequence>
-     *       <attGroup ref="{www.jalview.org}SimilarityParams"/>
-     *       <attGroup ref="{www.jalview.org}swingwindow"/>
-     *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="scoreModelName" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="xDim" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="yDim" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="zDim" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="bgColour" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="scaleFactor" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *       <attribute name="showLabels" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="linkToAllViews" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *       <attGroup ref="{www.jalview.org}position"/>
      *     </restriction>
      *   </complexContent>
      * </complexType>
@@ -3145,3670 +3859,3130 @@ public class JalviewModel {
      * 
      */
     @XmlAccessorType(XmlAccessType.FIELD)
-    @XmlType(name = "", propOrder = {
-        "sequencePoint",
-        "axis",
-        "seqPointMin",
-        "seqPointMax",
-        "pcaData"
-    })
-    public static class PcaViewer {
-
-        @XmlElement(namespace = "www.jalview.org", required = true)
-        protected List sequencePoint;
-        @XmlElement(namespace = "www.jalview.org", required = true)
-        protected List axis;
-        @XmlElement(namespace = "www.jalview.org", required = true)
-        protected JalviewModel.PcaViewer.SeqPointMin seqPointMin;
-        @XmlElement(namespace = "www.jalview.org", required = true)
-        protected JalviewModel.PcaViewer.SeqPointMax seqPointMax;
-        @XmlElement(namespace = "www.jalview.org", required = true)
-        protected PcaDataType pcaData;
-        @XmlAttribute(name = "title")
-        protected String title;
-        @XmlAttribute(name = "scoreModelName")
-        protected String scoreModelName;
-        @XmlAttribute(name = "xDim")
-        protected Integer xDim;
-        @XmlAttribute(name = "yDim")
-        protected Integer yDim;
-        @XmlAttribute(name = "zDim")
-        protected Integer zDim;
-        @XmlAttribute(name = "bgColour")
-        protected Integer bgColour;
-        @XmlAttribute(name = "scaleFactor")
-        protected Float scaleFactor;
-        @XmlAttribute(name = "showLabels")
-        protected Boolean showLabels;
-        @XmlAttribute(name = "linkToAllViews")
-        protected Boolean linkToAllViews;
-        @XmlAttribute(name = "includeGaps")
-        protected Boolean includeGaps;
-        @XmlAttribute(name = "matchGaps")
-        protected Boolean matchGaps;
-        @XmlAttribute(name = "includeGappedColumns")
-        protected Boolean includeGappedColumns;
-        @XmlAttribute(name = "denominateByShortestLength")
-        protected Boolean denominateByShortestLength;
-        @XmlAttribute(name = "width")
-        protected Integer width;
-        @XmlAttribute(name = "height")
-        protected Integer height;
-        @XmlAttribute(name = "xpos")
-        protected Integer xpos;
-        @XmlAttribute(name = "ypos")
-        protected Integer ypos;
-
-        /**
-         * Gets the value of the sequencePoint property.
-         * 
-         * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the sequencePoint property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getSequencePoint().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.PcaViewer.SequencePoint } - * - * - */ - public List getSequencePoint() { - if (sequencePoint == null) { - sequencePoint = new ArrayList(); - } - return this.sequencePoint; - } - - /** - * Gets the value of the axis property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the axis property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getAxis().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.PcaViewer.Axis } - * - * - */ - public List getAxis() { - if (axis == null) { - axis = new ArrayList(); - } - return this.axis; - } - - /** - * Gets the value of the seqPointMin property. - * - * @return - * possible object is - * {@link JalviewModel.PcaViewer.SeqPointMin } - * - */ - public JalviewModel.PcaViewer.SeqPointMin getSeqPointMin() { - return seqPointMin; - } - - /** - * Sets the value of the seqPointMin property. - * - * @param value - * allowed object is - * {@link JalviewModel.PcaViewer.SeqPointMin } - * - */ - public void setSeqPointMin(JalviewModel.PcaViewer.SeqPointMin value) { - this.seqPointMin = value; - } - - /** - * Gets the value of the seqPointMax property. - * - * @return - * possible object is - * {@link JalviewModel.PcaViewer.SeqPointMax } - * - */ - public JalviewModel.PcaViewer.SeqPointMax getSeqPointMax() { - return seqPointMax; - } - - /** - * Sets the value of the seqPointMax property. - * - * @param value - * allowed object is - * {@link JalviewModel.PcaViewer.SeqPointMax } - * - */ - public void setSeqPointMax(JalviewModel.PcaViewer.SeqPointMax value) { - this.seqPointMax = value; - } - - /** - * Gets the value of the pcaData property. - * - * @return - * possible object is - * {@link PcaDataType } - * - */ - public PcaDataType getPcaData() { - return pcaData; - } - - /** - * Sets the value of the pcaData property. - * - * @param value - * allowed object is - * {@link PcaDataType } - * - */ - public void setPcaData(PcaDataType value) { - this.pcaData = value; - } - - /** - * Gets the value of the title property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTitle() { - return title; - } - - /** - * Sets the value of the title property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTitle(String value) { - this.title = value; - } - - /** - * Gets the value of the scoreModelName property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getScoreModelName() { - return scoreModelName; - } - - /** - * Sets the value of the scoreModelName property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setScoreModelName(String value) { - this.scoreModelName = value; - } - - /** - * Gets the value of the xDim property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getXDim() { - return xDim; - } - - /** - * Sets the value of the xDim property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setXDim(Integer value) { - this.xDim = value; - } - - /** - * Gets the value of the yDim property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getYDim() { - return yDim; - } + @XmlType(name = "") + public static class Axis + { + + @XmlAttribute(name = "xPos") + protected Float xPos; + + @XmlAttribute(name = "yPos") + protected Float yPos; + + @XmlAttribute(name = "zPos") + protected Float zPos; + + /** + * Gets the value of the xPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getXPos() + { + return xPos; + } + + /** + * Sets the value of the xPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setXPos(Float value) + { + this.xPos = value; + } + + /** + * Gets the value of the yPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getYPos() + { + return yPos; + } + + /** + * Sets the value of the yPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setYPos(Float value) + { + this.yPos = value; + } + + /** + * Gets the value of the zPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getZPos() + { + return zPos; + } + + /** + * Sets the value of the zPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setZPos(Float value) + { + this.zPos = value; + } - /** - * Sets the value of the yDim property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setYDim(Integer value) { - this.yDim = value; - } + } - /** - * Gets the value of the zDim property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getZDim() { - return zDim; - } + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attGroup ref="{www.jalview.org}position"/>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class SeqPointMax + { + + @XmlAttribute(name = "xPos") + protected Float xPos; + + @XmlAttribute(name = "yPos") + protected Float yPos; + + @XmlAttribute(name = "zPos") + protected Float zPos; + + /** + * Gets the value of the xPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getXPos() + { + return xPos; + } + + /** + * Sets the value of the xPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setXPos(Float value) + { + this.xPos = value; + } + + /** + * Gets the value of the yPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getYPos() + { + return yPos; + } + + /** + * Sets the value of the yPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setYPos(Float value) + { + this.yPos = value; + } + + /** + * Gets the value of the zPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getZPos() + { + return zPos; + } + + /** + * Sets the value of the zPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setZPos(Float value) + { + this.zPos = value; + } - /** - * Sets the value of the zDim property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setZDim(Integer value) { - this.zDim = value; - } + } - /** - * Gets the value of the bgColour property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getBgColour() { - return bgColour; - } + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attGroup ref="{www.jalview.org}position"/>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class SeqPointMin + { + + @XmlAttribute(name = "xPos") + protected Float xPos; + + @XmlAttribute(name = "yPos") + protected Float yPos; + + @XmlAttribute(name = "zPos") + protected Float zPos; + + /** + * Gets the value of the xPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getXPos() + { + return xPos; + } + + /** + * Sets the value of the xPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setXPos(Float value) + { + this.xPos = value; + } + + /** + * Gets the value of the yPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getYPos() + { + return yPos; + } + + /** + * Sets the value of the yPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setYPos(Float value) + { + this.yPos = value; + } + + /** + * Gets the value of the zPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getZPos() + { + return zPos; + } + + /** + * Sets the value of the zPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setZPos(Float value) + { + this.zPos = value; + } - /** - * Sets the value of the bgColour property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setBgColour(Integer value) { - this.bgColour = value; - } + } - /** - * Gets the value of the scaleFactor property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getScaleFactor() { - return scaleFactor; - } + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attGroup ref="{www.jalview.org}position"/>
+     *       <attribute name="sequenceRef" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class SequencePoint + { + + @XmlAttribute(name = "sequenceRef") + protected String sequenceRef; + + @XmlAttribute(name = "xPos") + protected Float xPos; + + @XmlAttribute(name = "yPos") + protected Float yPos; + + @XmlAttribute(name = "zPos") + protected Float zPos; + + /** + * Gets the value of the sequenceRef property. + * + * @return possible object is {@link String } + * + */ + public String getSequenceRef() + { + return sequenceRef; + } + + /** + * Sets the value of the sequenceRef property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setSequenceRef(String value) + { + this.sequenceRef = value; + } + + /** + * Gets the value of the xPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getXPos() + { + return xPos; + } + + /** + * Sets the value of the xPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setXPos(Float value) + { + this.xPos = value; + } + + /** + * Gets the value of the yPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getYPos() + { + return yPos; + } + + /** + * Sets the value of the yPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setYPos(Float value) + { + this.yPos = value; + } + + /** + * Gets the value of the zPos property. + * + * @return possible object is {@link Float } + * + */ + public Float getZPos() + { + return zPos; + } + + /** + * Sets the value of the zPos property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setZPos(Float value) + { + this.zPos = value; + } - /** - * Sets the value of the scaleFactor property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setScaleFactor(Float value) { - this.scaleFactor = value; - } + } - /** - * Gets the value of the showLabels property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowLabels() { - return showLabels; - } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence minOccurs="0">
+   *         <element name="title" type="{http://www.w3.org/2001/XMLSchema}string"/>
+   *         <element name="newick" type="{http://www.w3.org/2001/XMLSchema}string"/>
+   *       </sequence>
+   *       <attGroup ref="{www.jalview.org}swingwindow"/>
+   *       <attribute name="fontName" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="fontSize" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="fontStyle" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *       <attribute name="showBootstrap" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="showDistances" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="markUnlinked" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="fitToWindow" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="currentTree" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="columnWise" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="columnReference" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="id" type="{http://www.w3.org/2001/XMLSchema}ID" />
+   *       <attribute name="linkToAllViews" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "title", "newick" }) + public static class Tree + { + + @XmlElement(namespace = "www.jalview.org") + protected String title; + + @XmlElement(namespace = "www.jalview.org") + protected String newick; + + @XmlAttribute(name = "fontName") + protected String fontName; + + @XmlAttribute(name = "fontSize") + protected Integer fontSize; + + @XmlAttribute(name = "fontStyle") + protected Integer fontStyle; + + @XmlAttribute(name = "threshold") + protected Float threshold; + + @XmlAttribute(name = "showBootstrap") + protected Boolean showBootstrap; + + @XmlAttribute(name = "showDistances") + protected Boolean showDistances; + + @XmlAttribute(name = "markUnlinked") + protected Boolean markUnlinked; + + @XmlAttribute(name = "fitToWindow") + protected Boolean fitToWindow; + + @XmlAttribute(name = "currentTree") + protected Boolean currentTree; + + @XmlAttribute(name = "columnWise") + protected Boolean columnWise; + + @XmlAttribute(name = "columnReference") + protected String columnReference; + + @XmlAttribute(name = "id") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlID + @XmlSchemaType(name = "ID") + protected String id; + + @XmlAttribute(name = "linkToAllViews") + protected Boolean linkToAllViews; + + @XmlAttribute(name = "width") + protected Integer width; + + @XmlAttribute(name = "height") + protected Integer height; + + @XmlAttribute(name = "xpos") + protected Integer xpos; + + @XmlAttribute(name = "ypos") + protected Integer ypos; - /** - * Sets the value of the showLabels property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowLabels(Boolean value) { - this.showLabels = value; - } + /** + * Gets the value of the title property. + * + * @return possible object is {@link String } + * + */ + public String getTitle() + { + return title; + } - /** - * Gets the value of the linkToAllViews property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isLinkToAllViews() { - return linkToAllViews; - } + /** + * Sets the value of the title property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTitle(String value) + { + this.title = value; + } - /** - * Sets the value of the linkToAllViews property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setLinkToAllViews(Boolean value) { - this.linkToAllViews = value; - } + /** + * Gets the value of the newick property. + * + * @return possible object is {@link String } + * + */ + public String getNewick() + { + return newick; + } - /** - * Gets the value of the includeGaps property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isIncludeGaps() { - return includeGaps; - } + /** + * Sets the value of the newick property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setNewick(String value) + { + this.newick = value; + } - /** - * Sets the value of the includeGaps property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setIncludeGaps(Boolean value) { - this.includeGaps = value; - } + /** + * Gets the value of the fontName property. + * + * @return possible object is {@link String } + * + */ + public String getFontName() + { + return fontName; + } - /** - * Gets the value of the matchGaps property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isMatchGaps() { - return matchGaps; - } + /** + * Sets the value of the fontName property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setFontName(String value) + { + this.fontName = value; + } - /** - * Sets the value of the matchGaps property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setMatchGaps(Boolean value) { - this.matchGaps = value; - } + /** + * Gets the value of the fontSize property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getFontSize() + { + return fontSize; + } - /** - * Gets the value of the includeGappedColumns property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isIncludeGappedColumns() { - return includeGappedColumns; - } + /** + * Sets the value of the fontSize property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setFontSize(Integer value) + { + this.fontSize = value; + } - /** - * Sets the value of the includeGappedColumns property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setIncludeGappedColumns(Boolean value) { - this.includeGappedColumns = value; - } + /** + * Gets the value of the fontStyle property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getFontStyle() + { + return fontStyle; + } - /** - * Gets the value of the denominateByShortestLength property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isDenominateByShortestLength() { - return denominateByShortestLength; - } + /** + * Sets the value of the fontStyle property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setFontStyle(Integer value) + { + this.fontStyle = value; + } - /** - * Sets the value of the denominateByShortestLength property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setDenominateByShortestLength(Boolean value) { - this.denominateByShortestLength = value; - } + /** + * Gets the value of the threshold property. + * + * @return possible object is {@link Float } + * + */ + public Float getThreshold() + { + return threshold; + } - /** - * Gets the value of the width property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getWidth() { - return width; - } + /** + * Sets the value of the threshold property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setThreshold(Float value) + { + this.threshold = value; + } - /** - * Sets the value of the width property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setWidth(Integer value) { - this.width = value; - } + /** + * Gets the value of the showBootstrap property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowBootstrap() + { + return showBootstrap; + } - /** - * Gets the value of the height property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getHeight() { - return height; - } + /** + * Sets the value of the showBootstrap property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowBootstrap(Boolean value) + { + this.showBootstrap = value; + } - /** - * Sets the value of the height property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setHeight(Integer value) { - this.height = value; - } + /** + * Gets the value of the showDistances property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowDistances() + { + return showDistances; + } - /** - * Gets the value of the xpos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getXpos() { - return xpos; - } + /** + * Sets the value of the showDistances property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowDistances(Boolean value) + { + this.showDistances = value; + } - /** - * Sets the value of the xpos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setXpos(Integer value) { - this.xpos = value; - } + /** + * Gets the value of the markUnlinked property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isMarkUnlinked() + { + return markUnlinked; + } - /** - * Gets the value of the ypos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getYpos() { - return ypos; - } + /** + * Sets the value of the markUnlinked property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setMarkUnlinked(Boolean value) + { + this.markUnlinked = value; + } - /** - * Sets the value of the ypos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setYpos(Integer value) { - this.ypos = value; - } + /** + * Gets the value of the fitToWindow property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isFitToWindow() + { + return fitToWindow; + } + /** + * Sets the value of the fitToWindow property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setFitToWindow(Boolean value) + { + this.fitToWindow = value; + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attGroup ref="{www.jalview.org}position"/>
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Axis { - - @XmlAttribute(name = "xPos") - protected Float xPos; - @XmlAttribute(name = "yPos") - protected Float yPos; - @XmlAttribute(name = "zPos") - protected Float zPos; - - /** - * Gets the value of the xPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getXPos() { - return xPos; - } - - /** - * Sets the value of the xPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setXPos(Float value) { - this.xPos = value; - } - - /** - * Gets the value of the yPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getYPos() { - return yPos; - } - - /** - * Sets the value of the yPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setYPos(Float value) { - this.yPos = value; - } - - /** - * Gets the value of the zPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getZPos() { - return zPos; - } - - /** - * Sets the value of the zPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setZPos(Float value) { - this.zPos = value; - } + /** + * Gets the value of the currentTree property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isCurrentTree() + { + return currentTree; + } - } + /** + * Sets the value of the currentTree property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setCurrentTree(Boolean value) + { + this.currentTree = value; + } + /** + * Gets the value of the columnWise property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isColumnWise() + { + if (columnWise == null) + { + return false; + } + else + { + return columnWise; + } + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attGroup ref="{www.jalview.org}position"/>
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class SeqPointMax { - - @XmlAttribute(name = "xPos") - protected Float xPos; - @XmlAttribute(name = "yPos") - protected Float yPos; - @XmlAttribute(name = "zPos") - protected Float zPos; - - /** - * Gets the value of the xPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getXPos() { - return xPos; - } - - /** - * Sets the value of the xPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setXPos(Float value) { - this.xPos = value; - } - - /** - * Gets the value of the yPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getYPos() { - return yPos; - } - - /** - * Sets the value of the yPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setYPos(Float value) { - this.yPos = value; - } - - /** - * Gets the value of the zPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getZPos() { - return zPos; - } - - /** - * Sets the value of the zPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setZPos(Float value) { - this.zPos = value; - } + /** + * Sets the value of the columnWise property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setColumnWise(Boolean value) + { + this.columnWise = value; + } + + /** + * Gets the value of the columnReference property. + * + * @return possible object is {@link String } + * + */ + public String getColumnReference() + { + return columnReference; + } + + /** + * Sets the value of the columnReference property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setColumnReference(String value) + { + this.columnReference = value; + } - } + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attGroup ref="{www.jalview.org}position"/>
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class SeqPointMin { - - @XmlAttribute(name = "xPos") - protected Float xPos; - @XmlAttribute(name = "yPos") - protected Float yPos; - @XmlAttribute(name = "zPos") - protected Float zPos; - - /** - * Gets the value of the xPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getXPos() { - return xPos; - } - - /** - * Sets the value of the xPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setXPos(Float value) { - this.xPos = value; - } - - /** - * Gets the value of the yPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getYPos() { - return yPos; - } - - /** - * Sets the value of the yPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setYPos(Float value) { - this.yPos = value; - } - - /** - * Gets the value of the zPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getZPos() { - return zPos; - } - - /** - * Sets the value of the zPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setZPos(Float value) { - this.zPos = value; - } + /** + * Gets the value of the linkToAllViews property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isLinkToAllViews() + { + if (linkToAllViews == null) + { + return false; + } + else + { + return linkToAllViews; + } + } - } + /** + * Sets the value of the linkToAllViews property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setLinkToAllViews(Boolean value) + { + this.linkToAllViews = value; + } + /** + * Gets the value of the width property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getWidth() + { + return width; + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attGroup ref="{www.jalview.org}position"/>
-         *       <attribute name="sequenceRef" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class SequencePoint { - - @XmlAttribute(name = "sequenceRef") - protected String sequenceRef; - @XmlAttribute(name = "xPos") - protected Float xPos; - @XmlAttribute(name = "yPos") - protected Float yPos; - @XmlAttribute(name = "zPos") - protected Float zPos; - - /** - * Gets the value of the sequenceRef property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSequenceRef() { - return sequenceRef; - } - - /** - * Sets the value of the sequenceRef property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSequenceRef(String value) { - this.sequenceRef = value; - } - - /** - * Gets the value of the xPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getXPos() { - return xPos; - } - - /** - * Sets the value of the xPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setXPos(Float value) { - this.xPos = value; - } - - /** - * Gets the value of the yPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getYPos() { - return yPos; - } - - /** - * Sets the value of the yPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setYPos(Float value) { - this.yPos = value; - } - - /** - * Gets the value of the zPos property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getZPos() { - return zPos; - } - - /** - * Sets the value of the zPos property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setZPos(Float value) { - this.zPos = value; - } + /** + * Sets the value of the width property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setWidth(Integer value) + { + this.width = value; + } - } + /** + * Gets the value of the height property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getHeight() + { + return height; + } + /** + * Sets the value of the height property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setHeight(Integer value) + { + this.height = value; } + /** + * Gets the value of the xpos property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getXpos() + { + return xpos; + } /** - *

Java class for anonymous complex type. + * Sets the value of the xpos property. * - *

The following schema fragment specifies the expected content contained within this class. + * @param value + * allowed object is {@link Integer } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence minOccurs="0">
-     *         <element name="title" type="{http://www.w3.org/2001/XMLSchema}string"/>
-     *         <element name="newick" type="{http://www.w3.org/2001/XMLSchema}string"/>
-     *       </sequence>
-     *       <attGroup ref="{www.jalview.org}swingwindow"/>
-     *       <attribute name="fontName" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="fontSize" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="fontStyle" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *       <attribute name="showBootstrap" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="showDistances" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="markUnlinked" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="fitToWindow" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="currentTree" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="columnWise" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="columnReference" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="id" type="{http://www.w3.org/2001/XMLSchema}ID" />
-     *       <attribute name="linkToAllViews" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public void setXpos(Integer value) + { + this.xpos = value; + } + + /** + * Gets the value of the ypos property. * + * @return possible object is {@link Integer } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "title", - "newick" - }) - public static class Tree { + public Integer getYpos() + { + return ypos; + } - @XmlElement(namespace = "www.jalview.org") - protected String title; - @XmlElement(namespace = "www.jalview.org") - protected String newick; - @XmlAttribute(name = "fontName") - protected String fontName; - @XmlAttribute(name = "fontSize") - protected Integer fontSize; - @XmlAttribute(name = "fontStyle") - protected Integer fontStyle; - @XmlAttribute(name = "threshold") - protected Float threshold; - @XmlAttribute(name = "showBootstrap") - protected Boolean showBootstrap; - @XmlAttribute(name = "showDistances") - protected Boolean showDistances; - @XmlAttribute(name = "markUnlinked") - protected Boolean markUnlinked; - @XmlAttribute(name = "fitToWindow") - protected Boolean fitToWindow; - @XmlAttribute(name = "currentTree") - protected Boolean currentTree; - @XmlAttribute(name = "columnWise") - protected Boolean columnWise; - @XmlAttribute(name = "columnReference") - protected String columnReference; - @XmlAttribute(name = "id") - @XmlJavaTypeAdapter(CollapsedStringAdapter.class) - @XmlID - @XmlSchemaType(name = "ID") - protected String id; - @XmlAttribute(name = "linkToAllViews") - protected Boolean linkToAllViews; - @XmlAttribute(name = "width") - protected Integer width; - @XmlAttribute(name = "height") - protected Integer height; - @XmlAttribute(name = "xpos") - protected Integer xpos; - @XmlAttribute(name = "ypos") - protected Integer ypos; + /** + * Sets the value of the ypos property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setYpos(Integer value) + { + this.ypos = value; + } - /** - * Gets the value of the title property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTitle() { - return title; - } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="UserColourScheme" type="{www.jalview.org/colours}JalviewUserColours"/>
+   *       </sequence>
+   *       <attribute name="id" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "userColourScheme" }) + public static class UserColours + { + + @XmlElement( + name = "UserColourScheme", + namespace = "www.jalview.org", + required = true) + protected JalviewUserColours userColourScheme; + + @XmlAttribute(name = "id") + protected String id; - /** - * Sets the value of the title property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTitle(String value) { - this.title = value; - } + /** + * Gets the value of the userColourScheme property. + * + * @return possible object is {@link JalviewUserColours } + * + */ + public JalviewUserColours getUserColourScheme() + { + return userColourScheme; + } - /** - * Gets the value of the newick property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getNewick() { - return newick; - } + /** + * Sets the value of the userColourScheme property. + * + * @param value + * allowed object is {@link JalviewUserColours } + * + */ + public void setUserColourScheme(JalviewUserColours value) + { + this.userColourScheme = value; + } - /** - * Sets the value of the newick property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setNewick(String value) { - this.newick = value; - } + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } - /** - * Gets the value of the fontName property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFontName() { - return fontName; - } + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } - /** - * Sets the value of the fontName property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFontName(String value) { - this.fontName = value; - } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="AnnotationColours" type="{www.jalview.org}AnnotationColourScheme" minOccurs="0"/>
+   *         <element name="hiddenColumns" maxOccurs="unbounded" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 <attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *         <element name="calcIdParam" maxOccurs="unbounded" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <extension base="{www.jalview.org/xml/wsparamset}WebServiceParameterSet">
+   *                 <attribute name="calcId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 <attribute name="needsUpdate" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *                 <attribute name="autoUpdate" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *               </extension>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *         <element name="overview" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <attGroup ref="{www.jalview.org}swingwindow"/>
+   *                 <attribute name="showHidden" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *                 <attribute name="residueColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 <attribute name="gapColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 <attribute name="hiddenColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *                 <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *       </sequence>
+   *       <attGroup ref="{www.jalview.org}swingwindow"/>
+   *       <attribute name="conservationSelected" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="pidSelected" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="bgColour" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="consThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="pidThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="showFullId" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="rightAlignIds" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="showText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="showColourText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="showUnconserved" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="showBoxes" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="wrapAlignment" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="renderGaps" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="showSequenceFeatures" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="showNPfeatureTooltip" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="showDbRefTooltip" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="followHighlight" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       <attribute name="followSelection" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       <attribute name="showAnnotation" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="centreColumnLabels" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="showGroupConservation" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="showGroupConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="showConsensusHistogram" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       <attribute name="showSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="normaliseSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="ignoreGapsinConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       <attribute name="startRes" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="startSeq" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="charWidth" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="charHeight" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="fontName" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="fontSize" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="fontStyle" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="scaleProteinAsCdna" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+   *       <attribute name="viewName" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="sequenceSetId" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="gatheredViews" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="textCol1" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="textCol2" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="textColThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="id" type="{http://www.w3.org/2001/XMLSchema}ID" />
+   *       <attribute name="complementId" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="showComplementFeatures" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="showComplementFeaturesOnTop" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType( + name = "", + propOrder = + { "annotationColours", "hiddenColumns", "calcIdParam", "overview" }) + public static class Viewport + { + + @XmlElement(name = "AnnotationColours", namespace = "www.jalview.org") + protected AnnotationColourScheme annotationColours; + + @XmlElement(namespace = "www.jalview.org") + protected List hiddenColumns; + + @XmlElement(namespace = "www.jalview.org") + protected List calcIdParam; + + @XmlElement(namespace = "www.jalview.org") + protected JalviewModel.Viewport.Overview overview; + + @XmlAttribute(name = "conservationSelected") + protected Boolean conservationSelected; + + @XmlAttribute(name = "pidSelected") + protected Boolean pidSelected; + + @XmlAttribute(name = "bgColour") + protected String bgColour; + + @XmlAttribute(name = "consThreshold") + protected Integer consThreshold; + + @XmlAttribute(name = "pidThreshold") + protected Integer pidThreshold; + + @XmlAttribute(name = "title") + protected String title; + + @XmlAttribute(name = "showFullId") + protected Boolean showFullId; + + @XmlAttribute(name = "rightAlignIds") + protected Boolean rightAlignIds; + + @XmlAttribute(name = "showText") + protected Boolean showText; + + @XmlAttribute(name = "showColourText") + protected Boolean showColourText; + + @XmlAttribute(name = "showUnconserved") + protected Boolean showUnconserved; + + @XmlAttribute(name = "showBoxes") + protected Boolean showBoxes; + + @XmlAttribute(name = "wrapAlignment") + protected Boolean wrapAlignment; - /** - * Gets the value of the fontSize property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getFontSize() { - return fontSize; - } + @XmlAttribute(name = "renderGaps") + protected Boolean renderGaps; - /** - * Sets the value of the fontSize property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setFontSize(Integer value) { - this.fontSize = value; - } + @XmlAttribute(name = "showSequenceFeatures") + protected Boolean showSequenceFeatures; - /** - * Gets the value of the fontStyle property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getFontStyle() { - return fontStyle; - } + @XmlAttribute(name = "showNPfeatureTooltip") + protected Boolean showNPfeatureTooltip; - /** - * Sets the value of the fontStyle property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setFontStyle(Integer value) { - this.fontStyle = value; - } + @XmlAttribute(name = "showDbRefTooltip") + protected Boolean showDbRefTooltip; - /** - * Gets the value of the threshold property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getThreshold() { - return threshold; - } + @XmlAttribute(name = "followHighlight") + protected Boolean followHighlight; - /** - * Sets the value of the threshold property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setThreshold(Float value) { - this.threshold = value; - } + @XmlAttribute(name = "followSelection") + protected Boolean followSelection; - /** - * Gets the value of the showBootstrap property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowBootstrap() { - return showBootstrap; - } + @XmlAttribute(name = "showAnnotation") + protected Boolean showAnnotation; - /** - * Sets the value of the showBootstrap property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowBootstrap(Boolean value) { - this.showBootstrap = value; - } + @XmlAttribute(name = "centreColumnLabels") + protected Boolean centreColumnLabels; - /** - * Gets the value of the showDistances property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowDistances() { - return showDistances; - } + @XmlAttribute(name = "showGroupConservation") + protected Boolean showGroupConservation; - /** - * Sets the value of the showDistances property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowDistances(Boolean value) { - this.showDistances = value; - } + @XmlAttribute(name = "showGroupConsensus") + protected Boolean showGroupConsensus; - /** - * Gets the value of the markUnlinked property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isMarkUnlinked() { - return markUnlinked; - } + @XmlAttribute(name = "showConsensusHistogram") + protected Boolean showConsensusHistogram; - /** - * Sets the value of the markUnlinked property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setMarkUnlinked(Boolean value) { - this.markUnlinked = value; - } + @XmlAttribute(name = "showSequenceLogo") + protected Boolean showSequenceLogo; - /** - * Gets the value of the fitToWindow property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isFitToWindow() { - return fitToWindow; - } + @XmlAttribute(name = "normaliseSequenceLogo") + protected Boolean normaliseSequenceLogo; - /** - * Sets the value of the fitToWindow property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setFitToWindow(Boolean value) { - this.fitToWindow = value; - } + @XmlAttribute(name = "ignoreGapsinConsensus") + protected Boolean ignoreGapsinConsensus; - /** - * Gets the value of the currentTree property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isCurrentTree() { - return currentTree; - } + @XmlAttribute(name = "startRes") + protected Integer startRes; - /** - * Sets the value of the currentTree property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setCurrentTree(Boolean value) { - this.currentTree = value; - } + @XmlAttribute(name = "startSeq") + protected Integer startSeq; - /** - * Gets the value of the columnWise property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isColumnWise() { - if (columnWise == null) { - return false; - } else { - return columnWise; - } - } + @XmlAttribute(name = "charWidth") + protected Integer charWidth; - /** - * Sets the value of the columnWise property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setColumnWise(Boolean value) { - this.columnWise = value; - } + @XmlAttribute(name = "charHeight") + protected Integer charHeight; - /** - * Gets the value of the columnReference property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getColumnReference() { - return columnReference; - } + @XmlAttribute(name = "fontName") + protected String fontName; - /** - * Sets the value of the columnReference property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setColumnReference(String value) { - this.columnReference = value; - } + @XmlAttribute(name = "fontSize") + protected Integer fontSize; - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } + @XmlAttribute(name = "fontStyle") + protected Integer fontStyle; - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; - } + @XmlAttribute(name = "scaleProteinAsCdna") + protected Boolean scaleProteinAsCdna; - /** - * Gets the value of the linkToAllViews property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isLinkToAllViews() { - if (linkToAllViews == null) { - return false; - } else { - return linkToAllViews; - } - } + @XmlAttribute(name = "viewName") + protected String viewName; - /** - * Sets the value of the linkToAllViews property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setLinkToAllViews(Boolean value) { - this.linkToAllViews = value; - } + @XmlAttribute(name = "sequenceSetId") + protected String sequenceSetId; + + @XmlAttribute(name = "gatheredViews") + protected Boolean gatheredViews; - /** - * Gets the value of the width property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getWidth() { - return width; - } + @XmlAttribute(name = "textCol1") + protected Integer textCol1; - /** - * Sets the value of the width property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setWidth(Integer value) { - this.width = value; - } + @XmlAttribute(name = "textCol2") + protected Integer textCol2; - /** - * Gets the value of the height property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getHeight() { - return height; - } + @XmlAttribute(name = "textColThreshold") + protected Integer textColThreshold; - /** - * Sets the value of the height property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setHeight(Integer value) { - this.height = value; - } + @XmlAttribute(name = "id") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlID + @XmlSchemaType(name = "ID") + protected String id; - /** - * Gets the value of the xpos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getXpos() { - return xpos; - } + @XmlAttribute(name = "complementId") + protected String complementId; - /** - * Sets the value of the xpos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setXpos(Integer value) { - this.xpos = value; - } + @XmlAttribute(name = "showComplementFeatures") + protected Boolean showComplementFeatures; - /** - * Gets the value of the ypos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getYpos() { - return ypos; - } + @XmlAttribute(name = "showComplementFeaturesOnTop") + protected Boolean showComplementFeaturesOnTop; - /** - * Sets the value of the ypos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setYpos(Integer value) { - this.ypos = value; - } + @XmlAttribute(name = "width") + protected Integer width; + @XmlAttribute(name = "height") + protected Integer height; + + @XmlAttribute(name = "xpos") + protected Integer xpos; + + @XmlAttribute(name = "ypos") + protected Integer ypos; + + /** + * Gets the value of the annotationColours property. + * + * @return possible object is {@link AnnotationColourScheme } + * + */ + public AnnotationColourScheme getAnnotationColours() + { + return annotationColours; } + /** + * Sets the value of the annotationColours property. + * + * @param value + * allowed object is {@link AnnotationColourScheme } + * + */ + public void setAnnotationColours(AnnotationColourScheme value) + { + this.annotationColours = value; + } /** - *

Java class for anonymous complex type. + * Gets the value of the hiddenColumns property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the hiddenColumns property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="UserColourScheme" type="{www.jalview.org/colours}JalviewUserColours"/>
-     *       </sequence>
-     *       <attribute name="id" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getHiddenColumns().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.Viewport.HiddenColumns } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "userColourScheme" - }) - public static class UserColours { - - @XmlElement(name = "UserColourScheme", namespace = "www.jalview.org", required = true) - protected JalviewUserColours userColourScheme; - @XmlAttribute(name = "id") - protected String id; - - /** - * Gets the value of the userColourScheme property. - * - * @return - * possible object is - * {@link JalviewUserColours } - * - */ - public JalviewUserColours getUserColourScheme() { - return userColourScheme; - } - - /** - * Sets the value of the userColourScheme property. - * - * @param value - * allowed object is - * {@link JalviewUserColours } - * - */ - public void setUserColourScheme(JalviewUserColours value) { - this.userColourScheme = value; - } - - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } - - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; - } - + public List getHiddenColumns() + { + if (hiddenColumns == null) + { + hiddenColumns = new ArrayList(); + } + return this.hiddenColumns; } - /** - *

Java class for anonymous complex type. + * Gets the value of the calcIdParam property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the calcIdParam property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="AnnotationColours" type="{www.jalview.org}AnnotationColourScheme" minOccurs="0"/>
-     *         <element name="hiddenColumns" maxOccurs="unbounded" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *                 <attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *         <element name="calcIdParam" maxOccurs="unbounded" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <extension base="{www.jalview.org/xml/wsparamset}WebServiceParameterSet">
-     *                 <attribute name="calcId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                 <attribute name="needsUpdate" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *                 <attribute name="autoUpdate" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *               </extension>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *         <element name="overview" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <attGroup ref="{www.jalview.org}swingwindow"/>
-     *                 <attribute name="showHidden" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *                 <attribute name="residueColour" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *                 <attribute name="gapColour" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *                 <attribute name="hiddenColour" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *                 <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *       </sequence>
-     *       <attGroup ref="{www.jalview.org}swingwindow"/>
-     *       <attribute name="conservationSelected" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="pidSelected" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="bgColour" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="consThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="pidThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="showFullId" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="rightAlignIds" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="showText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="showColourText" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="showUnconserved" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="showBoxes" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="wrapAlignment" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="renderGaps" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="showSequenceFeatures" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="showNPfeatureTooltip" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="showDbRefTooltip" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="followHighlight" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-     *       <attribute name="followSelection" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-     *       <attribute name="showAnnotation" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="centreColumnLabels" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="showGroupConservation" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="showGroupConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="showConsensusHistogram" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-     *       <attribute name="showSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="normaliseSequenceLogo" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="ignoreGapsinConsensus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-     *       <attribute name="startRes" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="startSeq" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="charWidth" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="charHeight" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="fontName" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="fontSize" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="fontStyle" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="scaleProteinAsCdna" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
-     *       <attribute name="viewName" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="sequenceSetId" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="gatheredViews" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="textCol1" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="textCol2" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="textColThreshold" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="id" type="{http://www.w3.org/2001/XMLSchema}ID" />
-     *       <attribute name="complementId" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="showComplementFeatures" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="showComplementFeaturesOnTop" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getCalcIdParam().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewModel.Viewport.CalcIdParam } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "annotationColours", - "hiddenColumns", - "calcIdParam", - "overview" - }) - public static class Viewport { - - @XmlElement(name = "AnnotationColours", namespace = "www.jalview.org") - protected AnnotationColourScheme annotationColours; - @XmlElement(namespace = "www.jalview.org") - protected List hiddenColumns; - @XmlElement(namespace = "www.jalview.org") - protected List calcIdParam; - @XmlElement(namespace = "www.jalview.org") - protected JalviewModel.Viewport.Overview overview; - @XmlAttribute(name = "conservationSelected") - protected Boolean conservationSelected; - @XmlAttribute(name = "pidSelected") - protected Boolean pidSelected; - @XmlAttribute(name = "bgColour") - protected String bgColour; - @XmlAttribute(name = "consThreshold") - protected Integer consThreshold; - @XmlAttribute(name = "pidThreshold") - protected Integer pidThreshold; - @XmlAttribute(name = "title") - protected String title; - @XmlAttribute(name = "showFullId") - protected Boolean showFullId; - @XmlAttribute(name = "rightAlignIds") - protected Boolean rightAlignIds; - @XmlAttribute(name = "showText") - protected Boolean showText; - @XmlAttribute(name = "showColourText") - protected Boolean showColourText; - @XmlAttribute(name = "showUnconserved") - protected Boolean showUnconserved; - @XmlAttribute(name = "showBoxes") - protected Boolean showBoxes; - @XmlAttribute(name = "wrapAlignment") - protected Boolean wrapAlignment; - @XmlAttribute(name = "renderGaps") - protected Boolean renderGaps; - @XmlAttribute(name = "showSequenceFeatures") - protected Boolean showSequenceFeatures; - @XmlAttribute(name = "showNPfeatureTooltip") - protected Boolean showNPfeatureTooltip; - @XmlAttribute(name = "showDbRefTooltip") - protected Boolean showDbRefTooltip; - @XmlAttribute(name = "followHighlight") - protected Boolean followHighlight; - @XmlAttribute(name = "followSelection") - protected Boolean followSelection; - @XmlAttribute(name = "showAnnotation") - protected Boolean showAnnotation; - @XmlAttribute(name = "centreColumnLabels") - protected Boolean centreColumnLabels; - @XmlAttribute(name = "showGroupConservation") - protected Boolean showGroupConservation; - @XmlAttribute(name = "showGroupConsensus") - protected Boolean showGroupConsensus; - @XmlAttribute(name = "showConsensusHistogram") - protected Boolean showConsensusHistogram; - @XmlAttribute(name = "showSequenceLogo") - protected Boolean showSequenceLogo; - @XmlAttribute(name = "normaliseSequenceLogo") - protected Boolean normaliseSequenceLogo; - @XmlAttribute(name = "ignoreGapsinConsensus") - protected Boolean ignoreGapsinConsensus; - @XmlAttribute(name = "startRes") - protected Integer startRes; - @XmlAttribute(name = "startSeq") - protected Integer startSeq; - @XmlAttribute(name = "charWidth") - protected Integer charWidth; - @XmlAttribute(name = "charHeight") - protected Integer charHeight; - @XmlAttribute(name = "fontName") - protected String fontName; - @XmlAttribute(name = "fontSize") - protected Integer fontSize; - @XmlAttribute(name = "fontStyle") - protected Integer fontStyle; - @XmlAttribute(name = "scaleProteinAsCdna") - protected Boolean scaleProteinAsCdna; - @XmlAttribute(name = "viewName") - protected String viewName; - @XmlAttribute(name = "sequenceSetId") - protected String sequenceSetId; - @XmlAttribute(name = "gatheredViews") - protected Boolean gatheredViews; - @XmlAttribute(name = "textCol1") - protected Integer textCol1; - @XmlAttribute(name = "textCol2") - protected Integer textCol2; - @XmlAttribute(name = "textColThreshold") - protected Integer textColThreshold; - @XmlAttribute(name = "id") - @XmlJavaTypeAdapter(CollapsedStringAdapter.class) - @XmlID - @XmlSchemaType(name = "ID") - protected String id; - @XmlAttribute(name = "complementId") - protected String complementId; - @XmlAttribute(name = "showComplementFeatures") - protected Boolean showComplementFeatures; - @XmlAttribute(name = "showComplementFeaturesOnTop") - protected Boolean showComplementFeaturesOnTop; - @XmlAttribute(name = "width") - protected Integer width; - @XmlAttribute(name = "height") - protected Integer height; - @XmlAttribute(name = "xpos") - protected Integer xpos; - @XmlAttribute(name = "ypos") - protected Integer ypos; - - /** - * Gets the value of the annotationColours property. - * - * @return - * possible object is - * {@link AnnotationColourScheme } - * - */ - public AnnotationColourScheme getAnnotationColours() { - return annotationColours; - } - - /** - * Sets the value of the annotationColours property. - * - * @param value - * allowed object is - * {@link AnnotationColourScheme } - * - */ - public void setAnnotationColours(AnnotationColourScheme value) { - this.annotationColours = value; - } - - /** - * Gets the value of the hiddenColumns property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the hiddenColumns property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getHiddenColumns().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.Viewport.HiddenColumns } - * - * - */ - public List getHiddenColumns() { - if (hiddenColumns == null) { - hiddenColumns = new ArrayList(); - } - return this.hiddenColumns; - } - - /** - * Gets the value of the calcIdParam property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the calcIdParam property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getCalcIdParam().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewModel.Viewport.CalcIdParam } - * - * - */ - public List getCalcIdParam() { - if (calcIdParam == null) { - calcIdParam = new ArrayList(); - } - return this.calcIdParam; - } - - /** - * Gets the value of the overview property. - * - * @return - * possible object is - * {@link JalviewModel.Viewport.Overview } - * - */ - public JalviewModel.Viewport.Overview getOverview() { - return overview; - } - - /** - * Sets the value of the overview property. - * - * @param value - * allowed object is - * {@link JalviewModel.Viewport.Overview } - * - */ - public void setOverview(JalviewModel.Viewport.Overview value) { - this.overview = value; - } - - /** - * Gets the value of the conservationSelected property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isConservationSelected() { - return conservationSelected; - } - - /** - * Sets the value of the conservationSelected property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setConservationSelected(Boolean value) { - this.conservationSelected = value; - } - - /** - * Gets the value of the pidSelected property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isPidSelected() { - return pidSelected; - } - - /** - * Sets the value of the pidSelected property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setPidSelected(Boolean value) { - this.pidSelected = value; - } - - /** - * Gets the value of the bgColour property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getBgColour() { - return bgColour; - } + public List getCalcIdParam() + { + if (calcIdParam == null) + { + calcIdParam = new ArrayList(); + } + return this.calcIdParam; + } - /** - * Sets the value of the bgColour property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setBgColour(String value) { - this.bgColour = value; - } + /** + * Gets the value of the overview property. + * + * @return possible object is {@link JalviewModel.Viewport.Overview } + * + */ + public JalviewModel.Viewport.Overview getOverview() + { + return overview; + } - /** - * Gets the value of the consThreshold property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getConsThreshold() { - return consThreshold; - } + /** + * Sets the value of the overview property. + * + * @param value + * allowed object is {@link JalviewModel.Viewport.Overview } + * + */ + public void setOverview(JalviewModel.Viewport.Overview value) + { + this.overview = value; + } - /** - * Sets the value of the consThreshold property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setConsThreshold(Integer value) { - this.consThreshold = value; - } + /** + * Gets the value of the conservationSelected property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isConservationSelected() + { + return conservationSelected; + } - /** - * Gets the value of the pidThreshold property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getPidThreshold() { - return pidThreshold; - } + /** + * Sets the value of the conservationSelected property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setConservationSelected(Boolean value) + { + this.conservationSelected = value; + } - /** - * Sets the value of the pidThreshold property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setPidThreshold(Integer value) { - this.pidThreshold = value; - } + /** + * Gets the value of the pidSelected property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isPidSelected() + { + return pidSelected; + } - /** - * Gets the value of the title property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTitle() { - return title; - } + /** + * Sets the value of the pidSelected property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setPidSelected(Boolean value) + { + this.pidSelected = value; + } - /** - * Sets the value of the title property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTitle(String value) { - this.title = value; - } + /** + * Gets the value of the bgColour property. + * + * @return possible object is {@link String } + * + */ + public String getBgColour() + { + return bgColour; + } - /** - * Gets the value of the showFullId property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowFullId() { - return showFullId; - } + /** + * Sets the value of the bgColour property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setBgColour(String value) + { + this.bgColour = value; + } - /** - * Sets the value of the showFullId property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowFullId(Boolean value) { - this.showFullId = value; - } + /** + * Gets the value of the consThreshold property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getConsThreshold() + { + return consThreshold; + } - /** - * Gets the value of the rightAlignIds property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isRightAlignIds() { - return rightAlignIds; - } + /** + * Sets the value of the consThreshold property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setConsThreshold(Integer value) + { + this.consThreshold = value; + } - /** - * Sets the value of the rightAlignIds property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setRightAlignIds(Boolean value) { - this.rightAlignIds = value; - } + /** + * Gets the value of the pidThreshold property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getPidThreshold() + { + return pidThreshold; + } - /** - * Gets the value of the showText property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowText() { - return showText; - } + /** + * Sets the value of the pidThreshold property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setPidThreshold(Integer value) + { + this.pidThreshold = value; + } - /** - * Sets the value of the showText property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowText(Boolean value) { - this.showText = value; - } + /** + * Gets the value of the title property. + * + * @return possible object is {@link String } + * + */ + public String getTitle() + { + return title; + } - /** - * Gets the value of the showColourText property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowColourText() { - return showColourText; - } + /** + * Sets the value of the title property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTitle(String value) + { + this.title = value; + } - /** - * Sets the value of the showColourText property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowColourText(Boolean value) { - this.showColourText = value; - } + /** + * Gets the value of the showFullId property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowFullId() + { + return showFullId; + } - /** - * Gets the value of the showUnconserved property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isShowUnconserved() { - if (showUnconserved == null) { - return false; - } else { - return showUnconserved; - } - } + /** + * Sets the value of the showFullId property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowFullId(Boolean value) + { + this.showFullId = value; + } - /** - * Sets the value of the showUnconserved property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowUnconserved(Boolean value) { - this.showUnconserved = value; - } + /** + * Gets the value of the rightAlignIds property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isRightAlignIds() + { + return rightAlignIds; + } - /** - * Gets the value of the showBoxes property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowBoxes() { - return showBoxes; - } + /** + * Sets the value of the rightAlignIds property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setRightAlignIds(Boolean value) + { + this.rightAlignIds = value; + } - /** - * Sets the value of the showBoxes property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowBoxes(Boolean value) { - this.showBoxes = value; - } + /** + * Gets the value of the showText property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowText() + { + return showText; + } - /** - * Gets the value of the wrapAlignment property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isWrapAlignment() { - return wrapAlignment; - } + /** + * Sets the value of the showText property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowText(Boolean value) + { + this.showText = value; + } - /** - * Sets the value of the wrapAlignment property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setWrapAlignment(Boolean value) { - this.wrapAlignment = value; - } + /** + * Gets the value of the showColourText property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowColourText() + { + return showColourText; + } - /** - * Gets the value of the renderGaps property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isRenderGaps() { - return renderGaps; - } + /** + * Sets the value of the showColourText property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowColourText(Boolean value) + { + this.showColourText = value; + } - /** - * Sets the value of the renderGaps property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setRenderGaps(Boolean value) { - this.renderGaps = value; - } + /** + * Gets the value of the showUnconserved property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isShowUnconserved() + { + if (showUnconserved == null) + { + return false; + } + else + { + return showUnconserved; + } + } - /** - * Gets the value of the showSequenceFeatures property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowSequenceFeatures() { - return showSequenceFeatures; - } + /** + * Sets the value of the showUnconserved property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowUnconserved(Boolean value) + { + this.showUnconserved = value; + } - /** - * Sets the value of the showSequenceFeatures property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowSequenceFeatures(Boolean value) { - this.showSequenceFeatures = value; - } + /** + * Gets the value of the showBoxes property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowBoxes() + { + return showBoxes; + } - /** - * Gets the value of the showNPfeatureTooltip property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowNPfeatureTooltip() { - return showNPfeatureTooltip; - } + /** + * Sets the value of the showBoxes property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowBoxes(Boolean value) + { + this.showBoxes = value; + } - /** - * Sets the value of the showNPfeatureTooltip property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowNPfeatureTooltip(Boolean value) { - this.showNPfeatureTooltip = value; - } + /** + * Gets the value of the wrapAlignment property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isWrapAlignment() + { + return wrapAlignment; + } - /** - * Gets the value of the showDbRefTooltip property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowDbRefTooltip() { - return showDbRefTooltip; - } + /** + * Sets the value of the wrapAlignment property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setWrapAlignment(Boolean value) + { + this.wrapAlignment = value; + } - /** - * Sets the value of the showDbRefTooltip property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowDbRefTooltip(Boolean value) { - this.showDbRefTooltip = value; - } + /** + * Gets the value of the renderGaps property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isRenderGaps() + { + return renderGaps; + } - /** - * Gets the value of the followHighlight property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isFollowHighlight() { - if (followHighlight == null) { - return true; - } else { - return followHighlight; - } - } + /** + * Sets the value of the renderGaps property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setRenderGaps(Boolean value) + { + this.renderGaps = value; + } - /** - * Sets the value of the followHighlight property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setFollowHighlight(Boolean value) { - this.followHighlight = value; - } + /** + * Gets the value of the showSequenceFeatures property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowSequenceFeatures() + { + return showSequenceFeatures; + } - /** - * Gets the value of the followSelection property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isFollowSelection() { - if (followSelection == null) { - return true; - } else { - return followSelection; - } - } + /** + * Sets the value of the showSequenceFeatures property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowSequenceFeatures(Boolean value) + { + this.showSequenceFeatures = value; + } - /** - * Sets the value of the followSelection property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setFollowSelection(Boolean value) { - this.followSelection = value; - } + /** + * Gets the value of the showNPfeatureTooltip property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowNPfeatureTooltip() + { + return showNPfeatureTooltip; + } - /** - * Gets the value of the showAnnotation property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowAnnotation() { - return showAnnotation; - } + /** + * Sets the value of the showNPfeatureTooltip property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowNPfeatureTooltip(Boolean value) + { + this.showNPfeatureTooltip = value; + } - /** - * Sets the value of the showAnnotation property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowAnnotation(Boolean value) { - this.showAnnotation = value; - } + /** + * Gets the value of the showDbRefTooltip property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowDbRefTooltip() + { + return showDbRefTooltip; + } - /** - * Gets the value of the centreColumnLabels property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isCentreColumnLabels() { - if (centreColumnLabels == null) { - return false; - } else { - return centreColumnLabels; - } - } + /** + * Sets the value of the showDbRefTooltip property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowDbRefTooltip(Boolean value) + { + this.showDbRefTooltip = value; + } - /** - * Sets the value of the centreColumnLabels property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setCentreColumnLabels(Boolean value) { - this.centreColumnLabels = value; - } + /** + * Gets the value of the followHighlight property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isFollowHighlight() + { + if (followHighlight == null) + { + return true; + } + else + { + return followHighlight; + } + } - /** - * Gets the value of the showGroupConservation property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isShowGroupConservation() { - if (showGroupConservation == null) { - return false; - } else { - return showGroupConservation; - } - } + /** + * Sets the value of the followHighlight property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setFollowHighlight(Boolean value) + { + this.followHighlight = value; + } - /** - * Sets the value of the showGroupConservation property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowGroupConservation(Boolean value) { - this.showGroupConservation = value; - } + /** + * Gets the value of the followSelection property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isFollowSelection() + { + if (followSelection == null) + { + return true; + } + else + { + return followSelection; + } + } - /** - * Gets the value of the showGroupConsensus property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isShowGroupConsensus() { - if (showGroupConsensus == null) { - return false; - } else { - return showGroupConsensus; - } - } + /** + * Sets the value of the followSelection property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setFollowSelection(Boolean value) + { + this.followSelection = value; + } - /** - * Sets the value of the showGroupConsensus property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowGroupConsensus(Boolean value) { - this.showGroupConsensus = value; - } + /** + * Gets the value of the showAnnotation property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowAnnotation() + { + return showAnnotation; + } - /** - * Gets the value of the showConsensusHistogram property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isShowConsensusHistogram() { - if (showConsensusHistogram == null) { - return true; - } else { - return showConsensusHistogram; - } - } + /** + * Sets the value of the showAnnotation property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowAnnotation(Boolean value) + { + this.showAnnotation = value; + } - /** - * Sets the value of the showConsensusHistogram property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowConsensusHistogram(Boolean value) { - this.showConsensusHistogram = value; - } + /** + * Gets the value of the centreColumnLabels property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isCentreColumnLabels() + { + if (centreColumnLabels == null) + { + return false; + } + else + { + return centreColumnLabels; + } + } - /** - * Gets the value of the showSequenceLogo property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isShowSequenceLogo() { - if (showSequenceLogo == null) { - return false; - } else { - return showSequenceLogo; - } - } + /** + * Sets the value of the centreColumnLabels property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setCentreColumnLabels(Boolean value) + { + this.centreColumnLabels = value; + } - /** - * Sets the value of the showSequenceLogo property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowSequenceLogo(Boolean value) { - this.showSequenceLogo = value; - } + /** + * Gets the value of the showGroupConservation property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isShowGroupConservation() + { + if (showGroupConservation == null) + { + return false; + } + else + { + return showGroupConservation; + } + } - /** - * Gets the value of the normaliseSequenceLogo property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isNormaliseSequenceLogo() { - if (normaliseSequenceLogo == null) { - return false; - } else { - return normaliseSequenceLogo; - } - } + /** + * Sets the value of the showGroupConservation property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowGroupConservation(Boolean value) + { + this.showGroupConservation = value; + } - /** - * Sets the value of the normaliseSequenceLogo property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setNormaliseSequenceLogo(Boolean value) { - this.normaliseSequenceLogo = value; - } + /** + * Gets the value of the showGroupConsensus property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isShowGroupConsensus() + { + if (showGroupConsensus == null) + { + return false; + } + else + { + return showGroupConsensus; + } + } - /** - * Gets the value of the ignoreGapsinConsensus property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isIgnoreGapsinConsensus() { - if (ignoreGapsinConsensus == null) { - return true; - } else { - return ignoreGapsinConsensus; - } - } + /** + * Sets the value of the showGroupConsensus property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowGroupConsensus(Boolean value) + { + this.showGroupConsensus = value; + } - /** - * Sets the value of the ignoreGapsinConsensus property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setIgnoreGapsinConsensus(Boolean value) { - this.ignoreGapsinConsensus = value; - } + /** + * Gets the value of the showConsensusHistogram property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isShowConsensusHistogram() + { + if (showConsensusHistogram == null) + { + return true; + } + else + { + return showConsensusHistogram; + } + } - /** - * Gets the value of the startRes property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getStartRes() { - return startRes; - } + /** + * Sets the value of the showConsensusHistogram property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowConsensusHistogram(Boolean value) + { + this.showConsensusHistogram = value; + } - /** - * Sets the value of the startRes property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setStartRes(Integer value) { - this.startRes = value; - } + /** + * Gets the value of the showSequenceLogo property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isShowSequenceLogo() + { + if (showSequenceLogo == null) + { + return false; + } + else + { + return showSequenceLogo; + } + } - /** - * Gets the value of the startSeq property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getStartSeq() { - return startSeq; - } + /** + * Sets the value of the showSequenceLogo property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowSequenceLogo(Boolean value) + { + this.showSequenceLogo = value; + } - /** - * Sets the value of the startSeq property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setStartSeq(Integer value) { - this.startSeq = value; - } + /** + * Gets the value of the normaliseSequenceLogo property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isNormaliseSequenceLogo() + { + if (normaliseSequenceLogo == null) + { + return false; + } + else + { + return normaliseSequenceLogo; + } + } - /** - * Gets the value of the charWidth property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getCharWidth() { - return charWidth; - } + /** + * Sets the value of the normaliseSequenceLogo property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setNormaliseSequenceLogo(Boolean value) + { + this.normaliseSequenceLogo = value; + } + + /** + * Gets the value of the ignoreGapsinConsensus property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isIgnoreGapsinConsensus() + { + if (ignoreGapsinConsensus == null) + { + return true; + } + else + { + return ignoreGapsinConsensus; + } + } - /** - * Sets the value of the charWidth property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setCharWidth(Integer value) { - this.charWidth = value; - } + /** + * Sets the value of the ignoreGapsinConsensus property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setIgnoreGapsinConsensus(Boolean value) + { + this.ignoreGapsinConsensus = value; + } - /** - * Gets the value of the charHeight property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getCharHeight() { - return charHeight; - } + /** + * Gets the value of the startRes property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getStartRes() + { + return startRes; + } - /** - * Sets the value of the charHeight property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setCharHeight(Integer value) { - this.charHeight = value; - } + /** + * Sets the value of the startRes property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setStartRes(Integer value) + { + this.startRes = value; + } - /** - * Gets the value of the fontName property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFontName() { - return fontName; - } + /** + * Gets the value of the startSeq property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getStartSeq() + { + return startSeq; + } - /** - * Sets the value of the fontName property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFontName(String value) { - this.fontName = value; - } + /** + * Sets the value of the startSeq property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setStartSeq(Integer value) + { + this.startSeq = value; + } - /** - * Gets the value of the fontSize property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getFontSize() { - return fontSize; - } + /** + * Gets the value of the charWidth property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getCharWidth() + { + return charWidth; + } - /** - * Sets the value of the fontSize property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setFontSize(Integer value) { - this.fontSize = value; - } + /** + * Sets the value of the charWidth property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setCharWidth(Integer value) + { + this.charWidth = value; + } - /** - * Gets the value of the fontStyle property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getFontStyle() { - return fontStyle; - } + /** + * Gets the value of the charHeight property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getCharHeight() + { + return charHeight; + } - /** - * Sets the value of the fontStyle property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setFontStyle(Integer value) { - this.fontStyle = value; - } + /** + * Sets the value of the charHeight property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setCharHeight(Integer value) + { + this.charHeight = value; + } - /** - * Gets the value of the scaleProteinAsCdna property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isScaleProteinAsCdna() { - if (scaleProteinAsCdna == null) { - return true; - } else { - return scaleProteinAsCdna; - } - } + /** + * Gets the value of the fontName property. + * + * @return possible object is {@link String } + * + */ + public String getFontName() + { + return fontName; + } - /** - * Sets the value of the scaleProteinAsCdna property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setScaleProteinAsCdna(Boolean value) { - this.scaleProteinAsCdna = value; - } + /** + * Sets the value of the fontName property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setFontName(String value) + { + this.fontName = value; + } - /** - * Gets the value of the viewName property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getViewName() { - return viewName; - } + /** + * Gets the value of the fontSize property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getFontSize() + { + return fontSize; + } - /** - * Sets the value of the viewName property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setViewName(String value) { - this.viewName = value; - } + /** + * Sets the value of the fontSize property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setFontSize(Integer value) + { + this.fontSize = value; + } - /** - * Gets the value of the sequenceSetId property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSequenceSetId() { - return sequenceSetId; - } + /** + * Gets the value of the fontStyle property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getFontStyle() + { + return fontStyle; + } - /** - * Sets the value of the sequenceSetId property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSequenceSetId(String value) { - this.sequenceSetId = value; - } + /** + * Sets the value of the fontStyle property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setFontStyle(Integer value) + { + this.fontStyle = value; + } - /** - * Gets the value of the gatheredViews property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isGatheredViews() { - return gatheredViews; - } + /** + * Gets the value of the scaleProteinAsCdna property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isScaleProteinAsCdna() + { + if (scaleProteinAsCdna == null) + { + return true; + } + else + { + return scaleProteinAsCdna; + } + } - /** - * Sets the value of the gatheredViews property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setGatheredViews(Boolean value) { - this.gatheredViews = value; - } + /** + * Sets the value of the scaleProteinAsCdna property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setScaleProteinAsCdna(Boolean value) + { + this.scaleProteinAsCdna = value; + } - /** - * Gets the value of the textCol1 property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getTextCol1() { - return textCol1; - } + /** + * Gets the value of the viewName property. + * + * @return possible object is {@link String } + * + */ + public String getViewName() + { + return viewName; + } - /** - * Sets the value of the textCol1 property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setTextCol1(Integer value) { - this.textCol1 = value; - } + /** + * Sets the value of the viewName property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setViewName(String value) + { + this.viewName = value; + } - /** - * Gets the value of the textCol2 property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getTextCol2() { - return textCol2; - } + /** + * Gets the value of the sequenceSetId property. + * + * @return possible object is {@link String } + * + */ + public String getSequenceSetId() + { + return sequenceSetId; + } - /** - * Sets the value of the textCol2 property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setTextCol2(Integer value) { - this.textCol2 = value; - } + /** + * Sets the value of the sequenceSetId property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setSequenceSetId(String value) + { + this.sequenceSetId = value; + } - /** - * Gets the value of the textColThreshold property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getTextColThreshold() { - return textColThreshold; - } + /** + * Gets the value of the gatheredViews property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isGatheredViews() + { + return gatheredViews; + } - /** - * Sets the value of the textColThreshold property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setTextColThreshold(Integer value) { - this.textColThreshold = value; - } + /** + * Sets the value of the gatheredViews property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setGatheredViews(Boolean value) + { + this.gatheredViews = value; + } - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } + /** + * Gets the value of the textCol1 property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getTextCol1() + { + return textCol1; + } - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; - } + /** + * Sets the value of the textCol1 property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setTextCol1(Integer value) + { + this.textCol1 = value; + } - /** - * Gets the value of the complementId property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getComplementId() { - return complementId; - } + /** + * Gets the value of the textCol2 property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getTextCol2() + { + return textCol2; + } - /** - * Sets the value of the complementId property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setComplementId(String value) { - this.complementId = value; - } + /** + * Sets the value of the textCol2 property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setTextCol2(Integer value) + { + this.textCol2 = value; + } - /** - * Gets the value of the showComplementFeatures property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isShowComplementFeatures() { - if (showComplementFeatures == null) { - return false; - } else { - return showComplementFeatures; - } - } + /** + * Gets the value of the textColThreshold property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getTextColThreshold() + { + return textColThreshold; + } - /** - * Sets the value of the showComplementFeatures property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowComplementFeatures(Boolean value) { - this.showComplementFeatures = value; - } + /** + * Sets the value of the textColThreshold property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setTextColThreshold(Integer value) + { + this.textColThreshold = value; + } - /** - * Gets the value of the showComplementFeaturesOnTop property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isShowComplementFeaturesOnTop() { - if (showComplementFeaturesOnTop == null) { - return false; - } else { - return showComplementFeaturesOnTop; - } - } + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } - /** - * Sets the value of the showComplementFeaturesOnTop property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowComplementFeaturesOnTop(Boolean value) { - this.showComplementFeaturesOnTop = value; - } + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } - /** - * Gets the value of the width property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getWidth() { - return width; - } + /** + * Gets the value of the complementId property. + * + * @return possible object is {@link String } + * + */ + public String getComplementId() + { + return complementId; + } - /** - * Sets the value of the width property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setWidth(Integer value) { - this.width = value; - } + /** + * Sets the value of the complementId property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setComplementId(String value) + { + this.complementId = value; + } - /** - * Gets the value of the height property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getHeight() { - return height; - } + /** + * Gets the value of the showComplementFeatures property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isShowComplementFeatures() + { + if (showComplementFeatures == null) + { + return false; + } + else + { + return showComplementFeatures; + } + } - /** - * Sets the value of the height property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setHeight(Integer value) { - this.height = value; - } + /** + * Sets the value of the showComplementFeatures property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowComplementFeatures(Boolean value) + { + this.showComplementFeatures = value; + } - /** - * Gets the value of the xpos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getXpos() { - return xpos; - } + /** + * Gets the value of the showComplementFeaturesOnTop property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isShowComplementFeaturesOnTop() + { + if (showComplementFeaturesOnTop == null) + { + return false; + } + else + { + return showComplementFeaturesOnTop; + } + } - /** - * Sets the value of the xpos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setXpos(Integer value) { - this.xpos = value; - } + /** + * Sets the value of the showComplementFeaturesOnTop property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowComplementFeaturesOnTop(Boolean value) + { + this.showComplementFeaturesOnTop = value; + } - /** - * Gets the value of the ypos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getYpos() { - return ypos; - } + /** + * Gets the value of the width property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getWidth() + { + return width; + } - /** - * Sets the value of the ypos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setYpos(Integer value) { - this.ypos = value; - } + /** + * Sets the value of the width property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setWidth(Integer value) + { + this.width = value; + } + /** + * Gets the value of the height property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getHeight() + { + return height; + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <extension base="{www.jalview.org/xml/wsparamset}WebServiceParameterSet">
-         *       <attribute name="calcId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="needsUpdate" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-         *       <attribute name="autoUpdate" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-         *     </extension>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class CalcIdParam - extends WebServiceParameterSet - { + /** + * Sets the value of the height property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setHeight(Integer value) + { + this.height = value; + } - @XmlAttribute(name = "calcId", required = true) - protected String calcId; - @XmlAttribute(name = "needsUpdate") - protected Boolean needsUpdate; - @XmlAttribute(name = "autoUpdate", required = true) - protected boolean autoUpdate; - - /** - * Gets the value of the calcId property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCalcId() { - return calcId; - } - - /** - * Sets the value of the calcId property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCalcId(String value) { - this.calcId = value; - } - - /** - * Gets the value of the needsUpdate property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isNeedsUpdate() { - if (needsUpdate == null) { - return false; - } else { - return needsUpdate; - } - } - - /** - * Sets the value of the needsUpdate property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setNeedsUpdate(Boolean value) { - this.needsUpdate = value; - } - - /** - * Gets the value of the autoUpdate property. - * - */ - public boolean isAutoUpdate() { - return autoUpdate; - } - - /** - * Sets the value of the autoUpdate property. - * - */ - public void setAutoUpdate(boolean value) { - this.autoUpdate = value; - } + /** + * Gets the value of the xpos property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getXpos() + { + return xpos; + } - } + /** + * Sets the value of the xpos property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setXpos(Integer value) + { + this.xpos = value; + } + /** + * Gets the value of the ypos property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getYpos() + { + return ypos; + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *       <attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class HiddenColumns { - - @XmlAttribute(name = "start") - protected Integer start; - @XmlAttribute(name = "end") - protected Integer end; - - /** - * Gets the value of the start property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getStart() { - return start; - } - - /** - * Sets the value of the start property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setStart(Integer value) { - this.start = value; - } - - /** - * Gets the value of the end property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getEnd() { - return end; - } - - /** - * Sets the value of the end property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setEnd(Integer value) { - this.end = value; - } + /** + * Sets the value of the ypos property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setYpos(Integer value) + { + this.ypos = value; + } + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <extension base="{www.jalview.org/xml/wsparamset}WebServiceParameterSet">
+     *       <attribute name="calcId" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="needsUpdate" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+     *       <attribute name="autoUpdate" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *     </extension>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class CalcIdParam extends WebServiceParameterSet + { + + @XmlAttribute(name = "calcId", required = true) + protected String calcId; + + @XmlAttribute(name = "needsUpdate") + protected Boolean needsUpdate; + + @XmlAttribute(name = "autoUpdate", required = true) + protected boolean autoUpdate; + + /** + * Gets the value of the calcId property. + * + * @return possible object is {@link String } + * + */ + public String getCalcId() + { + return calcId; + } + + /** + * Sets the value of the calcId property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setCalcId(String value) + { + this.calcId = value; + } + + /** + * Gets the value of the needsUpdate property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isNeedsUpdate() + { + if (needsUpdate == null) + { + return false; } + else + { + return needsUpdate; + } + } + + /** + * Sets the value of the needsUpdate property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setNeedsUpdate(Boolean value) + { + this.needsUpdate = value; + } + + /** + * Gets the value of the autoUpdate property. + * + */ + public boolean isAutoUpdate() + { + return autoUpdate; + } + + /** + * Sets the value of the autoUpdate property. + * + */ + public void setAutoUpdate(boolean value) + { + this.autoUpdate = value; + } + } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attGroup ref="{www.jalview.org}swingwindow"/>
-         *       <attribute name="showHidden" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-         *       <attribute name="residueColour" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *       <attribute name="gapColour" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *       <attribute name="hiddenColour" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Overview { - - @XmlAttribute(name = "showHidden") - protected Boolean showHidden; - @XmlAttribute(name = "residueColour") - protected Integer residueColour; - @XmlAttribute(name = "gapColour") - protected Integer gapColour; - @XmlAttribute(name = "hiddenColour") - protected Integer hiddenColour; - @XmlAttribute(name = "title") - protected String title; - @XmlAttribute(name = "width") - protected Integer width; - @XmlAttribute(name = "height") - protected Integer height; - @XmlAttribute(name = "xpos") - protected Integer xpos; - @XmlAttribute(name = "ypos") - protected Integer ypos; - - /** - * Gets the value of the showHidden property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isShowHidden() { - return showHidden; - } - - /** - * Sets the value of the showHidden property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setShowHidden(Boolean value) { - this.showHidden = value; - } - - /** - * Gets the value of the residueColour property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getResidueColour() { - return residueColour; - } - - /** - * Sets the value of the residueColour property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setResidueColour(Integer value) { - this.residueColour = value; - } - - /** - * Gets the value of the gapColour property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getGapColour() { - return gapColour; - } - - /** - * Sets the value of the gapColour property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setGapColour(Integer value) { - this.gapColour = value; - } - - /** - * Gets the value of the hiddenColour property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getHiddenColour() { - return hiddenColour; - } - - /** - * Sets the value of the hiddenColour property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setHiddenColour(Integer value) { - this.hiddenColour = value; - } - - /** - * Gets the value of the title property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTitle() { - return title; - } - - /** - * Sets the value of the title property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTitle(String value) { - this.title = value; - } - - /** - * Gets the value of the width property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getWidth() { - return width; - } - - /** - * Sets the value of the width property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setWidth(Integer value) { - this.width = value; - } - - /** - * Gets the value of the height property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getHeight() { - return height; - } - - /** - * Sets the value of the height property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setHeight(Integer value) { - this.height = value; - } - - /** - * Gets the value of the xpos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getXpos() { - return xpos; - } - - /** - * Sets the value of the xpos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setXpos(Integer value) { - this.xpos = value; - } - - /** - * Gets the value of the ypos property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getYpos() { - return ypos; - } - - /** - * Sets the value of the ypos property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setYpos(Integer value) { - this.ypos = value; - } + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attribute name="start" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       <attribute name="end" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class HiddenColumns + { + + @XmlAttribute(name = "start") + protected Integer start; + + @XmlAttribute(name = "end") + protected Integer end; + + /** + * Gets the value of the start property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getStart() + { + return start; + } + + /** + * Sets the value of the start property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setStart(Integer value) + { + this.start = value; + } + + /** + * Gets the value of the end property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getEnd() + { + return end; + } + + /** + * Sets the value of the end property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setEnd(Integer value) + { + this.end = value; + } - } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attGroup ref="{www.jalview.org}swingwindow"/>
+     *       <attribute name="showHidden" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+     *       <attribute name="residueColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       <attribute name="gapColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       <attribute name="hiddenColour" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *       <attribute name="title" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Overview + { + + @XmlAttribute(name = "showHidden") + protected Boolean showHidden; + + @XmlAttribute(name = "residueColour") + protected Integer residueColour; + + @XmlAttribute(name = "gapColour") + protected Integer gapColour; + + @XmlAttribute(name = "hiddenColour") + protected Integer hiddenColour; + + @XmlAttribute(name = "title") + protected String title; + + @XmlAttribute(name = "width") + protected Integer width; + + @XmlAttribute(name = "height") + protected Integer height; + + @XmlAttribute(name = "xpos") + protected Integer xpos; + + @XmlAttribute(name = "ypos") + protected Integer ypos; + + /** + * Gets the value of the showHidden property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isShowHidden() + { + return showHidden; + } + + /** + * Sets the value of the showHidden property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setShowHidden(Boolean value) + { + this.showHidden = value; + } + + /** + * Gets the value of the residueColour property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getResidueColour() + { + return residueColour; + } + + /** + * Sets the value of the residueColour property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setResidueColour(Integer value) + { + this.residueColour = value; + } + + /** + * Gets the value of the gapColour property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getGapColour() + { + return gapColour; + } + + /** + * Sets the value of the gapColour property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setGapColour(Integer value) + { + this.gapColour = value; + } + + /** + * Gets the value of the hiddenColour property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getHiddenColour() + { + return hiddenColour; + } + + /** + * Sets the value of the hiddenColour property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setHiddenColour(Integer value) + { + this.hiddenColour = value; + } + + /** + * Gets the value of the title property. + * + * @return possible object is {@link String } + * + */ + public String getTitle() + { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTitle(String value) + { + this.title = value; + } + + /** + * Gets the value of the width property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getWidth() + { + return width; + } + + /** + * Sets the value of the width property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setWidth(Integer value) + { + this.width = value; + } + + /** + * Gets the value of the height property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getHeight() + { + return height; + } + + /** + * Sets the value of the height property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setHeight(Integer value) + { + this.height = value; + } + + /** + * Gets the value of the xpos property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getXpos() + { + return xpos; + } + + /** + * Sets the value of the xpos property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setXpos(Integer value) + { + this.xpos = value; + } + + /** + * Gets the value of the ypos property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getYpos() + { + return ypos; + } + + /** + * Sets the value of the ypos property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setYpos(Integer value) + { + this.ypos = value; + } } + } + } diff --git a/src/jalview/xml/binding/jalview/JalviewUserColours.java b/src/jalview/xml/binding/jalview/JalviewUserColours.java index b62cf15..e4b160f 100644 --- a/src/jalview/xml/binding/jalview/JalviewUserColours.java +++ b/src/jalview/xml/binding/jalview/JalviewUserColours.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import java.util.ArrayList; @@ -16,11 +15,13 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for JalviewUserColours complex type. + *

+ * Java class for JalviewUserColours complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="JalviewUserColours">
@@ -71,542 +72,556 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "JalviewUserColours", namespace = "www.jalview.org/colours", propOrder = {
-    "version",
-    "colour",
-    "filter"
-})
-public class JalviewUserColours {
-
-    @XmlElement(name = "Version", namespace = "")
-    protected String version;
-    @XmlElement(namespace = "")
-    protected List colour;
+@XmlType(
+  name = "JalviewUserColours",
+  namespace = "www.jalview.org/colours",
+  propOrder =
+  { "version", "colour", "filter" })
+public class JalviewUserColours
+{
+
+  @XmlElement(name = "Version", namespace = "")
+  protected String version;
+
+  @XmlElement(namespace = "")
+  protected List colour;
+
+  @XmlElement(namespace = "")
+  protected List filter;
+
+  @XmlAttribute(name = "schemeName")
+  protected String schemeName;
+
+  /**
+   * Gets the value of the version property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getVersion()
+  {
+    return version;
+  }
+
+  /**
+   * Sets the value of the version property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setVersion(String value)
+  {
+    this.version = value;
+  }
+
+  /**
+   * Gets the value of the colour property.
+   * 
+   * 

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the colour property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getColour().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewUserColours.Colour } + * + * + */ + public List getColour() + { + if (colour == null) + { + colour = new ArrayList(); + } + return this.colour; + } + + /** + * Gets the value of the filter property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the filter property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getFilter().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link JalviewUserColours.Filter } + * + * + */ + public List getFilter() + { + if (filter == null) + { + filter = new ArrayList(); + } + return this.filter; + } + + /** + * Gets the value of the schemeName property. + * + * @return possible object is {@link String } + * + */ + public String getSchemeName() + { + return schemeName; + } + + /** + * Sets the value of the schemeName property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setSchemeName(String value) + { + this.schemeName = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="2" minOccurs="0"/>
+   *       </sequence>
+   *       <attribute name="Name" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="RGB" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="minRGB" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="noValueColour" type="{www.jalview.org/colours}NoValueColour" default="Min" />
+   *       <attribute name="threshType" type="{www.jalview.org/colours}ThresholdType" />
+   *       <attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *       <attribute name="max" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *       <attribute name="min" type="{http://www.w3.org/2001/XMLSchema}float" />
+   *       <attribute name="colourByLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *       <attribute name="autoScale" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "attributeName" }) + public static class Colour + { + @XmlElement(namespace = "") - protected List filter; - @XmlAttribute(name = "schemeName") - protected String schemeName; + protected List attributeName; + + @XmlAttribute(name = "Name") + protected String name; + + @XmlAttribute(name = "RGB", required = true) + protected String rgb; + + @XmlAttribute(name = "minRGB") + protected String minRGB; + + @XmlAttribute(name = "noValueColour") + protected NoValueColour noValueColour; + + @XmlAttribute(name = "threshType") + protected ThresholdType threshType; + + @XmlAttribute(name = "threshold") + protected Float threshold; + + @XmlAttribute(name = "max") + protected Float max; + + @XmlAttribute(name = "min") + protected Float min; + + @XmlAttribute(name = "colourByLabel") + protected Boolean colourByLabel; + + @XmlAttribute(name = "autoScale") + protected Boolean autoScale; /** - * Gets the value of the version property. + * Gets the value of the attributeName property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the attributeName property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getAttributeName().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * * - * @return - * possible object is - * {@link String } - * */ - public String getVersion() { - return version; + public List getAttributeName() + { + if (attributeName == null) + { + attributeName = new ArrayList(); + } + return this.attributeName; } /** - * Sets the value of the version property. + * Gets the value of the name property. + * + * @return possible object is {@link String } + * + */ + public String getName() + { + return name; + } + + /** + * Sets the value of the name property. * * @param value - * allowed object is - * {@link String } - * + * allowed object is {@link String } + * */ - public void setVersion(String value) { - this.version = value; + public void setName(String value) + { + this.name = value; } /** - * Gets the value of the colour property. + * Gets the value of the rgb property. * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the colour property. + * @return possible object is {@link String } * - *

- * For example, to add a new item, do as follows: - *

-     *    getColour().add(newItem);
-     * 
+ */ + public String getRGB() + { + return rgb; + } + + /** + * Sets the value of the rgb property. * + * @param value + * allowed object is {@link String } * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewUserColours.Colour } + */ + public void setRGB(String value) + { + this.rgb = value; + } + + /** + * Gets the value of the minRGB property. * + * @return possible object is {@link String } * */ - public List getColour() { - if (colour == null) { - colour = new ArrayList(); - } - return this.colour; + public String getMinRGB() + { + return minRGB; } /** - * Gets the value of the filter property. + * Sets the value of the minRGB property. * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the filter property. + * @param value + * allowed object is {@link String } * - *

- * For example, to add a new item, do as follows: - *

-     *    getFilter().add(newItem);
-     * 
+ */ + public void setMinRGB(String value) + { + this.minRGB = value; + } + + /** + * Gets the value of the noValueColour property. * + * @return possible object is {@link NoValueColour } * - *

- * Objects of the following type(s) are allowed in the list - * {@link JalviewUserColours.Filter } + */ + public NoValueColour getNoValueColour() + { + if (noValueColour == null) + { + return NoValueColour.MIN; + } + else + { + return noValueColour; + } + } + + /** + * Sets the value of the noValueColour property. * + * @param value + * allowed object is {@link NoValueColour } * */ - public List getFilter() { - if (filter == null) { - filter = new ArrayList(); - } - return this.filter; + public void setNoValueColour(NoValueColour value) + { + this.noValueColour = value; } /** - * Gets the value of the schemeName property. + * Gets the value of the threshType property. + * + * @return possible object is {@link ThresholdType } * - * @return - * possible object is - * {@link String } - * */ - public String getSchemeName() { - return schemeName; + public ThresholdType getThreshType() + { + return threshType; } /** - * Sets the value of the schemeName property. + * Sets the value of the threshType property. * * @param value - * allowed object is - * {@link String } - * + * allowed object is {@link ThresholdType } + * */ - public void setSchemeName(String value) { - this.schemeName = value; + public void setThreshType(ThresholdType value) + { + this.threshType = value; } + /** + * Gets the value of the threshold property. + * + * @return possible object is {@link Float } + * + */ + public Float getThreshold() + { + return threshold; + } /** - *

Java class for anonymous complex type. + * Sets the value of the threshold property. * - *

The following schema fragment specifies the expected content contained within this class. + * @param value + * allowed object is {@link Float } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="2" minOccurs="0"/>
-     *       </sequence>
-     *       <attribute name="Name" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="RGB" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="minRGB" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="noValueColour" type="{www.jalview.org/colours}NoValueColour" default="Min" />
-     *       <attribute name="threshType" type="{www.jalview.org/colours}ThresholdType" />
-     *       <attribute name="threshold" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *       <attribute name="max" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *       <attribute name="min" type="{http://www.w3.org/2001/XMLSchema}float" />
-     *       <attribute name="colourByLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *       <attribute name="autoScale" type="{http://www.w3.org/2001/XMLSchema}boolean" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public void setThreshold(Float value) + { + this.threshold = value; + } + + /** + * Gets the value of the max property. + * + * @return possible object is {@link Float } + * + */ + public Float getMax() + { + return max; + } + + /** + * Sets the value of the max property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setMax(Float value) + { + this.max = value; + } + + /** + * Gets the value of the min property. * + * @return possible object is {@link Float } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "attributeName" - }) - public static class Colour { - - @XmlElement(namespace = "") - protected List attributeName; - @XmlAttribute(name = "Name") - protected String name; - @XmlAttribute(name = "RGB", required = true) - protected String rgb; - @XmlAttribute(name = "minRGB") - protected String minRGB; - @XmlAttribute(name = "noValueColour") - protected NoValueColour noValueColour; - @XmlAttribute(name = "threshType") - protected ThresholdType threshType; - @XmlAttribute(name = "threshold") - protected Float threshold; - @XmlAttribute(name = "max") - protected Float max; - @XmlAttribute(name = "min") - protected Float min; - @XmlAttribute(name = "colourByLabel") - protected Boolean colourByLabel; - @XmlAttribute(name = "autoScale") - protected Boolean autoScale; - - /** - * Gets the value of the attributeName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the attributeName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getAttributeName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getAttributeName() { - if (attributeName == null) { - attributeName = new ArrayList(); - } - return this.attributeName; - } - - /** - * Gets the value of the name property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Sets the value of the name property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Gets the value of the rgb property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getRGB() { - return rgb; - } - - /** - * Sets the value of the rgb property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setRGB(String value) { - this.rgb = value; - } - - /** - * Gets the value of the minRGB property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getMinRGB() { - return minRGB; - } - - /** - * Sets the value of the minRGB property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setMinRGB(String value) { - this.minRGB = value; - } - - /** - * Gets the value of the noValueColour property. - * - * @return - * possible object is - * {@link NoValueColour } - * - */ - public NoValueColour getNoValueColour() { - if (noValueColour == null) { - return NoValueColour.MIN; - } else { - return noValueColour; - } - } - - /** - * Sets the value of the noValueColour property. - * - * @param value - * allowed object is - * {@link NoValueColour } - * - */ - public void setNoValueColour(NoValueColour value) { - this.noValueColour = value; - } - - /** - * Gets the value of the threshType property. - * - * @return - * possible object is - * {@link ThresholdType } - * - */ - public ThresholdType getThreshType() { - return threshType; - } - - /** - * Sets the value of the threshType property. - * - * @param value - * allowed object is - * {@link ThresholdType } - * - */ - public void setThreshType(ThresholdType value) { - this.threshType = value; - } - - /** - * Gets the value of the threshold property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getThreshold() { - return threshold; - } - - /** - * Sets the value of the threshold property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setThreshold(Float value) { - this.threshold = value; - } - - /** - * Gets the value of the max property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getMax() { - return max; - } - - /** - * Sets the value of the max property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setMax(Float value) { - this.max = value; - } - - /** - * Gets the value of the min property. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getMin() { - return min; - } - - /** - * Sets the value of the min property. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setMin(Float value) { - this.min = value; - } - - /** - * Gets the value of the colourByLabel property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isColourByLabel() { - return colourByLabel; - } - - /** - * Sets the value of the colourByLabel property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setColourByLabel(Boolean value) { - this.colourByLabel = value; - } - - /** - * Gets the value of the autoScale property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isAutoScale() { - return autoScale; - } - - /** - * Sets the value of the autoScale property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setAutoScale(Boolean value) { - this.autoScale = value; - } + public Float getMin() + { + return min; + } + /** + * Sets the value of the min property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setMin(Float value) + { + this.min = value; } + /** + * Gets the value of the colourByLabel property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isColourByLabel() + { + return colourByLabel; + } /** - *

Java class for anonymous complex type. + * Sets the value of the colourByLabel property. * - *

The following schema fragment specifies the expected content contained within this class. + * @param value + * allowed object is {@link Boolean } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet"/>
-     *       </sequence>
-     *       <attribute name="featureType" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public void setColourByLabel(Boolean value) + { + this.colourByLabel = value; + } + + /** + * Gets the value of the autoScale property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isAutoScale() + { + return autoScale; + } + + /** + * Sets the value of the autoScale property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setAutoScale(Boolean value) + { + this.autoScale = value; + } + + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="matcherSet" type="{www.jalview.org/colours}FeatureMatcherSet"/>
+   *       </sequence>
+   *       <attribute name="featureType" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "matcherSet" }) + public static class Filter + { + + @XmlElement(namespace = "", required = true) + protected FeatureMatcherSet matcherSet; + + @XmlAttribute(name = "featureType", required = true) + protected String featureType; + + /** + * Gets the value of the matcherSet property. + * + * @return possible object is {@link FeatureMatcherSet } + * + */ + public FeatureMatcherSet getMatcherSet() + { + return matcherSet; + } + + /** + * Sets the value of the matcherSet property. + * + * @param value + * allowed object is {@link FeatureMatcherSet } + * + */ + public void setMatcherSet(FeatureMatcherSet value) + { + this.matcherSet = value; + } + + /** + * Gets the value of the featureType property. * + * @return possible object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "matcherSet" - }) - public static class Filter { - - @XmlElement(namespace = "", required = true) - protected FeatureMatcherSet matcherSet; - @XmlAttribute(name = "featureType", required = true) - protected String featureType; - - /** - * Gets the value of the matcherSet property. - * - * @return - * possible object is - * {@link FeatureMatcherSet } - * - */ - public FeatureMatcherSet getMatcherSet() { - return matcherSet; - } - - /** - * Sets the value of the matcherSet property. - * - * @param value - * allowed object is - * {@link FeatureMatcherSet } - * - */ - public void setMatcherSet(FeatureMatcherSet value) { - this.matcherSet = value; - } - - /** - * Gets the value of the featureType property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFeatureType() { - return featureType; - } - - /** - * Sets the value of the featureType property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFeatureType(String value) { - this.featureType = value; - } + public String getFeatureType() + { + return featureType; + } + /** + * Sets the value of the featureType property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setFeatureType(String value) + { + this.featureType = value; } + } + } diff --git a/src/jalview/xml/binding/jalview/MapListType.java b/src/jalview/xml/binding/jalview/MapListType.java index 7a86123..1f16680 100644 --- a/src/jalview/xml/binding/jalview/MapListType.java +++ b/src/jalview/xml/binding/jalview/MapListType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import java.math.BigInteger; @@ -18,15 +17,17 @@ import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; - /** * - * This effectively represents a java.util.MapList object - * + * This effectively represents a java.util.MapList object * - *

Java class for mapListType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * Java class for mapListType complex type. + * + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="mapListType">
@@ -64,252 +65,271 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "mapListType", propOrder = {
-    "mapListFrom",
-    "mapListTo"
-})
-@XmlSeeAlso({
-    Mapping.class
-})
-public class MapListType {
+@XmlType(name = "mapListType", propOrder = { "mapListFrom", "mapListTo" })
+@XmlSeeAlso({ Mapping.class })
+public class MapListType
+{
+
+  protected List mapListFrom;
+
+  protected List mapListTo;
+
+  @XmlAttribute(name = "mapFromUnit", required = true)
+  @XmlSchemaType(name = "positiveInteger")
+  protected BigInteger mapFromUnit;
+
+  @XmlAttribute(name = "mapToUnit", required = true)
+  @XmlSchemaType(name = "positiveInteger")
+  protected BigInteger mapToUnit;
+
+  /**
+   * Gets the value of the mapListFrom property.
+   * 
+   * 

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the mapListFrom property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getMapListFrom().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link MapListType.MapListFrom } + * + * + */ + public List getMapListFrom() + { + if (mapListFrom == null) + { + mapListFrom = new ArrayList(); + } + return this.mapListFrom; + } + + /** + * Gets the value of the mapListTo property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the mapListTo property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getMapListTo().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link MapListType.MapListTo } + * + * + */ + public List getMapListTo() + { + if (mapListTo == null) + { + mapListTo = new ArrayList(); + } + return this.mapListTo; + } + + /** + * Gets the value of the mapFromUnit property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getMapFromUnit() + { + return mapFromUnit; + } + + /** + * Sets the value of the mapFromUnit property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setMapFromUnit(BigInteger value) + { + this.mapFromUnit = value; + } - protected List mapListFrom; - protected List mapListTo; - @XmlAttribute(name = "mapFromUnit", required = true) - @XmlSchemaType(name = "positiveInteger") - protected BigInteger mapFromUnit; - @XmlAttribute(name = "mapToUnit", required = true) - @XmlSchemaType(name = "positiveInteger") - protected BigInteger mapToUnit; + /** + * Gets the value of the mapToUnit property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getMapToUnit() + { + return mapToUnit; + } + + /** + * Sets the value of the mapToUnit property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setMapToUnit(BigInteger value) + { + this.mapToUnit = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <attribute name="start" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class MapListFrom + { + + @XmlAttribute(name = "start", required = true) + protected int start; + + @XmlAttribute(name = "end", required = true) + protected int end; /** - * Gets the value of the mapListFrom property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mapListFrom property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMapListFrom().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link MapListType.MapListFrom } - * + * Gets the value of the start property. * */ - public List getMapListFrom() { - if (mapListFrom == null) { - mapListFrom = new ArrayList(); - } - return this.mapListFrom; + public int getStart() + { + return start; } /** - * Gets the value of the mapListTo property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mapListTo property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMapListTo().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link MapListType.MapListTo } - * + * Sets the value of the start property. * */ - public List getMapListTo() { - if (mapListTo == null) { - mapListTo = new ArrayList(); - } - return this.mapListTo; + public void setStart(int value) + { + this.start = value; } /** - * Gets the value of the mapFromUnit property. + * Gets the value of the end property. * - * @return - * possible object is - * {@link BigInteger } - * */ - public BigInteger getMapFromUnit() { - return mapFromUnit; + public int getEnd() + { + return end; } /** - * Sets the value of the mapFromUnit property. + * Sets the value of the end property. * - * @param value - * allowed object is - * {@link BigInteger } - * */ - public void setMapFromUnit(BigInteger value) { - this.mapFromUnit = value; + public void setEnd(int value) + { + this.end = value; } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <attribute name="start" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class MapListTo + { + + @XmlAttribute(name = "start", required = true) + protected int start; + + @XmlAttribute(name = "end", required = true) + protected int end; + /** - * Gets the value of the mapToUnit property. + * Gets the value of the start property. * - * @return - * possible object is - * {@link BigInteger } - * */ - public BigInteger getMapToUnit() { - return mapToUnit; + public int getStart() + { + return start; } /** - * Sets the value of the mapToUnit property. + * Sets the value of the start property. * - * @param value - * allowed object is - * {@link BigInteger } - * */ - public void setMapToUnit(BigInteger value) { - this.mapToUnit = value; + public void setStart(int value) + { + this.start = value; } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="start" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- * + * Gets the value of the end property. * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class MapListFrom { - - @XmlAttribute(name = "start", required = true) - protected int start; - @XmlAttribute(name = "end", required = true) - protected int end; - - /** - * Gets the value of the start property. - * - */ - public int getStart() { - return start; - } - - /** - * Sets the value of the start property. - * - */ - public void setStart(int value) { - this.start = value; - } - - /** - * Gets the value of the end property. - * - */ - public int getEnd() { - return end; - } - - /** - * Sets the value of the end property. - * - */ - public void setEnd(int value) { - this.end = value; - } - + public int getEnd() + { + return end; } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="start" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *       <attribute name="end" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- * + * Sets the value of the end property. * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class MapListTo { - - @XmlAttribute(name = "start", required = true) - protected int start; - @XmlAttribute(name = "end", required = true) - protected int end; - - /** - * Gets the value of the start property. - * - */ - public int getStart() { - return start; - } - - /** - * Sets the value of the start property. - * - */ - public void setStart(int value) { - this.start = value; - } - - /** - * Gets the value of the end property. - * - */ - public int getEnd() { - return end; - } - - /** - * Sets the value of the end property. - * - */ - public void setEnd(int value) { - this.end = value; - } - + public void setEnd(int value) + { + this.end = value; } + } + } diff --git a/src/jalview/xml/binding/jalview/Mapping.java b/src/jalview/xml/binding/jalview/Mapping.java index 10d3d5b..69bf01d 100644 --- a/src/jalview/xml/binding/jalview/Mapping.java +++ b/src/jalview/xml/binding/jalview/Mapping.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import javax.xml.bind.annotation.XmlAccessType; @@ -15,17 +14,19 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; - /** * - * Represent the jalview.datamodel.Mapping object - it also provides - * a way of storing sequences that are mapped 'to' without adding them - * to the sequence set (which will mean they are then added to the alignment too). - * + * Represent the jalview.datamodel.Mapping object - it also provides a way of + * storing sequences that are mapped 'to' without adding them to the sequence + * set (which will mean they are then added to the alignment too). + * * - *

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType>
@@ -51,91 +52,86 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
-    "sequence",
-    "dseqFor"
-})
+@XmlType(name = "", propOrder = { "sequence", "dseqFor" })
 @XmlRootElement(name = "Mapping")
-public class Mapping
-    extends MapListType
+public class Mapping extends MapListType
 {
 
-    @XmlElement(name = "Sequence")
-    protected Sequence sequence;
-    protected String dseqFor;
-    @XmlAttribute(name = "mappingType")
-    protected String mappingType;
+  @XmlElement(name = "Sequence")
+  protected Sequence sequence;
+
+  protected String dseqFor;
+
+  @XmlAttribute(name = "mappingType")
+  protected String mappingType;
 
-    /**
-     * Gets the value of the sequence property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Sequence }
-     *     
-     */
-    public Sequence getSequence() {
-        return sequence;
-    }
+  /**
+   * Gets the value of the sequence property.
+   * 
+   * @return possible object is {@link Sequence }
+   * 
+   */
+  public Sequence getSequence()
+  {
+    return sequence;
+  }
 
-    /**
-     * Sets the value of the sequence property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Sequence }
-     *     
-     */
-    public void setSequence(Sequence value) {
-        this.sequence = value;
-    }
+  /**
+   * Sets the value of the sequence property.
+   * 
+   * @param value
+   *          allowed object is {@link Sequence }
+   * 
+   */
+  public void setSequence(Sequence value)
+  {
+    this.sequence = value;
+  }
 
-    /**
-     * Gets the value of the dseqFor property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getDseqFor() {
-        return dseqFor;
-    }
+  /**
+   * Gets the value of the dseqFor property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getDseqFor()
+  {
+    return dseqFor;
+  }
 
-    /**
-     * Sets the value of the dseqFor property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setDseqFor(String value) {
-        this.dseqFor = value;
-    }
+  /**
+   * Sets the value of the dseqFor property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setDseqFor(String value)
+  {
+    this.dseqFor = value;
+  }
 
-    /**
-     * Gets the value of the mappingType property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getMappingType() {
-        return mappingType;
-    }
+  /**
+   * Gets the value of the mappingType property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getMappingType()
+  {
+    return mappingType;
+  }
 
-    /**
-     * Sets the value of the mappingType property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setMappingType(String value) {
-        this.mappingType = value;
-    }
+  /**
+   * Sets the value of the mappingType property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setMappingType(String value)
+  {
+    this.mappingType = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/MatrixType.java b/src/jalview/xml/binding/jalview/MatrixType.java
index d884100..c405597 100644
--- a/src/jalview/xml/binding/jalview/MatrixType.java
+++ b/src/jalview/xml/binding/jalview/MatrixType.java
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
 
@@ -19,9 +19,12 @@ import javax.xml.bind.annotation.XmlType;
 
 
 /**
- * 

Java class for MatrixType complex type. + *

+ * Java class for MatrixType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="MatrixType">
@@ -32,6 +35,7 @@ import javax.xml.bind.annotation.XmlType;
  *         <element name="groups" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
  *         <element name="newick" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
  *         <element name="property" type="{www.vamsas.ac.uk/jalview/version2}property" maxOccurs="unbounded" minOccurs="0"/>
+ *         <element name="mapping" type="{www.vamsas.ac.uk/jalview/version2}mapListType" minOccurs="0"/>
  *       </sequence>
  *       <attribute name="type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
  *       <attribute name="rows" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
@@ -47,285 +51,317 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "MatrixType", propOrder = {
-    "elements",
-    "groups",
-    "newick",
-    "property"
-})
-public class MatrixType {
-
-    @XmlElement(required = true)
-    protected String elements;
-    protected List groups;
-    protected List newick;
-    protected List property;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
-    @XmlAttribute(name = "rows", required = true)
-    protected BigInteger rows;
-    @XmlAttribute(name = "cols", required = true)
-    protected BigInteger cols;
-    @XmlAttribute(name = "treeMethod")
-    protected String treeMethod;
-    @XmlAttribute(name = "cutHeight")
-    protected Double cutHeight;
-    @XmlAttribute(name = "id")
-    protected String id;
-
-    /**
-     * Gets the value of the elements property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getElements() {
-        return elements;
-    }
+@XmlType(
+  name = "MatrixType",
+  propOrder =
+  { "elements", "groups", "newick", "property", "mapping" })
+public class MatrixType
+{
 
-    /**
-     * Sets the value of the elements property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setElements(String value) {
-        this.elements = value;
-    }
+  @XmlElement(required = true)
+  protected String elements;
 
-    /**
-     * Gets the value of the groups property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the groups property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getGroups().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getGroups() { - if (groups == null) { - groups = new ArrayList(); - } - return this.groups; - } + protected List groups; - /** - * Gets the value of the newick property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the newick property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getNewick().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getNewick() { - if (newick == null) { - newick = new ArrayList(); - } - return this.newick; - } + protected List newick; - /** - * Gets the value of the property property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the property property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getProperty().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Property } - * - * - */ - public List getProperty() { - if (property == null) { - property = new ArrayList(); - } - return this.property; - } + protected List property; - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } + protected MapListType mapping; - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } + @XmlAttribute(name = "type", required = true) + protected String type; - /** - * Gets the value of the rows property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getRows() { - return rows; - } + @XmlAttribute(name = "rows", required = true) + protected BigInteger rows; - /** - * Sets the value of the rows property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setRows(BigInteger value) { - this.rows = value; - } + @XmlAttribute(name = "cols", required = true) + protected BigInteger cols; - /** - * Gets the value of the cols property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getCols() { - return cols; - } + @XmlAttribute(name = "treeMethod") + protected String treeMethod; - /** - * Sets the value of the cols property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setCols(BigInteger value) { - this.cols = value; - } + @XmlAttribute(name = "cutHeight") + protected Double cutHeight; - /** - * Gets the value of the treeMethod property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTreeMethod() { - return treeMethod; - } + @XmlAttribute(name = "id") + protected String id; - /** - * Sets the value of the treeMethod property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTreeMethod(String value) { - this.treeMethod = value; - } + /** + * Gets the value of the elements property. + * + * @return possible object is {@link String } + * + */ + public String getElements() + { + return elements; + } - /** - * Gets the value of the cutHeight property. - * - * @return - * possible object is - * {@link Double } - * - */ - public Double getCutHeight() { - return cutHeight; - } + /** + * Sets the value of the elements property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setElements(String value) + { + this.elements = value; + } - /** - * Sets the value of the cutHeight property. - * - * @param value - * allowed object is - * {@link Double } - * - */ - public void setCutHeight(Double value) { - this.cutHeight = value; + /** + * Gets the value of the groups property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the groups property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getGroups().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getGroups() + { + if (groups == null) + { + groups = new ArrayList(); } + return this.groups; + } - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; + /** + * Gets the value of the newick property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the newick property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getNewick().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getNewick() + { + if (newick == null) + { + newick = new ArrayList(); } + return this.newick; + } - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; + /** + * Gets the value of the property property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the property property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getProperty().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Property } + * + * + */ + public List getProperty() + { + if (property == null) + { + property = new ArrayList(); } + return this.property; + } + + /** + * Gets the value of the mapping property. + * + * @return possible object is {@link MapListType } + * + */ + public MapListType getMapping() + { + return mapping; + } + + /** + * Sets the value of the mapping property. + * + * @param value + * allowed object is {@link MapListType } + * + */ + public void setMapping(MapListType value) + { + this.mapping = value; + } + + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } + + /** + * Gets the value of the rows property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getRows() + { + return rows; + } + + /** + * Sets the value of the rows property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setRows(BigInteger value) + { + this.rows = value; + } + + /** + * Gets the value of the cols property. + * + * @return possible object is {@link BigInteger } + * + */ + public BigInteger getCols() + { + return cols; + } + + /** + * Sets the value of the cols property. + * + * @param value + * allowed object is {@link BigInteger } + * + */ + public void setCols(BigInteger value) + { + this.cols = value; + } + + /** + * Gets the value of the treeMethod property. + * + * @return possible object is {@link String } + * + */ + public String getTreeMethod() + { + return treeMethod; + } + + /** + * Sets the value of the treeMethod property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTreeMethod(String value) + { + this.treeMethod = value; + } + + /** + * Gets the value of the cutHeight property. + * + * @return possible object is {@link Double } + * + */ + public Double getCutHeight() + { + return cutHeight; + } + + /** + * Sets the value of the cutHeight property. + * + * @param value + * allowed object is {@link Double } + * + */ + public void setCutHeight(Double value) + { + this.cutHeight = value; + } + + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } } diff --git a/src/jalview/xml/binding/jalview/NoValueColour.java b/src/jalview/xml/binding/jalview/NoValueColour.java index 22b78a5..eeeed22 100644 --- a/src/jalview/xml/binding/jalview/NoValueColour.java +++ b/src/jalview/xml/binding/jalview/NoValueColour.java @@ -2,22 +2,24 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import javax.xml.bind.annotation.XmlEnum; import javax.xml.bind.annotation.XmlEnumValue; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for NoValueColour. + *

+ * Java class for NoValueColour. * - *

The following schema fragment specifies the expected content contained within this class. *

+ * The following schema fragment specifies the expected content contained within + * this class. + *

+ * *

  * <simpleType name="NoValueColour">
  *   <restriction base="{http://www.w3.org/2001/XMLSchema}string">
@@ -31,31 +33,36 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlType(name = "NoValueColour", namespace = "www.jalview.org/colours")
 @XmlEnum
-public enum NoValueColour {
-
-    @XmlEnumValue("None")
-    NONE("None"),
-    @XmlEnumValue("Min")
-    MIN("Min"),
-    @XmlEnumValue("Max")
-    MAX("Max");
-    private final String value;
-
-    NoValueColour(String v) {
-        value = v;
-    }
+public enum NoValueColour
+{
 
-    public String value() {
-        return value;
-    }
+  @XmlEnumValue("None")
+  NONE("None"), @XmlEnumValue("Min")
+  MIN("Min"), @XmlEnumValue("Max")
+  MAX("Max");
+
+  private final String value;
+
+  NoValueColour(String v)
+  {
+    value = v;
+  }
+
+  public String value()
+  {
+    return value;
+  }
 
-    public static NoValueColour fromValue(String v) {
-        for (NoValueColour c: NoValueColour.values()) {
-            if (c.value.equals(v)) {
-                return c;
-            }
-        }
-        throw new IllegalArgumentException(v);
+  public static NoValueColour fromValue(String v)
+  {
+    for (NoValueColour c : NoValueColour.values())
+    {
+      if (c.value.equals(v))
+      {
+        return c;
+      }
     }
+    throw new IllegalArgumentException(v);
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/ObjectFactory.java b/src/jalview/xml/binding/jalview/ObjectFactory.java
index f034a2a..993adae7 100644
--- a/src/jalview/xml/binding/jalview/ObjectFactory.java
+++ b/src/jalview/xml/binding/jalview/ObjectFactory.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
-
 package jalview.xml.binding.jalview;
 
 import javax.xml.bind.JAXBElement;
@@ -13,492 +12,567 @@ import javax.xml.bind.annotation.XmlElementDecl;
 import javax.xml.bind.annotation.XmlRegistry;
 import javax.xml.namespace.QName;
 
-
 /**
- * This object contains factory methods for each 
- * Java content interface and Java element interface 
- * generated in the jalview.xml.binding.jalview package. 
- * 

An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. + * This object contains factory methods for each Java content interface and Java + * element interface generated in the jalview.xml.binding.jalview package. + *

+ * An ObjectFactory allows you to programatically construct new instances of the + * Java representation for XML content. The Java representation of XML content + * can consist of schema derived interfaces and classes representing the binding + * of schema type definitions, element declarations and model groups. Factory + * methods for each of these are provided in this class. * */ @XmlRegistry -public class ObjectFactory { - - private final static QName _WebServiceParameterSet_QNAME = new QName("www.jalview.org/xml/wsparamset", "WebServiceParameterSet"); - private final static QName _JalviewModel_QNAME = new QName("www.jalview.org", "JalviewModel"); - private final static QName _JalviewUserColours_QNAME = new QName("www.jalview.org/colours", "JalviewUserColours"); - - /** - * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: jalview.xml.binding.jalview - * - */ - public ObjectFactory() { - } - - /** - * Create an instance of {@link AlcodonFrame } - * - */ - public AlcodonFrame createAlcodonFrame() { - return new AlcodonFrame(); - } - - /** - * Create an instance of {@link MapListType } - * - */ - public MapListType createMapListType() { - return new MapListType(); - } - - /** - * Create an instance of {@link Sequence } - * - */ - public Sequence createSequence() { - return new Sequence(); - } - - /** - * Create an instance of {@link Annotation } - * - */ - public Annotation createAnnotation() { - return new Annotation(); - } - - /** - * Create an instance of {@link SequenceSet } - * - */ - public SequenceSet createSequenceSet() { - return new SequenceSet(); - } - - /** - * Create an instance of {@link FeatureMatcherSet } - * - */ - public FeatureMatcherSet createFeatureMatcherSet() { - return new FeatureMatcherSet(); - } - - /** - * Create an instance of {@link JalviewUserColours } - * - */ - public JalviewUserColours createJalviewUserColours() { - return new JalviewUserColours(); - } - - /** - * Create an instance of {@link Pdbentry } - * - */ - public Pdbentry createPdbentry() { - return new Pdbentry(); - } - - /** - * Create an instance of {@link Feature } - * - */ - public Feature createFeature() { - return new Feature(); - } - - /** - * Create an instance of {@link JalviewModel } - * - */ - public JalviewModel createJalviewModel() { - return new JalviewModel(); - } - - /** - * Create an instance of {@link JalviewModel.FeatureSettings } - * - */ - public JalviewModel.FeatureSettings createJalviewModelFeatureSettings() { - return new JalviewModel.FeatureSettings(); - } - - /** - * Create an instance of {@link JalviewModel.PcaViewer } - * - */ - public JalviewModel.PcaViewer createJalviewModelPcaViewer() { - return new JalviewModel.PcaViewer(); - } - - /** - * Create an instance of {@link JalviewModel.Viewport } - * - */ - public JalviewModel.Viewport createJalviewModelViewport() { - return new JalviewModel.Viewport(); - } - - /** - * Create an instance of {@link JalviewModel.JSeq } - * - */ - public JalviewModel.JSeq createJalviewModelJSeq() { - return new JalviewModel.JSeq(); - } - - /** - * Create an instance of {@link JalviewModel.JSeq.RnaViewer } - * - */ - public JalviewModel.JSeq.RnaViewer createJalviewModelJSeqRnaViewer() { - return new JalviewModel.JSeq.RnaViewer(); - } - - /** - * Create an instance of {@link JalviewModel.JSeq.Pdbids } - * - */ - public JalviewModel.JSeq.Pdbids createJalviewModelJSeqPdbids() { - return new JalviewModel.JSeq.Pdbids(); - } - - /** - * Create an instance of {@link DoubleMatrix } - * - */ - public DoubleMatrix createDoubleMatrix() { - return new DoubleMatrix(); - } - - /** - * Create an instance of {@link AnnotationColourScheme } - * - */ - public AnnotationColourScheme createAnnotationColourScheme() { - return new AnnotationColourScheme(); - } - - /** - * Create an instance of {@link PcaDataType } - * - */ - public PcaDataType createPcaDataType() { - return new PcaDataType(); - } - - /** - * Create an instance of {@link DoubleVector } - * - */ - public DoubleVector createDoubleVector() { - return new DoubleVector(); - } - - /** - * Create an instance of {@link AlcodonFrame.Alcodon } - * - */ - public AlcodonFrame.Alcodon createAlcodonFrameAlcodon() { - return new AlcodonFrame.Alcodon(); - } - - /** - * Create an instance of {@link AlcodonFrame.AlcodMap } - * - */ - public AlcodonFrame.AlcodMap createAlcodonFrameAlcodMap() { - return new AlcodonFrame.AlcodMap(); - } - - /** - * Create an instance of {@link AnnotationElement } - * - */ - public AnnotationElement createAnnotationElement() { - return new AnnotationElement(); - } - - /** - * Create an instance of {@link Mapping } - * - */ - public Mapping createMapping() { - return new Mapping(); - } - - /** - * Create an instance of {@link MapListType.MapListFrom } - * - */ - public MapListType.MapListFrom createMapListTypeMapListFrom() { - return new MapListType.MapListFrom(); - } - - /** - * Create an instance of {@link MapListType.MapListTo } - * - */ - public MapListType.MapListTo createMapListTypeMapListTo() { - return new MapListType.MapListTo(); - } - - /** - * Create an instance of {@link SequenceType } - * - */ - public SequenceType createSequenceType() { - return new SequenceType(); - } - - /** - * Create an instance of {@link Sequence.DBRef } - * - */ - public Sequence.DBRef createSequenceDBRef() { - return new Sequence.DBRef(); - } - - /** - * Create an instance of {@link Annotation.ThresholdLine } - * - */ - public Annotation.ThresholdLine createAnnotationThresholdLine() { - return new Annotation.ThresholdLine(); - } - - /** - * Create an instance of {@link MatrixType } - * - */ - public MatrixType createMatrixType() { - return new MatrixType(); - } - - /** - * Create an instance of {@link jalview.xml.binding.jalview.Property } - * - */ - public jalview.xml.binding.jalview.Property createProperty() { - return new jalview.xml.binding.jalview.Property(); - } - - /** - * Create an instance of {@link SequenceSet.SequenceSetProperties } - * - */ - public SequenceSet.SequenceSetProperties createSequenceSetSequenceSetProperties() { - return new SequenceSet.SequenceSetProperties(); - } - - /** - * Create an instance of {@link VAMSAS } - * - */ - public VAMSAS createVAMSAS() { - return new VAMSAS(); - } - - /** - * Create an instance of {@link FeatureMatcher } - * - */ - public FeatureMatcher createFeatureMatcher() { - return new FeatureMatcher(); - } - - /** - * Create an instance of {@link WebServiceParameterSet } - * - */ - public WebServiceParameterSet createWebServiceParameterSet() { - return new WebServiceParameterSet(); - } - - /** - * Create an instance of {@link FeatureMatcherSet.CompoundMatcher } - * - */ - public FeatureMatcherSet.CompoundMatcher createFeatureMatcherSetCompoundMatcher() { - return new FeatureMatcherSet.CompoundMatcher(); - } - - /** - * Create an instance of {@link JalviewUserColours.Colour } - * - */ - public JalviewUserColours.Colour createJalviewUserColoursColour() { - return new JalviewUserColours.Colour(); - } - - /** - * Create an instance of {@link JalviewUserColours.Filter } - * - */ - public JalviewUserColours.Filter createJalviewUserColoursFilter() { - return new JalviewUserColours.Filter(); - } - - /** - * Create an instance of {@link Pdbentry.Property } - * - */ - public Pdbentry.Property createPdbentryProperty() { - return new Pdbentry.Property(); - } - - /** - * Create an instance of {@link Feature.OtherData } - * - */ - public Feature.OtherData createFeatureOtherData() { - return new Feature.OtherData(); - } - - /** - * Create an instance of {@link JalviewModel.JGroup } - * - */ - public JalviewModel.JGroup createJalviewModelJGroup() { - return new JalviewModel.JGroup(); - } - - /** - * Create an instance of {@link JalviewModel.UserColours } - * - */ - public JalviewModel.UserColours createJalviewModelUserColours() { - return new JalviewModel.UserColours(); - } - - /** - * Create an instance of {@link JalviewModel.Tree } - * - */ - public JalviewModel.Tree createJalviewModelTree() { - return new JalviewModel.Tree(); - } - - /** - * Create an instance of {@link JalviewModel.FeatureSettings.Setting } - * - */ - public JalviewModel.FeatureSettings.Setting createJalviewModelFeatureSettingsSetting() { - return new JalviewModel.FeatureSettings.Setting(); - } - - /** - * Create an instance of {@link JalviewModel.FeatureSettings.Group } - * - */ - public JalviewModel.FeatureSettings.Group createJalviewModelFeatureSettingsGroup() { - return new JalviewModel.FeatureSettings.Group(); - } - - /** - * Create an instance of {@link JalviewModel.PcaViewer.SequencePoint } - * - */ - public JalviewModel.PcaViewer.SequencePoint createJalviewModelPcaViewerSequencePoint() { - return new JalviewModel.PcaViewer.SequencePoint(); - } - - /** - * Create an instance of {@link JalviewModel.PcaViewer.Axis } - * - */ - public JalviewModel.PcaViewer.Axis createJalviewModelPcaViewerAxis() { - return new JalviewModel.PcaViewer.Axis(); - } - - /** - * Create an instance of {@link JalviewModel.PcaViewer.SeqPointMin } - * - */ - public JalviewModel.PcaViewer.SeqPointMin createJalviewModelPcaViewerSeqPointMin() { - return new JalviewModel.PcaViewer.SeqPointMin(); - } - - /** - * Create an instance of {@link JalviewModel.PcaViewer.SeqPointMax } - * - */ - public JalviewModel.PcaViewer.SeqPointMax createJalviewModelPcaViewerSeqPointMax() { - return new JalviewModel.PcaViewer.SeqPointMax(); - } - - /** - * Create an instance of {@link JalviewModel.Viewport.HiddenColumns } - * - */ - public JalviewModel.Viewport.HiddenColumns createJalviewModelViewportHiddenColumns() { - return new JalviewModel.Viewport.HiddenColumns(); - } - - /** - * Create an instance of {@link JalviewModel.Viewport.CalcIdParam } - * - */ - public JalviewModel.Viewport.CalcIdParam createJalviewModelViewportCalcIdParam() { - return new JalviewModel.Viewport.CalcIdParam(); - } - - /** - * Create an instance of {@link JalviewModel.Viewport.Overview } - * - */ - public JalviewModel.Viewport.Overview createJalviewModelViewportOverview() { - return new JalviewModel.Viewport.Overview(); - } - - /** - * Create an instance of {@link JalviewModel.JSeq.RnaViewer.SecondaryStructure } - * - */ - public JalviewModel.JSeq.RnaViewer.SecondaryStructure createJalviewModelJSeqRnaViewerSecondaryStructure() { - return new JalviewModel.JSeq.RnaViewer.SecondaryStructure(); - } - - /** - * Create an instance of {@link JalviewModel.JSeq.Pdbids.StructureState } - * - */ - public JalviewModel.JSeq.Pdbids.StructureState createJalviewModelJSeqPdbidsStructureState() { - return new JalviewModel.JSeq.Pdbids.StructureState(); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link WebServiceParameterSet }{@code >}} - * - */ - @XmlElementDecl(namespace = "www.jalview.org/xml/wsparamset", name = "WebServiceParameterSet") - public JAXBElement createWebServiceParameterSet(WebServiceParameterSet value) { - return new JAXBElement(_WebServiceParameterSet_QNAME, WebServiceParameterSet.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link JalviewModel }{@code >}} - * - */ - @XmlElementDecl(namespace = "www.jalview.org", name = "JalviewModel") - public JAXBElement createJalviewModel(JalviewModel value) { - return new JAXBElement(_JalviewModel_QNAME, JalviewModel.class, null, value); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link JalviewUserColours }{@code >}} - * - */ - @XmlElementDecl(namespace = "www.jalview.org/colours", name = "JalviewUserColours") - public JAXBElement createJalviewUserColours(JalviewUserColours value) { - return new JAXBElement(_JalviewUserColours_QNAME, JalviewUserColours.class, null, value); - } +public class ObjectFactory +{ + + private final static QName _WebServiceParameterSet_QNAME = new QName( + "www.jalview.org/xml/wsparamset", "WebServiceParameterSet"); + + private final static QName _JalviewModel_QNAME = new QName( + "www.jalview.org", "JalviewModel"); + + private final static QName _JalviewUserColours_QNAME = new QName( + "www.jalview.org/colours", "JalviewUserColours"); + + /** + * Create a new ObjectFactory that can be used to create new instances of + * schema derived classes for package: jalview.xml.binding.jalview + * + */ + public ObjectFactory() + { + } + + /** + * Create an instance of {@link AlcodonFrame } + * + */ + public AlcodonFrame createAlcodonFrame() + { + return new AlcodonFrame(); + } + + /** + * Create an instance of {@link MapListType } + * + */ + public MapListType createMapListType() + { + return new MapListType(); + } + + /** + * Create an instance of {@link Sequence } + * + */ + public Sequence createSequence() + { + return new Sequence(); + } + + /** + * Create an instance of {@link Annotation } + * + */ + public Annotation createAnnotation() + { + return new Annotation(); + } + + /** + * Create an instance of {@link SequenceSet } + * + */ + public SequenceSet createSequenceSet() + { + return new SequenceSet(); + } + + /** + * Create an instance of {@link FeatureMatcherSet } + * + */ + public FeatureMatcherSet createFeatureMatcherSet() + { + return new FeatureMatcherSet(); + } + + /** + * Create an instance of {@link JalviewUserColours } + * + */ + public JalviewUserColours createJalviewUserColours() + { + return new JalviewUserColours(); + } + + /** + * Create an instance of {@link Pdbentry } + * + */ + public Pdbentry createPdbentry() + { + return new Pdbentry(); + } + + /** + * Create an instance of {@link Feature } + * + */ + public Feature createFeature() + { + return new Feature(); + } + + /** + * Create an instance of {@link JalviewModel } + * + */ + public JalviewModel createJalviewModel() + { + return new JalviewModel(); + } + + /** + * Create an instance of {@link JalviewModel.FeatureSettings } + * + */ + public JalviewModel.FeatureSettings createJalviewModelFeatureSettings() + { + return new JalviewModel.FeatureSettings(); + } + + /** + * Create an instance of {@link JalviewModel.PcaViewer } + * + */ + public JalviewModel.PcaViewer createJalviewModelPcaViewer() + { + return new JalviewModel.PcaViewer(); + } + + /** + * Create an instance of {@link JalviewModel.Viewport } + * + */ + public JalviewModel.Viewport createJalviewModelViewport() + { + return new JalviewModel.Viewport(); + } + + /** + * Create an instance of {@link JalviewModel.JSeq } + * + */ + public JalviewModel.JSeq createJalviewModelJSeq() + { + return new JalviewModel.JSeq(); + } + + /** + * Create an instance of {@link JalviewModel.JSeq.RnaViewer } + * + */ + public JalviewModel.JSeq.RnaViewer createJalviewModelJSeqRnaViewer() + { + return new JalviewModel.JSeq.RnaViewer(); + } + + /** + * Create an instance of {@link JalviewModel.JSeq.Pdbids } + * + */ + public JalviewModel.JSeq.Pdbids createJalviewModelJSeqPdbids() + { + return new JalviewModel.JSeq.Pdbids(); + } + + /** + * Create an instance of {@link DoubleMatrix } + * + */ + public DoubleMatrix createDoubleMatrix() + { + return new DoubleMatrix(); + } + + /** + * Create an instance of {@link AnnotationColourScheme } + * + */ + public AnnotationColourScheme createAnnotationColourScheme() + { + return new AnnotationColourScheme(); + } + + /** + * Create an instance of {@link PcaDataType } + * + */ + public PcaDataType createPcaDataType() + { + return new PcaDataType(); + } + + /** + * Create an instance of {@link DoubleVector } + * + */ + public DoubleVector createDoubleVector() + { + return new DoubleVector(); + } + + /** + * Create an instance of {@link AlcodonFrame.Alcodon } + * + */ + public AlcodonFrame.Alcodon createAlcodonFrameAlcodon() + { + return new AlcodonFrame.Alcodon(); + } + + /** + * Create an instance of {@link AlcodonFrame.AlcodMap } + * + */ + public AlcodonFrame.AlcodMap createAlcodonFrameAlcodMap() + { + return new AlcodonFrame.AlcodMap(); + } + + /** + * Create an instance of {@link AnnotationElement } + * + */ + public AnnotationElement createAnnotationElement() + { + return new AnnotationElement(); + } + + /** + * Create an instance of {@link Mapping } + * + */ + public Mapping createMapping() + { + return new Mapping(); + } + + /** + * Create an instance of {@link MapListType.MapListFrom } + * + */ + public MapListType.MapListFrom createMapListTypeMapListFrom() + { + return new MapListType.MapListFrom(); + } + + /** + * Create an instance of {@link MapListType.MapListTo } + * + */ + public MapListType.MapListTo createMapListTypeMapListTo() + { + return new MapListType.MapListTo(); + } + + /** + * Create an instance of {@link SequenceType } + * + */ + public SequenceType createSequenceType() + { + return new SequenceType(); + } + + /** + * Create an instance of {@link Sequence.DBRef } + * + */ + public Sequence.DBRef createSequenceDBRef() + { + return new Sequence.DBRef(); + } + + /** + * Create an instance of {@link Annotation.ThresholdLine } + * + */ + public Annotation.ThresholdLine createAnnotationThresholdLine() + { + return new Annotation.ThresholdLine(); + } + + /** + * Create an instance of {@link MatrixType } + * + */ + public MatrixType createMatrixType() + { + return new MatrixType(); + } + + /** + * Create an instance of {@link jalview.xml.binding.jalview.Property } + * + */ + public jalview.xml.binding.jalview.Property createProperty() + { + return new jalview.xml.binding.jalview.Property(); + } + + /** + * Create an instance of {@link SequenceSet.SequenceSetProperties } + * + */ + public SequenceSet.SequenceSetProperties createSequenceSetSequenceSetProperties() + { + return new SequenceSet.SequenceSetProperties(); + } + + /** + * Create an instance of {@link VAMSAS } + * + */ + public VAMSAS createVAMSAS() + { + return new VAMSAS(); + } + + /** + * Create an instance of {@link FeatureMatcher } + * + */ + public FeatureMatcher createFeatureMatcher() + { + return new FeatureMatcher(); + } + + /** + * Create an instance of {@link WebServiceParameterSet } + * + */ + public WebServiceParameterSet createWebServiceParameterSet() + { + return new WebServiceParameterSet(); + } + + /** + * Create an instance of {@link FeatureMatcherSet.CompoundMatcher } + * + */ + public FeatureMatcherSet.CompoundMatcher createFeatureMatcherSetCompoundMatcher() + { + return new FeatureMatcherSet.CompoundMatcher(); + } + + /** + * Create an instance of {@link JalviewUserColours.Colour } + * + */ + public JalviewUserColours.Colour createJalviewUserColoursColour() + { + return new JalviewUserColours.Colour(); + } + + /** + * Create an instance of {@link JalviewUserColours.Filter } + * + */ + public JalviewUserColours.Filter createJalviewUserColoursFilter() + { + return new JalviewUserColours.Filter(); + } + + /** + * Create an instance of {@link Pdbentry.Property } + * + */ + public Pdbentry.Property createPdbentryProperty() + { + return new Pdbentry.Property(); + } + + /** + * Create an instance of {@link Feature.OtherData } + * + */ + public Feature.OtherData createFeatureOtherData() + { + return new Feature.OtherData(); + } + + /** + * Create an instance of {@link JalviewModel.JGroup } + * + */ + public JalviewModel.JGroup createJalviewModelJGroup() + { + return new JalviewModel.JGroup(); + } + + /** + * Create an instance of {@link JalviewModel.UserColours } + * + */ + public JalviewModel.UserColours createJalviewModelUserColours() + { + return new JalviewModel.UserColours(); + } + + /** + * Create an instance of {@link JalviewModel.Tree } + * + */ + public JalviewModel.Tree createJalviewModelTree() + { + return new JalviewModel.Tree(); + } + + /** + * Create an instance of {@link JalviewModel.FeatureSettings.Setting } + * + */ + public JalviewModel.FeatureSettings.Setting createJalviewModelFeatureSettingsSetting() + { + return new JalviewModel.FeatureSettings.Setting(); + } + + /** + * Create an instance of {@link JalviewModel.FeatureSettings.Group } + * + */ + public JalviewModel.FeatureSettings.Group createJalviewModelFeatureSettingsGroup() + { + return new JalviewModel.FeatureSettings.Group(); + } + + /** + * Create an instance of {@link JalviewModel.PcaViewer.SequencePoint } + * + */ + public JalviewModel.PcaViewer.SequencePoint createJalviewModelPcaViewerSequencePoint() + { + return new JalviewModel.PcaViewer.SequencePoint(); + } + + /** + * Create an instance of {@link JalviewModel.PcaViewer.Axis } + * + */ + public JalviewModel.PcaViewer.Axis createJalviewModelPcaViewerAxis() + { + return new JalviewModel.PcaViewer.Axis(); + } + + /** + * Create an instance of {@link JalviewModel.PcaViewer.SeqPointMin } + * + */ + public JalviewModel.PcaViewer.SeqPointMin createJalviewModelPcaViewerSeqPointMin() + { + return new JalviewModel.PcaViewer.SeqPointMin(); + } + + /** + * Create an instance of {@link JalviewModel.PcaViewer.SeqPointMax } + * + */ + public JalviewModel.PcaViewer.SeqPointMax createJalviewModelPcaViewerSeqPointMax() + { + return new JalviewModel.PcaViewer.SeqPointMax(); + } + + /** + * Create an instance of {@link JalviewModel.Viewport.HiddenColumns } + * + */ + public JalviewModel.Viewport.HiddenColumns createJalviewModelViewportHiddenColumns() + { + return new JalviewModel.Viewport.HiddenColumns(); + } + + /** + * Create an instance of {@link JalviewModel.Viewport.CalcIdParam } + * + */ + public JalviewModel.Viewport.CalcIdParam createJalviewModelViewportCalcIdParam() + { + return new JalviewModel.Viewport.CalcIdParam(); + } + + /** + * Create an instance of {@link JalviewModel.Viewport.Overview } + * + */ + public JalviewModel.Viewport.Overview createJalviewModelViewportOverview() + { + return new JalviewModel.Viewport.Overview(); + } + + /** + * Create an instance of + * {@link JalviewModel.JSeq.RnaViewer.SecondaryStructure } + * + */ + public JalviewModel.JSeq.RnaViewer.SecondaryStructure createJalviewModelJSeqRnaViewerSecondaryStructure() + { + return new JalviewModel.JSeq.RnaViewer.SecondaryStructure(); + } + + /** + * Create an instance of {@link JalviewModel.JSeq.Pdbids.StructureState } + * + */ + public JalviewModel.JSeq.Pdbids.StructureState createJalviewModelJSeqPdbidsStructureState() + { + return new JalviewModel.JSeq.Pdbids.StructureState(); + } + + /** + * Create an instance of {@link JAXBElement + * }{@code <}{@link WebServiceParameterSet }{@code >}} + * + */ + @XmlElementDecl( + namespace = "www.jalview.org/xml/wsparamset", + name = "WebServiceParameterSet") + public JAXBElement createWebServiceParameterSet( + WebServiceParameterSet value) + { + return new JAXBElement( + _WebServiceParameterSet_QNAME, WebServiceParameterSet.class, + null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link JalviewModel + * }{@code >}} + * + */ + @XmlElementDecl(namespace = "www.jalview.org", name = "JalviewModel") + public JAXBElement createJalviewModel(JalviewModel value) + { + return new JAXBElement(_JalviewModel_QNAME, + JalviewModel.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement + * }{@code <}{@link JalviewUserColours }{@code >}} + * + */ + @XmlElementDecl( + namespace = "www.jalview.org/colours", + name = "JalviewUserColours") + public JAXBElement createJalviewUserColours( + JalviewUserColours value) + { + return new JAXBElement(_JalviewUserColours_QNAME, + JalviewUserColours.class, null, value); + } } diff --git a/src/jalview/xml/binding/jalview/PcaDataType.java b/src/jalview/xml/binding/jalview/PcaDataType.java index 06aecab..2ff7a55 100644 --- a/src/jalview/xml/binding/jalview/PcaDataType.java +++ b/src/jalview/xml/binding/jalview/PcaDataType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import javax.xml.bind.annotation.XmlAccessType; @@ -13,15 +12,17 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** * - * The results of a PCA calculation - * + * The results of a PCA calculation + * * - *

Java class for PcaDataType complex type. + *

+ * Java class for PcaDataType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="PcaDataType">
@@ -40,90 +41,90 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "PcaDataType", namespace = "www.jalview.org", propOrder = {
-    "pairwiseMatrix",
-    "tridiagonalMatrix",
-    "eigenMatrix"
-})
-public class PcaDataType {
+@XmlType(
+  name = "PcaDataType",
+  namespace = "www.jalview.org",
+  propOrder =
+  { "pairwiseMatrix", "tridiagonalMatrix", "eigenMatrix" })
+public class PcaDataType
+{
+
+  @XmlElement(required = true)
+  protected DoubleMatrix pairwiseMatrix;
+
+  @XmlElement(required = true)
+  protected DoubleMatrix tridiagonalMatrix;
 
-    @XmlElement(required = true)
-    protected DoubleMatrix pairwiseMatrix;
-    @XmlElement(required = true)
-    protected DoubleMatrix tridiagonalMatrix;
-    @XmlElement(required = true)
-    protected DoubleMatrix eigenMatrix;
+  @XmlElement(required = true)
+  protected DoubleMatrix eigenMatrix;
 
-    /**
-     * Gets the value of the pairwiseMatrix property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link DoubleMatrix }
-     *     
-     */
-    public DoubleMatrix getPairwiseMatrix() {
-        return pairwiseMatrix;
-    }
+  /**
+   * Gets the value of the pairwiseMatrix property.
+   * 
+   * @return possible object is {@link DoubleMatrix }
+   * 
+   */
+  public DoubleMatrix getPairwiseMatrix()
+  {
+    return pairwiseMatrix;
+  }
 
-    /**
-     * Sets the value of the pairwiseMatrix property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link DoubleMatrix }
-     *     
-     */
-    public void setPairwiseMatrix(DoubleMatrix value) {
-        this.pairwiseMatrix = value;
-    }
+  /**
+   * Sets the value of the pairwiseMatrix property.
+   * 
+   * @param value
+   *          allowed object is {@link DoubleMatrix }
+   * 
+   */
+  public void setPairwiseMatrix(DoubleMatrix value)
+  {
+    this.pairwiseMatrix = value;
+  }
 
-    /**
-     * Gets the value of the tridiagonalMatrix property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link DoubleMatrix }
-     *     
-     */
-    public DoubleMatrix getTridiagonalMatrix() {
-        return tridiagonalMatrix;
-    }
+  /**
+   * Gets the value of the tridiagonalMatrix property.
+   * 
+   * @return possible object is {@link DoubleMatrix }
+   * 
+   */
+  public DoubleMatrix getTridiagonalMatrix()
+  {
+    return tridiagonalMatrix;
+  }
 
-    /**
-     * Sets the value of the tridiagonalMatrix property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link DoubleMatrix }
-     *     
-     */
-    public void setTridiagonalMatrix(DoubleMatrix value) {
-        this.tridiagonalMatrix = value;
-    }
+  /**
+   * Sets the value of the tridiagonalMatrix property.
+   * 
+   * @param value
+   *          allowed object is {@link DoubleMatrix }
+   * 
+   */
+  public void setTridiagonalMatrix(DoubleMatrix value)
+  {
+    this.tridiagonalMatrix = value;
+  }
 
-    /**
-     * Gets the value of the eigenMatrix property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link DoubleMatrix }
-     *     
-     */
-    public DoubleMatrix getEigenMatrix() {
-        return eigenMatrix;
-    }
+  /**
+   * Gets the value of the eigenMatrix property.
+   * 
+   * @return possible object is {@link DoubleMatrix }
+   * 
+   */
+  public DoubleMatrix getEigenMatrix()
+  {
+    return eigenMatrix;
+  }
 
-    /**
-     * Sets the value of the eigenMatrix property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link DoubleMatrix }
-     *     
-     */
-    public void setEigenMatrix(DoubleMatrix value) {
-        this.eigenMatrix = value;
-    }
+  /**
+   * Sets the value of the eigenMatrix property.
+   * 
+   * @param value
+   *          allowed object is {@link DoubleMatrix }
+   * 
+   */
+  public void setEigenMatrix(DoubleMatrix value)
+  {
+    this.eigenMatrix = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/Pdbentry.java b/src/jalview/xml/binding/jalview/Pdbentry.java
index 401022a..f0fd2f3 100644
--- a/src/jalview/xml/binding/jalview/Pdbentry.java
+++ b/src/jalview/xml/binding/jalview/Pdbentry.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
-
 package jalview.xml.binding.jalview;
 
 import java.util.ArrayList;
@@ -16,11 +15,13 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * 

Java class for pdbentry complex type. + *

+ * Java class for pdbentry complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="pdbentry">
@@ -49,199 +50,205 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "pdbentry", namespace = "www.jalview.org", propOrder = {
-    "property"
-})
-@XmlSeeAlso({
-    jalview.xml.binding.jalview.JalviewModel.JSeq.Pdbids.class
-})
-public class Pdbentry {
-
-    protected List property;
-    @XmlAttribute(name = "id", required = true)
-    protected String id;
-    @XmlAttribute(name = "type")
-    protected String type;
-    @XmlAttribute(name = "file")
-    protected String file;
-
-    /**
-     * Gets the value of the property property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the property property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getProperty().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Pdbentry.Property } - * - * - */ - public List getProperty() { - if (property == null) { - property = new ArrayList(); - } - return this.property; +@XmlType( + name = "pdbentry", + namespace = "www.jalview.org", + propOrder = + { "property" }) +@XmlSeeAlso({ jalview.xml.binding.jalview.JalviewModel.JSeq.Pdbids.class }) +public class Pdbentry +{ + + protected List property; + + @XmlAttribute(name = "id", required = true) + protected String id; + + @XmlAttribute(name = "type") + protected String type; + + @XmlAttribute(name = "file") + protected String file; + + /** + * Gets the value of the property property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the property property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getProperty().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Pdbentry.Property } + * + * + */ + public List getProperty() + { + if (property == null) + { + property = new ArrayList(); } + return this.property; + } + + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } + + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } + + /** + * Gets the value of the file property. + * + * @return possible object is {@link String } + * + */ + public String getFile() + { + return file; + } + + /** + * Sets the value of the file property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setFile(String value) + { + this.file = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="value" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Property + { + + @XmlAttribute(name = "name", required = true) + protected String name; + + @XmlAttribute(name = "value", required = true) + protected String value; /** - * Gets the value of the id property. + * Gets the value of the name property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getId() { - return id; + public String getName() + { + return name; } /** - * Sets the value of the id property. + * Sets the value of the name property. * * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; - } - - /** - * Gets the value of the type property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getType() { - return type; + public void setName(String value) + { + this.name = value; } /** - * Sets the value of the type property. + * Gets the value of the value property. * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Gets the value of the file property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getFile() { - return file; + public String getValue() + { + return value; } /** - * Sets the value of the file property. + * Sets the value of the value property. * * @param value - * allowed object is - * {@link String } - * - */ - public void setFile(String value) { - this.file = value; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="value" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- * + * allowed object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Property { - - @XmlAttribute(name = "name", required = true) - protected String name; - @XmlAttribute(name = "value", required = true) - protected String value; - - /** - * Gets the value of the name property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Sets the value of the name property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - + public void setValue(String value) + { + this.value = value; } + } + } diff --git a/src/jalview/xml/binding/jalview/Property.java b/src/jalview/xml/binding/jalview/Property.java index 3c0879d..b70e665 100644 --- a/src/jalview/xml/binding/jalview/Property.java +++ b/src/jalview/xml/binding/jalview/Property.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import javax.xml.bind.annotation.XmlAccessType; @@ -13,11 +12,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for property complex type. + *

+ * Java class for property complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="property">
@@ -34,59 +35,59 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "property")
-public class Property {
+public class Property
+{
+
+  @XmlAttribute(name = "name")
+  protected String name;
 
-    @XmlAttribute(name = "name")
-    protected String name;
-    @XmlAttribute(name = "value")
-    protected String value;
+  @XmlAttribute(name = "value")
+  protected String value;
 
-    /**
-     * Gets the value of the name property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getName() {
-        return name;
-    }
+  /**
+   * Gets the value of the name property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getName()
+  {
+    return name;
+  }
 
-    /**
-     * Sets the value of the name property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setName(String value) {
-        this.name = value;
-    }
+  /**
+   * Sets the value of the name property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setName(String value)
+  {
+    this.name = value;
+  }
 
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getValue() {
-        return value;
-    }
+  /**
+   * Gets the value of the value property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getValue()
+  {
+    return value;
+  }
 
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
+  /**
+   * Sets the value of the value property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/Sequence.java b/src/jalview/xml/binding/jalview/Sequence.java
index d02fd03..a5923e1 100644
--- a/src/jalview/xml/binding/jalview/Sequence.java
+++ b/src/jalview/xml/binding/jalview/Sequence.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
-
 package jalview.xml.binding.jalview;
 
 import java.util.ArrayList;
@@ -17,11 +16,13 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * 

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType>
@@ -55,294 +56,300 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
-    "dbRef"
-})
+@XmlType(name = "", propOrder = { "dbRef" })
 @XmlRootElement(name = "Sequence")
-public class Sequence
-    extends SequenceType
+public class Sequence extends SequenceType
 {
 
-    @XmlElement(name = "DBRef")
-    protected List dbRef;
-    @XmlAttribute(name = "dsseqid")
-    protected String dsseqid;
-    @XmlAttribute(name = "biotype")
-    protected String biotype;
+  @XmlElement(name = "DBRef")
+  protected List dbRef;
+
+  @XmlAttribute(name = "dsseqid")
+  protected String dsseqid;
+
+  @XmlAttribute(name = "biotype")
+  protected String biotype;
+
+  /**
+   * Gets the value of the dbRef property.
+   * 
+   * 

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the dbRef property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getDBRef().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Sequence.DBRef } + * + * + */ + public List getDBRef() + { + if (dbRef == null) + { + dbRef = new ArrayList(); + } + return this.dbRef; + } + + /** + * Gets the value of the dsseqid property. + * + * @return possible object is {@link String } + * + */ + public String getDsseqid() + { + return dsseqid; + } + + /** + * Sets the value of the dsseqid property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDsseqid(String value) + { + this.dsseqid = value; + } + + /** + * Gets the value of the biotype property. + * + * @return possible object is {@link String } + * + */ + public String getBiotype() + { + return biotype; + } + + /** + * Sets the value of the biotype property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setBiotype(String value) + { + this.biotype = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element ref="{www.vamsas.ac.uk/jalview/version2}Mapping" minOccurs="0"/>
+   *       </sequence>
+   *       <attribute name="source" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="version" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="accessionId" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="locus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *       <attribute name="canonical" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "mapping" }) + public static class DBRef + { + + @XmlElement(name = "Mapping") + protected Mapping mapping; + + @XmlAttribute(name = "source") + protected String source; + + @XmlAttribute(name = "version") + protected String version; + + @XmlAttribute(name = "accessionId") + protected String accessionId; + + @XmlAttribute(name = "locus") + protected Boolean locus; + + @XmlAttribute(name = "canonical") + protected Boolean canonical; /** - * Gets the value of the dbRef property. + * Gets the value of the mapping property. * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the dbRef property. + * @return possible object is {@link Mapping } * - *

- * For example, to add a new item, do as follows: - *

-     *    getDBRef().add(newItem);
-     * 
+ */ + public Mapping getMapping() + { + return mapping; + } + + /** + * Sets the value of the mapping property. + * + * @param value + * allowed object is {@link Mapping } + * + */ + public void setMapping(Mapping value) + { + this.mapping = value; + } + + /** + * Gets the value of the source property. * + * @return possible object is {@link String } * - *

- * Objects of the following type(s) are allowed in the list - * {@link Sequence.DBRef } + */ + public String getSource() + { + return source; + } + + /** + * Sets the value of the source property. * + * @param value + * allowed object is {@link String } * */ - public List getDBRef() { - if (dbRef == null) { - dbRef = new ArrayList(); - } - return this.dbRef; + public void setSource(String value) + { + this.source = value; } /** - * Gets the value of the dsseqid property. + * Gets the value of the version property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getDsseqid() { - return dsseqid; + public String getVersion() + { + return version; } /** - * Sets the value of the dsseqid property. + * Sets the value of the version property. * * @param value - * allowed object is - * {@link String } - * + * allowed object is {@link String } + * */ - public void setDsseqid(String value) { - this.dsseqid = value; + public void setVersion(String value) + { + this.version = value; } /** - * Gets the value of the biotype property. + * Gets the value of the accessionId property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getBiotype() { - return biotype; + public String getAccessionId() + { + return accessionId; } /** - * Sets the value of the biotype property. + * Sets the value of the accessionId property. * * @param value - * allowed object is - * {@link String } - * + * allowed object is {@link String } + * */ - public void setBiotype(String value) { - this.biotype = value; + public void setAccessionId(String value) + { + this.accessionId = value; } + /** + * Gets the value of the locus property. + * + * @return possible object is {@link Boolean } + * + */ + public boolean isLocus() + { + if (locus == null) + { + return false; + } + else + { + return locus; + } + } /** - *

Java class for anonymous complex type. + * Sets the value of the locus property. * - *

The following schema fragment specifies the expected content contained within this class. + * @param value + * allowed object is {@link Boolean } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element ref="{www.vamsas.ac.uk/jalview/version2}Mapping" minOccurs="0"/>
-     *       </sequence>
-     *       <attribute name="source" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="version" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="accessionId" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="locus" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *       <attribute name="canonical" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public void setLocus(Boolean value) + { + this.locus = value; + } + + /** + * Gets the value of the canonical property. * + * @return possible object is {@link Boolean } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "mapping" - }) - public static class DBRef { - - @XmlElement(name = "Mapping") - protected Mapping mapping; - @XmlAttribute(name = "source") - protected String source; - @XmlAttribute(name = "version") - protected String version; - @XmlAttribute(name = "accessionId") - protected String accessionId; - @XmlAttribute(name = "locus") - protected Boolean locus; - @XmlAttribute(name = "canonical") - protected Boolean canonical; - - /** - * Gets the value of the mapping property. - * - * @return - * possible object is - * {@link Mapping } - * - */ - public Mapping getMapping() { - return mapping; - } - - /** - * Sets the value of the mapping property. - * - * @param value - * allowed object is - * {@link Mapping } - * - */ - public void setMapping(Mapping value) { - this.mapping = value; - } - - /** - * Gets the value of the source property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSource() { - return source; - } - - /** - * Sets the value of the source property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSource(String value) { - this.source = value; - } - - /** - * Gets the value of the version property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVersion() { - return version; - } - - /** - * Sets the value of the version property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVersion(String value) { - this.version = value; - } - - /** - * Gets the value of the accessionId property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAccessionId() { - return accessionId; - } - - /** - * Sets the value of the accessionId property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAccessionId(String value) { - this.accessionId = value; - } - - /** - * Gets the value of the locus property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isLocus() { - if (locus == null) { - return false; - } else { - return locus; - } - } - - /** - * Sets the value of the locus property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setLocus(Boolean value) { - this.locus = value; - } - - /** - * Gets the value of the canonical property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public boolean isCanonical() { - if (canonical == null) { - return false; - } else { - return canonical; - } - } - - /** - * Sets the value of the canonical property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setCanonical(Boolean value) { - this.canonical = value; - } + public boolean isCanonical() + { + if (canonical == null) + { + return false; + } + else + { + return canonical; + } + } + /** + * Sets the value of the canonical property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setCanonical(Boolean value) + { + this.canonical = value; } + } + } diff --git a/src/jalview/xml/binding/jalview/SequenceSet.java b/src/jalview/xml/binding/jalview/SequenceSet.java index a915d94..f08b225 100644 --- a/src/jalview/xml/binding/jalview/SequenceSet.java +++ b/src/jalview/xml/binding/jalview/SequenceSet.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import java.util.ArrayList; @@ -17,11 +16,13 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType>
@@ -52,267 +53,282 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
-    "sequence",
-    "annotation",
-    "sequenceSetProperties",
-    "alcodonFrame"
-})
+@XmlType(
+  name = "",
+  propOrder =
+  { "sequence", "annotation", "sequenceSetProperties", "alcodonFrame" })
 @XmlRootElement(name = "SequenceSet")
-public class SequenceSet {
+public class SequenceSet
+{
 
-    @XmlElement(name = "Sequence")
-    protected List sequence;
-    @XmlElement(name = "Annotation")
-    protected List annotation;
-    protected List sequenceSetProperties;
-    @XmlElement(name = "AlcodonFrame")
-    protected List alcodonFrame;
-    @XmlAttribute(name = "gapChar", required = true)
-    protected String gapChar;
-    @XmlAttribute(name = "datasetId")
-    protected String datasetId;
+  @XmlElement(name = "Sequence")
+  protected List sequence;
 
-    /**
-     * Gets the value of the sequence property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the sequence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSequence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Sequence } - * - * - */ - public List getSequence() { - if (sequence == null) { - sequence = new ArrayList(); - } - return this.sequence; + @XmlElement(name = "Annotation") + protected List annotation; + + protected List sequenceSetProperties; + + @XmlElement(name = "AlcodonFrame") + protected List alcodonFrame; + + @XmlAttribute(name = "gapChar", required = true) + protected String gapChar; + + @XmlAttribute(name = "datasetId") + protected String datasetId; + + /** + * Gets the value of the sequence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the sequence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getSequence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Sequence } + * + * + */ + public List getSequence() + { + if (sequence == null) + { + sequence = new ArrayList(); } + return this.sequence; + } - /** - * Gets the value of the annotation property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the annotation property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAnnotation().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Annotation } - * - * - */ - public List getAnnotation() { - if (annotation == null) { - annotation = new ArrayList(); - } - return this.annotation; + /** + * Gets the value of the annotation property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the annotation property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getAnnotation().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Annotation + * } + * + * + */ + public List getAnnotation() + { + if (annotation == null) + { + annotation = new ArrayList(); } + return this.annotation; + } - /** - * Gets the value of the sequenceSetProperties property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the sequenceSetProperties property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSequenceSetProperties().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link SequenceSet.SequenceSetProperties } - * - * - */ - public List getSequenceSetProperties() { - if (sequenceSetProperties == null) { - sequenceSetProperties = new ArrayList(); - } - return this.sequenceSetProperties; + /** + * Gets the value of the sequenceSetProperties property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the sequenceSetProperties property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getSequenceSetProperties().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link SequenceSet.SequenceSetProperties } + * + * + */ + public List getSequenceSetProperties() + { + if (sequenceSetProperties == null) + { + sequenceSetProperties = new ArrayList(); } + return this.sequenceSetProperties; + } - /** - * Gets the value of the alcodonFrame property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the alcodonFrame property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAlcodonFrame().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link AlcodonFrame } - * - * - */ - public List getAlcodonFrame() { - if (alcodonFrame == null) { - alcodonFrame = new ArrayList(); - } - return this.alcodonFrame; + /** + * Gets the value of the alcodonFrame property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the alcodonFrame property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getAlcodonFrame().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link AlcodonFrame } + * + * + */ + public List getAlcodonFrame() + { + if (alcodonFrame == null) + { + alcodonFrame = new ArrayList(); } + return this.alcodonFrame; + } + + /** + * Gets the value of the gapChar property. + * + * @return possible object is {@link String } + * + */ + public String getGapChar() + { + return gapChar; + } + + /** + * Sets the value of the gapChar property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setGapChar(String value) + { + this.gapChar = value; + } + + /** + * Gets the value of the datasetId property. + * + * @return possible object is {@link String } + * + */ + public String getDatasetId() + { + return datasetId; + } + + /** + * Sets the value of the datasetId property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDatasetId(String value) + { + this.datasetId = value; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <attribute name="key" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *       <attribute name="value" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class SequenceSetProperties + { + + @XmlAttribute(name = "key") + protected String key; + + @XmlAttribute(name = "value") + protected String value; /** - * Gets the value of the gapChar property. + * Gets the value of the key property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getGapChar() { - return gapChar; + public String getKey() + { + return key; } /** - * Sets the value of the gapChar property. + * Sets the value of the key property. * * @param value - * allowed object is - * {@link String } - * - */ - public void setGapChar(String value) { - this.gapChar = value; - } - - /** - * Gets the value of the datasetId property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getDatasetId() { - return datasetId; + public void setKey(String value) + { + this.key = value; } /** - * Sets the value of the datasetId property. + * Gets the value of the value property. + * + * @return possible object is {@link String } * - * @param value - * allowed object is - * {@link String } - * */ - public void setDatasetId(String value) { - this.datasetId = value; + public String getValue() + { + return value; } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="key" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *       <attribute name="value" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ * Sets the value of the value property. * + * @param value + * allowed object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class SequenceSetProperties { - - @XmlAttribute(name = "key") - protected String key; - @XmlAttribute(name = "value") - protected String value; - - /** - * Gets the value of the key property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getKey() { - return key; - } - - /** - * Sets the value of the key property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setKey(String value) { - this.key = value; - } - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - + public void setValue(String value) + { + this.value = value; } + } + } diff --git a/src/jalview/xml/binding/jalview/SequenceType.java b/src/jalview/xml/binding/jalview/SequenceType.java index fa65d58..44e606d 100644 --- a/src/jalview/xml/binding/jalview/SequenceType.java +++ b/src/jalview/xml/binding/jalview/SequenceType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import javax.xml.bind.annotation.XmlAccessType; @@ -14,11 +13,13 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for SequenceType complex type. + *

+ * Java class for SequenceType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="SequenceType">
@@ -38,116 +39,111 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "SequenceType", propOrder = {
-    "sequence",
-    "name"
-})
-@XmlSeeAlso({
-    Sequence.class
-})
-public class SequenceType {
-
-    protected String sequence;
-    protected String name;
-    @XmlAttribute(name = "id")
-    protected String id;
-    @XmlAttribute(name = "description")
-    protected String description;
-
-    /**
-     * Gets the value of the sequence property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getSequence() {
-        return sequence;
-    }
-
-    /**
-     * Sets the value of the sequence property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setSequence(String value) {
-        this.sequence = value;
-    }
-
-    /**
-     * Gets the value of the name property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Sets the value of the name property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setName(String value) {
-        this.name = value;
-    }
-
-    /**
-     * Gets the value of the id property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getId() {
-        return id;
-    }
-
-    /**
-     * Sets the value of the id property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setId(String value) {
-        this.id = value;
-    }
-
-    /**
-     * Gets the value of the description property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Sets the value of the description property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setDescription(String value) {
-        this.description = value;
-    }
+@XmlType(name = "SequenceType", propOrder = { "sequence", "name" })
+@XmlSeeAlso({ Sequence.class })
+public class SequenceType
+{
+
+  protected String sequence;
+
+  protected String name;
+
+  @XmlAttribute(name = "id")
+  protected String id;
+
+  @XmlAttribute(name = "description")
+  protected String description;
+
+  /**
+   * Gets the value of the sequence property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getSequence()
+  {
+    return sequence;
+  }
+
+  /**
+   * Sets the value of the sequence property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setSequence(String value)
+  {
+    this.sequence = value;
+  }
+
+  /**
+   * Gets the value of the name property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * Sets the value of the name property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setName(String value)
+  {
+    this.name = value;
+  }
+
+  /**
+   * Gets the value of the id property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getId()
+  {
+    return id;
+  }
+
+  /**
+   * Sets the value of the id property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setId(String value)
+  {
+    this.id = value;
+  }
+
+  /**
+   * Gets the value of the description property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getDescription()
+  {
+    return description;
+  }
+
+  /**
+   * Sets the value of the description property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setDescription(String value)
+  {
+    this.description = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/ThresholdType.java b/src/jalview/xml/binding/jalview/ThresholdType.java
index 192caf8..ad0ea1e 100644
--- a/src/jalview/xml/binding/jalview/ThresholdType.java
+++ b/src/jalview/xml/binding/jalview/ThresholdType.java
@@ -2,21 +2,23 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
-
 package jalview.xml.binding.jalview;
 
 import javax.xml.bind.annotation.XmlEnum;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * 

Java class for ThresholdType. + *

+ * Java class for ThresholdType. * - *

The following schema fragment specifies the expected content contained within this class. *

+ * The following schema fragment specifies the expected content contained within + * this class. + *

+ * *

  * <simpleType name="ThresholdType">
  *   <restriction base="{http://www.w3.org/2001/XMLSchema}string">
@@ -30,18 +32,19 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlType(name = "ThresholdType", namespace = "www.jalview.org/colours")
 @XmlEnum
-public enum ThresholdType {
+public enum ThresholdType
+{
 
-    NONE,
-    ABOVE,
-    BELOW;
+  NONE, ABOVE, BELOW;
 
-    public String value() {
-        return name();
-    }
+  public String value()
+  {
+    return name();
+  }
 
-    public static ThresholdType fromValue(String v) {
-        return valueOf(v);
-    }
+  public static ThresholdType fromValue(String v)
+  {
+    return valueOf(v);
+  }
 
 }
diff --git a/src/jalview/xml/binding/jalview/VAMSAS.java b/src/jalview/xml/binding/jalview/VAMSAS.java
index dd41877..099af84 100644
--- a/src/jalview/xml/binding/jalview/VAMSAS.java
+++ b/src/jalview/xml/binding/jalview/VAMSAS.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:44 PM GMT 
+// Generated on: 2023.05.13 at 06:58:41 PM BST 
 //
 
-
 package jalview.xml.binding.jalview;
 
 import java.util.ArrayList;
@@ -15,11 +14,13 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * 

Java class for VAMSAS complex type. + *

+ * Java class for VAMSAS complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="VAMSAS">
@@ -37,73 +38,77 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "VAMSAS", propOrder = {
-    "tree",
-    "sequenceSet"
-})
-public class VAMSAS {
+@XmlType(name = "VAMSAS", propOrder = { "tree", "sequenceSet" })
+public class VAMSAS
+{
+
+  @XmlElement(name = "Tree")
+  protected List tree;
 
-    @XmlElement(name = "Tree")
-    protected List tree;
-    @XmlElement(name = "SequenceSet")
-    protected List sequenceSet;
+  @XmlElement(name = "SequenceSet")
+  protected List sequenceSet;
 
-    /**
-     * Gets the value of the tree property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the tree property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getTree().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getTree() { - if (tree == null) { - tree = new ArrayList(); - } - return this.tree; + /** + * Gets the value of the tree property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the tree property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getTree().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getTree() + { + if (tree == null) + { + tree = new ArrayList(); } + return this.tree; + } - /** - * Gets the value of the sequenceSet property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the sequenceSet property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSequenceSet().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link SequenceSet } - * - * - */ - public List getSequenceSet() { - if (sequenceSet == null) { - sequenceSet = new ArrayList(); - } - return this.sequenceSet; + /** + * Gets the value of the sequenceSet property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the sequenceSet property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getSequenceSet().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link SequenceSet + * } + * + * + */ + public List getSequenceSet() + { + if (sequenceSet == null) + { + sequenceSet = new ArrayList(); } + return this.sequenceSet; + } } diff --git a/src/jalview/xml/binding/jalview/WebServiceParameterSet.java b/src/jalview/xml/binding/jalview/WebServiceParameterSet.java index d3c2098..4374c83 100644 --- a/src/jalview/xml/binding/jalview/WebServiceParameterSet.java +++ b/src/jalview/xml/binding/jalview/WebServiceParameterSet.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // - package jalview.xml.binding.jalview; import java.util.ArrayList; @@ -18,11 +17,13 @@ import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for WebServiceParameterSet complex type. + *

+ * Java class for WebServiceParameterSet complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="WebServiceParameterSet">
@@ -43,152 +44,153 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "WebServiceParameterSet", namespace = "www.jalview.org/xml/wsparamset", propOrder = {
-    "version",
-    "description",
-    "serviceURL",
-    "parameters"
-})
+@XmlType(
+  name = "WebServiceParameterSet",
+  namespace = "www.jalview.org/xml/wsparamset",
+  propOrder =
+  { "version", "description", "serviceURL", "parameters" })
 @XmlSeeAlso({
-    jalview.xml.binding.jalview.JalviewModel.Viewport.CalcIdParam.class
-})
-public class WebServiceParameterSet {
-
-    @XmlElement(name = "Version", namespace = "")
-    protected String version;
-    @XmlElement(namespace = "")
-    protected String description;
-    @XmlElement(namespace = "", required = true)
-    @XmlSchemaType(name = "anyURI")
-    protected List serviceURL;
-    @XmlElement(namespace = "", required = true)
-    protected String parameters;
-    @XmlAttribute(name = "name", required = true)
-    protected String name;
-
-    /**
-     * Gets the value of the version property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getVersion() {
-        return version;
-    }
-
-    /**
-     * Sets the value of the version property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setVersion(String value) {
-        this.version = value;
-    }
-
-    /**
-     * Gets the value of the description property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Sets the value of the description property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setDescription(String value) {
-        this.description = value;
-    }
-
-    /**
-     * Gets the value of the serviceURL property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the serviceURL property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getServiceURL().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getServiceURL() { - if (serviceURL == null) { - serviceURL = new ArrayList(); - } - return this.serviceURL; - } - - /** - * Gets the value of the parameters property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getParameters() { - return parameters; - } - - /** - * Sets the value of the parameters property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setParameters(String value) { - this.parameters = value; - } - - /** - * Gets the value of the name property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Sets the value of the name property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; + jalview.xml.binding.jalview.JalviewModel.Viewport.CalcIdParam.class }) +public class WebServiceParameterSet +{ + + @XmlElement(name = "Version", namespace = "") + protected String version; + + @XmlElement(namespace = "") + protected String description; + + @XmlElement(namespace = "", required = true) + @XmlSchemaType(name = "anyURI") + protected List serviceURL; + + @XmlElement(namespace = "", required = true) + protected String parameters; + + @XmlAttribute(name = "name", required = true) + protected String name; + + /** + * Gets the value of the version property. + * + * @return possible object is {@link String } + * + */ + public String getVersion() + { + return version; + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setVersion(String value) + { + this.version = value; + } + + /** + * Gets the value of the description property. + * + * @return possible object is {@link String } + * + */ + public String getDescription() + { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDescription(String value) + { + this.description = value; + } + + /** + * Gets the value of the serviceURL property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the serviceURL property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getServiceURL().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getServiceURL() + { + if (serviceURL == null) + { + serviceURL = new ArrayList(); } + return this.serviceURL; + } + + /** + * Gets the value of the parameters property. + * + * @return possible object is {@link String } + * + */ + public String getParameters() + { + return parameters; + } + + /** + * Sets the value of the parameters property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setParameters(String value) + { + this.parameters = value; + } + + /** + * Gets the value of the name property. + * + * @return possible object is {@link String } + * + */ + public String getName() + { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setName(String value) + { + this.name = value; + } } diff --git a/src/jalview/xml/binding/jalview/package-info.java b/src/jalview/xml/binding/jalview/package-info.java index 2cfefda..65d49d5 100644 --- a/src/jalview/xml/binding/jalview/package-info.java +++ b/src/jalview/xml/binding/jalview/package-info.java @@ -2,8 +2,10 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:44 PM GMT +// Generated on: 2023.05.13 at 06:58:41 PM BST // -@javax.xml.bind.annotation.XmlSchema(namespace = "www.vamsas.ac.uk/jalview/version2", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +@javax.xml.bind.annotation.XmlSchema( + namespace = "www.vamsas.ac.uk/jalview/version2", + elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) package jalview.xml.binding.jalview; diff --git a/src/jalview/xml/binding/uniprot/CitationType.java b/src/jalview/xml/binding/uniprot/CitationType.java index de12eb2..c5980b3 100644 --- a/src/jalview/xml/binding/uniprot/CitationType.java +++ b/src/jalview/xml/binding/uniprot/CitationType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -15,14 +14,16 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - * Describes different types of citations. - * Equivalent to the flat file RX-, RG-, RA-, RT- and RL-lines. + * Describes different types of citations. Equivalent to the flat file RX-, RG-, + * RA-, RT- and RL-lines. * - *

Java class for citationType complex type. + *

+ * Java class for citationType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="citationType">
@@ -72,456 +73,457 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "citationType", propOrder = {
-    "title",
-    "editorList",
-    "authorList",
-    "locator",
-    "dbReference"
-})
-public class CitationType {
-
-    protected String title;
-    protected NameListType editorList;
-    protected NameListType authorList;
-    protected String locator;
-    protected List dbReference;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
-    @XmlAttribute(name = "date")
-    protected String date;
-    @XmlAttribute(name = "name")
-    protected String name;
-    @XmlAttribute(name = "volume")
-    protected String volume;
-    @XmlAttribute(name = "first")
-    protected String first;
-    @XmlAttribute(name = "last")
-    protected String last;
-    @XmlAttribute(name = "publisher")
-    protected String publisher;
-    @XmlAttribute(name = "city")
-    protected String city;
-    @XmlAttribute(name = "db")
-    protected String db;
-    @XmlAttribute(name = "number")
-    protected String number;
-    @XmlAttribute(name = "institute")
-    protected String institute;
-    @XmlAttribute(name = "country")
-    protected String country;
-
-    /**
-     * Gets the value of the title property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getTitle() {
-        return title;
-    }
-
-    /**
-     * Sets the value of the title property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setTitle(String value) {
-        this.title = value;
-    }
-
-    /**
-     * Gets the value of the editorList property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link NameListType }
-     *     
-     */
-    public NameListType getEditorList() {
-        return editorList;
-    }
-
-    /**
-     * Sets the value of the editorList property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link NameListType }
-     *     
-     */
-    public void setEditorList(NameListType value) {
-        this.editorList = value;
-    }
-
-    /**
-     * Gets the value of the authorList property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link NameListType }
-     *     
-     */
-    public NameListType getAuthorList() {
-        return authorList;
-    }
-
-    /**
-     * Sets the value of the authorList property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link NameListType }
-     *     
-     */
-    public void setAuthorList(NameListType value) {
-        this.authorList = value;
-    }
-
-    /**
-     * Gets the value of the locator property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getLocator() {
-        return locator;
-    }
-
-    /**
-     * Sets the value of the locator property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setLocator(String value) {
-        this.locator = value;
-    }
-
-    /**
-     * Gets the value of the dbReference property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the dbReference property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getDbReference().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link DbReferenceType } - * - * - */ - public List getDbReference() { - if (dbReference == null) { - dbReference = new ArrayList(); - } - return this.dbReference; - } - - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Gets the value of the date property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDate() { - return date; - } - - /** - * Sets the value of the date property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDate(String value) { - this.date = value; - } - - /** - * Gets the value of the name property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Sets the value of the name property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Gets the value of the volume property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVolume() { - return volume; - } - - /** - * Sets the value of the volume property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVolume(String value) { - this.volume = value; - } - - /** - * Gets the value of the first property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFirst() { - return first; - } - - /** - * Sets the value of the first property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFirst(String value) { - this.first = value; - } - - /** - * Gets the value of the last property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getLast() { - return last; - } - - /** - * Sets the value of the last property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setLast(String value) { - this.last = value; - } - - /** - * Gets the value of the publisher property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPublisher() { - return publisher; - } - - /** - * Sets the value of the publisher property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPublisher(String value) { - this.publisher = value; - } - - /** - * Gets the value of the city property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCity() { - return city; - } - - /** - * Sets the value of the city property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCity(String value) { - this.city = value; - } - - /** - * Gets the value of the db property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDb() { - return db; - } - - /** - * Sets the value of the db property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDb(String value) { - this.db = value; - } - - /** - * Gets the value of the number property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getNumber() { - return number; - } - - /** - * Sets the value of the number property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setNumber(String value) { - this.number = value; - } - - /** - * Gets the value of the institute property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getInstitute() { - return institute; - } - - /** - * Sets the value of the institute property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setInstitute(String value) { - this.institute = value; - } - - /** - * Gets the value of the country property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCountry() { - return country; - } - - /** - * Sets the value of the country property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCountry(String value) { - this.country = value; - } +@XmlType( + name = "citationType", + propOrder = + { "title", "editorList", "authorList", "locator", "dbReference" }) +public class CitationType +{ + + protected String title; + + protected NameListType editorList; + + protected NameListType authorList; + + protected String locator; + + protected List dbReference; + + @XmlAttribute(name = "type", required = true) + protected String type; + + @XmlAttribute(name = "date") + protected String date; + + @XmlAttribute(name = "name") + protected String name; + + @XmlAttribute(name = "volume") + protected String volume; + + @XmlAttribute(name = "first") + protected String first; + + @XmlAttribute(name = "last") + protected String last; + + @XmlAttribute(name = "publisher") + protected String publisher; + + @XmlAttribute(name = "city") + protected String city; + + @XmlAttribute(name = "db") + protected String db; + + @XmlAttribute(name = "number") + protected String number; + + @XmlAttribute(name = "institute") + protected String institute; + + @XmlAttribute(name = "country") + protected String country; + + /** + * Gets the value of the title property. + * + * @return possible object is {@link String } + * + */ + public String getTitle() + { + return title; + } + + /** + * Sets the value of the title property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setTitle(String value) + { + this.title = value; + } + + /** + * Gets the value of the editorList property. + * + * @return possible object is {@link NameListType } + * + */ + public NameListType getEditorList() + { + return editorList; + } + + /** + * Sets the value of the editorList property. + * + * @param value + * allowed object is {@link NameListType } + * + */ + public void setEditorList(NameListType value) + { + this.editorList = value; + } + + /** + * Gets the value of the authorList property. + * + * @return possible object is {@link NameListType } + * + */ + public NameListType getAuthorList() + { + return authorList; + } + + /** + * Sets the value of the authorList property. + * + * @param value + * allowed object is {@link NameListType } + * + */ + public void setAuthorList(NameListType value) + { + this.authorList = value; + } + + /** + * Gets the value of the locator property. + * + * @return possible object is {@link String } + * + */ + public String getLocator() + { + return locator; + } + + /** + * Sets the value of the locator property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setLocator(String value) + { + this.locator = value; + } + + /** + * Gets the value of the dbReference property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the dbReference property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getDbReference().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link DbReferenceType } + * + * + */ + public List getDbReference() + { + if (dbReference == null) + { + dbReference = new ArrayList(); + } + return this.dbReference; + } + + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } + + /** + * Gets the value of the date property. + * + * @return possible object is {@link String } + * + */ + public String getDate() + { + return date; + } + + /** + * Sets the value of the date property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDate(String value) + { + this.date = value; + } + + /** + * Gets the value of the name property. + * + * @return possible object is {@link String } + * + */ + public String getName() + { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setName(String value) + { + this.name = value; + } + + /** + * Gets the value of the volume property. + * + * @return possible object is {@link String } + * + */ + public String getVolume() + { + return volume; + } + + /** + * Sets the value of the volume property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setVolume(String value) + { + this.volume = value; + } + + /** + * Gets the value of the first property. + * + * @return possible object is {@link String } + * + */ + public String getFirst() + { + return first; + } + + /** + * Sets the value of the first property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setFirst(String value) + { + this.first = value; + } + + /** + * Gets the value of the last property. + * + * @return possible object is {@link String } + * + */ + public String getLast() + { + return last; + } + + /** + * Sets the value of the last property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setLast(String value) + { + this.last = value; + } + + /** + * Gets the value of the publisher property. + * + * @return possible object is {@link String } + * + */ + public String getPublisher() + { + return publisher; + } + + /** + * Sets the value of the publisher property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setPublisher(String value) + { + this.publisher = value; + } + + /** + * Gets the value of the city property. + * + * @return possible object is {@link String } + * + */ + public String getCity() + { + return city; + } + + /** + * Sets the value of the city property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setCity(String value) + { + this.city = value; + } + + /** + * Gets the value of the db property. + * + * @return possible object is {@link String } + * + */ + public String getDb() + { + return db; + } + + /** + * Sets the value of the db property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDb(String value) + { + this.db = value; + } + + /** + * Gets the value of the number property. + * + * @return possible object is {@link String } + * + */ + public String getNumber() + { + return number; + } + + /** + * Sets the value of the number property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setNumber(String value) + { + this.number = value; + } + + /** + * Gets the value of the institute property. + * + * @return possible object is {@link String } + * + */ + public String getInstitute() + { + return institute; + } + + /** + * Sets the value of the institute property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setInstitute(String value) + { + this.institute = value; + } + + /** + * Gets the value of the country property. + * + * @return possible object is {@link String } + * + */ + public String getCountry() + { + return country; + } + + /** + * Sets the value of the country property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setCountry(String value) + { + this.country = value; + } } diff --git a/src/jalview/xml/binding/uniprot/CofactorType.java b/src/jalview/xml/binding/uniprot/CofactorType.java index e9244e9..d7f0cdb 100644 --- a/src/jalview/xml/binding/uniprot/CofactorType.java +++ b/src/jalview/xml/binding/uniprot/CofactorType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -16,13 +15,15 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** * Describes a cofactor. * - *

Java class for cofactorType complex type. + *

+ * Java class for cofactorType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="cofactorType">
@@ -41,94 +42,94 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "cofactorType", propOrder = {
-    "name",
-    "dbReference"
-})
-public class CofactorType {
+@XmlType(name = "cofactorType", propOrder = { "name", "dbReference" })
+public class CofactorType
+{
 
-    @XmlElement(required = true)
-    protected String name;
-    @XmlElement(required = true)
-    protected DbReferenceType dbReference;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
+  @XmlElement(required = true)
+  protected String name;
 
-    /**
-     * Gets the value of the name property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getName() {
-        return name;
-    }
+  @XmlElement(required = true)
+  protected DbReferenceType dbReference;
 
-    /**
-     * Sets the value of the name property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setName(String value) {
-        this.name = value;
-    }
+  @XmlAttribute(name = "evidence")
+  protected List evidence;
 
-    /**
-     * Gets the value of the dbReference property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link DbReferenceType }
-     *     
-     */
-    public DbReferenceType getDbReference() {
-        return dbReference;
-    }
+  /**
+   * Gets the value of the name property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getName()
+  {
+    return name;
+  }
 
-    /**
-     * Sets the value of the dbReference property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link DbReferenceType }
-     *     
-     */
-    public void setDbReference(DbReferenceType value) {
-        this.dbReference = value;
-    }
+  /**
+   * Sets the value of the name property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setName(String value)
+  {
+    this.name = value;
+  }
+
+  /**
+   * Gets the value of the dbReference property.
+   * 
+   * @return possible object is {@link DbReferenceType }
+   * 
+   */
+  public DbReferenceType getDbReference()
+  {
+    return dbReference;
+  }
+
+  /**
+   * Sets the value of the dbReference property.
+   * 
+   * @param value
+   *          allowed object is {@link DbReferenceType }
+   * 
+   */
+  public void setDbReference(DbReferenceType value)
+  {
+    this.dbReference = value;
+  }
 
-    /**
-     * Gets the value of the evidence property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } } diff --git a/src/jalview/xml/binding/uniprot/CommentType.java b/src/jalview/xml/binding/uniprot/CommentType.java index e0692c9..0477736 100644 --- a/src/jalview/xml/binding/uniprot/CommentType.java +++ b/src/jalview/xml/binding/uniprot/CommentType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -17,14 +16,16 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; - /** - * Describes different types of general annotations. - * Equivalent to the flat file CC-line. + * Describes different types of general annotations. Equivalent to the flat file + * CC-line. * - *

Java class for commentType complex type. + *

+ * Java class for commentType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="commentType">
@@ -173,1619 +174,1673 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "commentType", propOrder = {
-    "molecule",
-    "absorption",
-    "kinetics",
-    "phDependence",
-    "redoxPotential",
-    "temperatureDependence",
-    "reaction",
-    "physiologicalReaction",
-    "cofactor",
-    "subcellularLocation",
-    "conflict",
-    "link",
-    "event",
-    "isoform",
-    "interactant",
-    "organismsDiffer",
-    "experiments",
-    "disease",
-    "location",
-    "text"
-})
-public class CommentType {
-
-    protected MoleculeType molecule;
-    protected CommentType.Absorption absorption;
-    protected CommentType.Kinetics kinetics;
-    protected CommentType.PhDependence phDependence;
-    protected CommentType.RedoxPotential redoxPotential;
-    protected CommentType.TemperatureDependence temperatureDependence;
-    protected ReactionType reaction;
-    protected List physiologicalReaction;
-    protected List cofactor;
-    protected List subcellularLocation;
-    protected CommentType.Conflict conflict;
-    protected List link;
-    protected List event;
-    protected List isoform;
-    protected List interactant;
-    @XmlElement(defaultValue = "false")
-    protected Boolean organismsDiffer;
-    protected Integer experiments;
-    protected CommentType.Disease disease;
-    protected List location;
-    protected List text;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
-    @XmlAttribute(name = "locationType")
-    protected String locationType;
-    @XmlAttribute(name = "name")
-    protected String name;
-    @XmlAttribute(name = "mass")
-    protected Float mass;
-    @XmlAttribute(name = "error")
-    protected String error;
-    @XmlAttribute(name = "method")
-    protected String method;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
+@XmlType(
+  name = "commentType",
+  propOrder =
+  { "molecule", "absorption", "kinetics", "phDependence", "redoxPotential",
+      "temperatureDependence", "reaction", "physiologicalReaction",
+      "cofactor", "subcellularLocation", "conflict", "link", "event",
+      "isoform", "interactant", "organismsDiffer", "experiments", "disease",
+      "location", "text" })
+public class CommentType
+{
 
-    /**
-     * Gets the value of the molecule property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link MoleculeType }
-     *     
-     */
-    public MoleculeType getMolecule() {
-        return molecule;
-    }
+  protected MoleculeType molecule;
 
-    /**
-     * Sets the value of the molecule property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link MoleculeType }
-     *     
-     */
-    public void setMolecule(MoleculeType value) {
-        this.molecule = value;
-    }
+  protected CommentType.Absorption absorption;
 
-    /**
-     * Gets the value of the absorption property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link CommentType.Absorption }
-     *     
-     */
-    public CommentType.Absorption getAbsorption() {
-        return absorption;
-    }
+  protected CommentType.Kinetics kinetics;
 
-    /**
-     * Sets the value of the absorption property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link CommentType.Absorption }
-     *     
-     */
-    public void setAbsorption(CommentType.Absorption value) {
-        this.absorption = value;
-    }
+  protected CommentType.PhDependence phDependence;
 
-    /**
-     * Gets the value of the kinetics property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link CommentType.Kinetics }
-     *     
-     */
-    public CommentType.Kinetics getKinetics() {
-        return kinetics;
-    }
+  protected CommentType.RedoxPotential redoxPotential;
 
-    /**
-     * Sets the value of the kinetics property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link CommentType.Kinetics }
-     *     
-     */
-    public void setKinetics(CommentType.Kinetics value) {
-        this.kinetics = value;
-    }
+  protected CommentType.TemperatureDependence temperatureDependence;
 
-    /**
-     * Gets the value of the phDependence property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link CommentType.PhDependence }
-     *     
-     */
-    public CommentType.PhDependence getPhDependence() {
-        return phDependence;
-    }
+  protected ReactionType reaction;
 
-    /**
-     * Sets the value of the phDependence property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link CommentType.PhDependence }
-     *     
-     */
-    public void setPhDependence(CommentType.PhDependence value) {
-        this.phDependence = value;
-    }
+  protected List physiologicalReaction;
 
-    /**
-     * Gets the value of the redoxPotential property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link CommentType.RedoxPotential }
-     *     
-     */
-    public CommentType.RedoxPotential getRedoxPotential() {
-        return redoxPotential;
-    }
+  protected List cofactor;
 
-    /**
-     * Sets the value of the redoxPotential property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link CommentType.RedoxPotential }
-     *     
-     */
-    public void setRedoxPotential(CommentType.RedoxPotential value) {
-        this.redoxPotential = value;
-    }
+  protected List subcellularLocation;
 
-    /**
-     * Gets the value of the temperatureDependence property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link CommentType.TemperatureDependence }
-     *     
-     */
-    public CommentType.TemperatureDependence getTemperatureDependence() {
-        return temperatureDependence;
-    }
+  protected CommentType.Conflict conflict;
 
-    /**
-     * Sets the value of the temperatureDependence property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link CommentType.TemperatureDependence }
-     *     
-     */
-    public void setTemperatureDependence(CommentType.TemperatureDependence value) {
-        this.temperatureDependence = value;
+  protected List link;
+
+  protected List event;
+
+  protected List isoform;
+
+  protected List interactant;
+
+  @XmlElement(defaultValue = "false")
+  protected Boolean organismsDiffer;
+
+  protected Integer experiments;
+
+  protected CommentType.Disease disease;
+
+  protected List location;
+
+  protected List text;
+
+  @XmlAttribute(name = "type", required = true)
+  protected String type;
+
+  @XmlAttribute(name = "locationType")
+  protected String locationType;
+
+  @XmlAttribute(name = "name")
+  protected String name;
+
+  @XmlAttribute(name = "mass")
+  protected Float mass;
+
+  @XmlAttribute(name = "error")
+  protected String error;
+
+  @XmlAttribute(name = "method")
+  protected String method;
+
+  @XmlAttribute(name = "evidence")
+  protected List evidence;
+
+  /**
+   * Gets the value of the molecule property.
+   * 
+   * @return possible object is {@link MoleculeType }
+   * 
+   */
+  public MoleculeType getMolecule()
+  {
+    return molecule;
+  }
+
+  /**
+   * Sets the value of the molecule property.
+   * 
+   * @param value
+   *          allowed object is {@link MoleculeType }
+   * 
+   */
+  public void setMolecule(MoleculeType value)
+  {
+    this.molecule = value;
+  }
+
+  /**
+   * Gets the value of the absorption property.
+   * 
+   * @return possible object is {@link CommentType.Absorption }
+   * 
+   */
+  public CommentType.Absorption getAbsorption()
+  {
+    return absorption;
+  }
+
+  /**
+   * Sets the value of the absorption property.
+   * 
+   * @param value
+   *          allowed object is {@link CommentType.Absorption }
+   * 
+   */
+  public void setAbsorption(CommentType.Absorption value)
+  {
+    this.absorption = value;
+  }
+
+  /**
+   * Gets the value of the kinetics property.
+   * 
+   * @return possible object is {@link CommentType.Kinetics }
+   * 
+   */
+  public CommentType.Kinetics getKinetics()
+  {
+    return kinetics;
+  }
+
+  /**
+   * Sets the value of the kinetics property.
+   * 
+   * @param value
+   *          allowed object is {@link CommentType.Kinetics }
+   * 
+   */
+  public void setKinetics(CommentType.Kinetics value)
+  {
+    this.kinetics = value;
+  }
+
+  /**
+   * Gets the value of the phDependence property.
+   * 
+   * @return possible object is {@link CommentType.PhDependence }
+   * 
+   */
+  public CommentType.PhDependence getPhDependence()
+  {
+    return phDependence;
+  }
+
+  /**
+   * Sets the value of the phDependence property.
+   * 
+   * @param value
+   *          allowed object is {@link CommentType.PhDependence }
+   * 
+   */
+  public void setPhDependence(CommentType.PhDependence value)
+  {
+    this.phDependence = value;
+  }
+
+  /**
+   * Gets the value of the redoxPotential property.
+   * 
+   * @return possible object is {@link CommentType.RedoxPotential }
+   * 
+   */
+  public CommentType.RedoxPotential getRedoxPotential()
+  {
+    return redoxPotential;
+  }
+
+  /**
+   * Sets the value of the redoxPotential property.
+   * 
+   * @param value
+   *          allowed object is {@link CommentType.RedoxPotential }
+   * 
+   */
+  public void setRedoxPotential(CommentType.RedoxPotential value)
+  {
+    this.redoxPotential = value;
+  }
+
+  /**
+   * Gets the value of the temperatureDependence property.
+   * 
+   * @return possible object is {@link CommentType.TemperatureDependence }
+   * 
+   */
+  public CommentType.TemperatureDependence getTemperatureDependence()
+  {
+    return temperatureDependence;
+  }
+
+  /**
+   * Sets the value of the temperatureDependence property.
+   * 
+   * @param value
+   *          allowed object is {@link CommentType.TemperatureDependence }
+   * 
+   */
+  public void setTemperatureDependence(
+          CommentType.TemperatureDependence value)
+  {
+    this.temperatureDependence = value;
+  }
+
+  /**
+   * Gets the value of the reaction property.
+   * 
+   * @return possible object is {@link ReactionType }
+   * 
+   */
+  public ReactionType getReaction()
+  {
+    return reaction;
+  }
+
+  /**
+   * Sets the value of the reaction property.
+   * 
+   * @param value
+   *          allowed object is {@link ReactionType }
+   * 
+   */
+  public void setReaction(ReactionType value)
+  {
+    this.reaction = value;
+  }
+
+  /**
+   * Gets the value of the physiologicalReaction property.
+   * 
+   * 

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the physiologicalReaction property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getPhysiologicalReaction().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link PhysiologicalReactionType } + * + * + */ + public List getPhysiologicalReaction() + { + if (physiologicalReaction == null) + { + physiologicalReaction = new ArrayList(); + } + return this.physiologicalReaction; + } + + /** + * Gets the value of the cofactor property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the cofactor property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getCofactor().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link CofactorType } + * + * + */ + public List getCofactor() + { + if (cofactor == null) + { + cofactor = new ArrayList(); + } + return this.cofactor; + } + + /** + * Gets the value of the subcellularLocation property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the subcellularLocation property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getSubcellularLocation().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link SubcellularLocationType } + * + * + */ + public List getSubcellularLocation() + { + if (subcellularLocation == null) + { + subcellularLocation = new ArrayList(); + } + return this.subcellularLocation; + } + + /** + * Gets the value of the conflict property. + * + * @return possible object is {@link CommentType.Conflict } + * + */ + public CommentType.Conflict getConflict() + { + return conflict; + } + + /** + * Sets the value of the conflict property. + * + * @param value + * allowed object is {@link CommentType.Conflict } + * + */ + public void setConflict(CommentType.Conflict value) + { + this.conflict = value; + } + + /** + * Gets the value of the link property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the link property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getLink().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link CommentType.Link } + * + * + */ + public List getLink() + { + if (link == null) + { + link = new ArrayList(); } + return this.link; + } + + /** + * Gets the value of the event property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the event property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvent().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link EventType } + * + * + */ + public List getEvent() + { + if (event == null) + { + event = new ArrayList(); + } + return this.event; + } + + /** + * Gets the value of the isoform property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the isoform property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getIsoform().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link IsoformType + * } + * + * + */ + public List getIsoform() + { + if (isoform == null) + { + isoform = new ArrayList(); + } + return this.isoform; + } + + /** + * Gets the value of the interactant property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the interactant property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getInteractant().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link InteractantType } + * + * + */ + public List getInteractant() + { + if (interactant == null) + { + interactant = new ArrayList(); + } + return this.interactant; + } + + /** + * Gets the value of the organismsDiffer property. + * + * @return possible object is {@link Boolean } + * + */ + public Boolean isOrganismsDiffer() + { + return organismsDiffer; + } + + /** + * Sets the value of the organismsDiffer property. + * + * @param value + * allowed object is {@link Boolean } + * + */ + public void setOrganismsDiffer(Boolean value) + { + this.organismsDiffer = value; + } + + /** + * Gets the value of the experiments property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getExperiments() + { + return experiments; + } + + /** + * Sets the value of the experiments property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setExperiments(Integer value) + { + this.experiments = value; + } + + /** + * Gets the value of the disease property. + * + * @return possible object is {@link CommentType.Disease } + * + */ + public CommentType.Disease getDisease() + { + return disease; + } + + /** + * Sets the value of the disease property. + * + * @param value + * allowed object is {@link CommentType.Disease } + * + */ + public void setDisease(CommentType.Disease value) + { + this.disease = value; + } + + /** + * Gets the value of the location property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the location property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getLocation().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link LocationType } + * + * + */ + public List getLocation() + { + if (location == null) + { + location = new ArrayList(); + } + return this.location; + } + + /** + * Gets the value of the text property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the text property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getText().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getText() + { + if (text == null) + { + text = new ArrayList(); + } + return this.text; + } + + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } + + /** + * Gets the value of the locationType property. + * + * @return possible object is {@link String } + * + */ + public String getLocationType() + { + return locationType; + } + + /** + * Sets the value of the locationType property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setLocationType(String value) + { + this.locationType = value; + } + + /** + * Gets the value of the name property. + * + * @return possible object is {@link String } + * + */ + public String getName() + { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setName(String value) + { + this.name = value; + } + + /** + * Gets the value of the mass property. + * + * @return possible object is {@link Float } + * + */ + public Float getMass() + { + return mass; + } + + /** + * Sets the value of the mass property. + * + * @param value + * allowed object is {@link Float } + * + */ + public void setMass(Float value) + { + this.mass = value; + } + + /** + * Gets the value of the error property. + * + * @return possible object is {@link String } + * + */ + public String getError() + { + return error; + } + + /** + * Sets the value of the error property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setError(String value) + { + this.error = value; + } + + /** + * Gets the value of the method property. + * + * @return possible object is {@link String } + * + */ + public String getMethod() + { + return method; + } + + /** + * Sets the value of the method property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setMethod(String value) + { + this.method = value; + } + + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); + } + return this.evidence; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="max" type="{http://uniprot.org/uniprot}evidencedStringType" minOccurs="0"/>
+   *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "max", "text" }) + public static class Absorption + { + + protected EvidencedStringType max; + + protected List text; /** - * Gets the value of the reaction property. + * Gets the value of the max property. + * + * @return possible object is {@link EvidencedStringType } * - * @return - * possible object is - * {@link ReactionType } - * */ - public ReactionType getReaction() { - return reaction; + public EvidencedStringType getMax() + { + return max; } /** - * Sets the value of the reaction property. + * Sets the value of the max property. * * @param value - * allowed object is - * {@link ReactionType } - * + * allowed object is {@link EvidencedStringType } + * */ - public void setReaction(ReactionType value) { - this.reaction = value; + public void setMax(EvidencedStringType value) + { + this.max = value; } /** - * Gets the value of the physiologicalReaction property. + * Gets the value of the text property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the physiologicalReaction property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the text property. * *

* For example, to add a new item, do as follows: + * *

-     *    getPhysiologicalReaction().add(newItem);
+     * getText().add(newItem);
      * 
* * *

* Objects of the following type(s) are allowed in the list - * {@link PhysiologicalReactionType } + * {@link EvidencedStringType } * * */ - public List getPhysiologicalReaction() { - if (physiologicalReaction == null) { - physiologicalReaction = new ArrayList(); - } - return this.physiologicalReaction; + public List getText() + { + if (text == null) + { + text = new ArrayList(); + } + return this.text; } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="sequence" minOccurs="0">
+   *           <complexType>
+   *             <complexContent>
+   *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *                 <attribute name="resource" use="required">
+   *                   <simpleType>
+   *                     <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+   *                       <enumeration value="EMBL-CDS"/>
+   *                       <enumeration value="EMBL"/>
+   *                     </restriction>
+   *                   </simpleType>
+   *                 </attribute>
+   *                 <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *                 <attribute name="version" type="{http://www.w3.org/2001/XMLSchema}int" />
+   *               </restriction>
+   *             </complexContent>
+   *           </complexType>
+   *         </element>
+   *       </sequence>
+   *       <attribute name="type" use="required">
+   *         <simpleType>
+   *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+   *             <enumeration value="frameshift"/>
+   *             <enumeration value="erroneous initiation"/>
+   *             <enumeration value="erroneous termination"/>
+   *             <enumeration value="erroneous gene model prediction"/>
+   *             <enumeration value="erroneous translation"/>
+   *             <enumeration value="miscellaneous discrepancy"/>
+   *           </restriction>
+   *         </simpleType>
+   *       </attribute>
+   *       <attribute name="ref" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "sequence" }) + public static class Conflict + { + + protected CommentType.Conflict.Sequence sequence; + + @XmlAttribute(name = "type", required = true) + protected String type; + + @XmlAttribute(name = "ref") + protected String ref; + /** - * Gets the value of the cofactor property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the cofactor property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getCofactor().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link CofactorType } + * Gets the value of the sequence property. * + * @return possible object is {@link CommentType.Conflict.Sequence } * */ - public List getCofactor() { - if (cofactor == null) { - cofactor = new ArrayList(); - } - return this.cofactor; + public CommentType.Conflict.Sequence getSequence() + { + return sequence; } /** - * Gets the value of the subcellularLocation property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the subcellularLocation property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSubcellularLocation().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link SubcellularLocationType } + * Sets the value of the sequence property. * + * @param value + * allowed object is {@link CommentType.Conflict.Sequence } * */ - public List getSubcellularLocation() { - if (subcellularLocation == null) { - subcellularLocation = new ArrayList(); - } - return this.subcellularLocation; + public void setSequence(CommentType.Conflict.Sequence value) + { + this.sequence = value; } /** - * Gets the value of the conflict property. + * Gets the value of the type property. * - * @return - * possible object is - * {@link CommentType.Conflict } - * - */ - public CommentType.Conflict getConflict() { - return conflict; - } - - /** - * Sets the value of the conflict property. + * @return possible object is {@link String } * - * @param value - * allowed object is - * {@link CommentType.Conflict } - * */ - public void setConflict(CommentType.Conflict value) { - this.conflict = value; + public String getType() + { + return type; } /** - * Gets the value of the link property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the link property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLink().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link CommentType.Link } + * Sets the value of the type property. * + * @param value + * allowed object is {@link String } * */ - public List getLink() { - if (link == null) { - link = new ArrayList(); - } - return this.link; + public void setType(String value) + { + this.type = value; } /** - * Gets the value of the event property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the event property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvent().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EventType } + * Gets the value of the ref property. * + * @return possible object is {@link String } * */ - public List getEvent() { - if (event == null) { - event = new ArrayList(); - } - return this.event; + public String getRef() + { + return ref; } /** - * Gets the value of the isoform property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the isoform property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getIsoform().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link IsoformType } + * Sets the value of the ref property. * + * @param value + * allowed object is {@link String } * */ - public List getIsoform() { - if (isoform == null) { - isoform = new ArrayList(); - } - return this.isoform; + public void setRef(String value) + { + this.ref = value; } /** - * Gets the value of the interactant property. - * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the interactant property. + * Java class for anonymous complex type. * *

- * For example, to add a new item, do as follows: + * The following schema fragment specifies the expected content contained + * within this class. + * *

-     *    getInteractant().add(newItem);
+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <attribute name="resource" use="required">
+     *         <simpleType>
+     *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+     *             <enumeration value="EMBL-CDS"/>
+     *             <enumeration value="EMBL"/>
+     *           </restriction>
+     *         </simpleType>
+     *       </attribute>
+     *       <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     *       <attribute name="version" type="{http://www.w3.org/2001/XMLSchema}int" />
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
      * 
* * - *

- * Objects of the following type(s) are allowed in the list - * {@link InteractantType } - * - * */ - public List getInteractant() { - if (interactant == null) { - interactant = new ArrayList(); - } - return this.interactant; - } + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Sequence + { + + @XmlAttribute(name = "resource", required = true) + protected String resource; + + @XmlAttribute(name = "id", required = true) + protected String id; + + @XmlAttribute(name = "version") + protected Integer version; + + /** + * Gets the value of the resource property. + * + * @return possible object is {@link String } + * + */ + public String getResource() + { + return resource; + } + + /** + * Sets the value of the resource property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setResource(String value) + { + this.resource = value; + } + + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } + + /** + * Gets the value of the version property. + * + * @return possible object is {@link Integer } + * + */ + public Integer getVersion() + { + return version; + } + + /** + * Sets the value of the version property. + * + * @param value + * allowed object is {@link Integer } + * + */ + public void setVersion(Integer value) + { + this.version = value; + } - /** - * Gets the value of the organismsDiffer property. - * - * @return - * possible object is - * {@link Boolean } - * - */ - public Boolean isOrganismsDiffer() { - return organismsDiffer; } - /** - * Sets the value of the organismsDiffer property. - * - * @param value - * allowed object is - * {@link Boolean } - * - */ - public void setOrganismsDiffer(Boolean value) { - this.organismsDiffer = value; - } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="name" type="{http://www.w3.org/2001/XMLSchema}string"/>
+   *         <element name="acronym" type="{http://www.w3.org/2001/XMLSchema}string"/>
+   *         <element name="description" type="{http://www.w3.org/2001/XMLSchema}string"/>
+   *         <element name="dbReference" type="{http://uniprot.org/uniprot}dbReferenceType"/>
+   *       </sequence>
+   *       <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType( + name = "", + propOrder = + { "name", "acronym", "description", "dbReference" }) + public static class Disease + { + + @XmlElement(required = true) + protected String name; - /** - * Gets the value of the experiments property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getExperiments() { - return experiments; - } + @XmlElement(required = true) + protected String acronym; - /** - * Sets the value of the experiments property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setExperiments(Integer value) { - this.experiments = value; - } + @XmlElement(required = true) + protected String description; - /** - * Gets the value of the disease property. - * - * @return - * possible object is - * {@link CommentType.Disease } - * - */ - public CommentType.Disease getDisease() { - return disease; - } + @XmlElement(required = true) + protected DbReferenceType dbReference; - /** - * Sets the value of the disease property. - * - * @param value - * allowed object is - * {@link CommentType.Disease } - * - */ - public void setDisease(CommentType.Disease value) { - this.disease = value; - } + @XmlAttribute(name = "id", required = true) + protected String id; /** - * Gets the value of the location property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the location property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLocation().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LocationType } + * Gets the value of the name property. * + * @return possible object is {@link String } * */ - public List getLocation() { - if (location == null) { - location = new ArrayList(); - } - return this.location; + public String getName() + { + return name; } /** - * Gets the value of the text property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the text property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getText().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } + * Sets the value of the name property. * + * @param value + * allowed object is {@link String } * */ - public List getText() { - if (text == null) { - text = new ArrayList(); - } - return this.text; + public void setName(String value) + { + this.name = value; } /** - * Gets the value of the type property. + * Gets the value of the acronym property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getType() { - return type; + public String getAcronym() + { + return acronym; } /** - * Sets the value of the type property. + * Sets the value of the acronym property. * * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Gets the value of the locationType property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getLocationType() { - return locationType; + public void setAcronym(String value) + { + this.acronym = value; } /** - * Sets the value of the locationType property. + * Gets the value of the description property. * - * @param value - * allowed object is - * {@link String } - * - */ - public void setLocationType(String value) { - this.locationType = value; - } - - /** - * Gets the value of the name property. + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getName() { - return name; + public String getDescription() + { + return description; } /** - * Sets the value of the name property. + * Sets the value of the description property. * * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Gets the value of the mass property. + * allowed object is {@link String } * - * @return - * possible object is - * {@link Float } - * */ - public Float getMass() { - return mass; + public void setDescription(String value) + { + this.description = value; } /** - * Sets the value of the mass property. + * Gets the value of the dbReference property. * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setMass(Float value) { - this.mass = value; - } - - /** - * Gets the value of the error property. + * @return possible object is {@link DbReferenceType } * - * @return - * possible object is - * {@link String } - * */ - public String getError() { - return error; + public DbReferenceType getDbReference() + { + return dbReference; } /** - * Sets the value of the error property. + * Sets the value of the dbReference property. * * @param value - * allowed object is - * {@link String } - * + * allowed object is {@link DbReferenceType } + * */ - public void setError(String value) { - this.error = value; + public void setDbReference(DbReferenceType value) + { + this.dbReference = value; } /** - * Gets the value of the method property. + * Gets the value of the id property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link String } - * */ - public String getMethod() { - return method; + public String getId() + { + return id; } /** - * Sets the value of the method property. + * Sets the value of the id property. * * @param value - * allowed object is - * {@link String } - * + * allowed object is {@link String } + * */ - public void setMethod(String value) { - this.method = value; + public void setId(String value) + { + this.id = value; } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="KM" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
+   *         <element name="Vmax" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
+   *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "km", "vmax", "text" }) + public static class Kinetics + { + + @XmlElement(name = "KM") + protected List km; + + @XmlElement(name = "Vmax") + protected List vmax; + + protected List text; + /** - * Gets the value of the evidence property. + * Gets the value of the km property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the km property. * *

* For example, to add a new item, do as follows: + * *

-     *    getEvidence().add(newItem);
+     * getKM().add(newItem);
      * 
* * *

* Objects of the following type(s) are allowed in the list - * {@link Integer } + * {@link EvidencedStringType } * * */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; + public List getKM() + { + if (km == null) + { + km = new ArrayList(); + } + return this.km; } - /** - *

Java class for anonymous complex type. + * Gets the value of the vmax property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the vmax property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="max" type="{http://uniprot.org/uniprot}evidencedStringType" minOccurs="0"/>
-     *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getVmax().add(newItem);
      * 
* * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "max", - "text" - }) - public static class Absorption { - - protected EvidencedStringType max; - protected List text; - - /** - * Gets the value of the max property. - * - * @return - * possible object is - * {@link EvidencedStringType } - * - */ - public EvidencedStringType getMax() { - return max; - } - - /** - * Sets the value of the max property. - * - * @param value - * allowed object is - * {@link EvidencedStringType } - * - */ - public void setMax(EvidencedStringType value) { - this.max = value; - } - - /** - * Gets the value of the text property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the text property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getText().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getText() { - if (text == null) { - text = new ArrayList(); - } - return this.text; - } - - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="sequence" minOccurs="0">
-     *           <complexType>
-     *             <complexContent>
-     *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *                 <attribute name="resource" use="required">
-     *                   <simpleType>
-     *                     <restriction base="{http://www.w3.org/2001/XMLSchema}string">
-     *                       <enumeration value="EMBL-CDS"/>
-     *                       <enumeration value="EMBL"/>
-     *                     </restriction>
-     *                   </simpleType>
-     *                 </attribute>
-     *                 <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *                 <attribute name="version" type="{http://www.w3.org/2001/XMLSchema}int" />
-     *               </restriction>
-     *             </complexContent>
-     *           </complexType>
-     *         </element>
-     *       </sequence>
-     *       <attribute name="type" use="required">
-     *         <simpleType>
-     *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
-     *             <enumeration value="frameshift"/>
-     *             <enumeration value="erroneous initiation"/>
-     *             <enumeration value="erroneous termination"/>
-     *             <enumeration value="erroneous gene model prediction"/>
-     *             <enumeration value="erroneous translation"/>
-     *             <enumeration value="miscellaneous discrepancy"/>
-     *           </restriction>
-     *         </simpleType>
-     *       </attribute>
-     *       <attribute name="ref" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } * * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "sequence" - }) - public static class Conflict { - - protected CommentType.Conflict.Sequence sequence; - @XmlAttribute(name = "type", required = true) - protected String type; - @XmlAttribute(name = "ref") - protected String ref; - - /** - * Gets the value of the sequence property. - * - * @return - * possible object is - * {@link CommentType.Conflict.Sequence } - * - */ - public CommentType.Conflict.Sequence getSequence() { - return sequence; - } - - /** - * Sets the value of the sequence property. - * - * @param value - * allowed object is - * {@link CommentType.Conflict.Sequence } - * - */ - public void setSequence(CommentType.Conflict.Sequence value) { - this.sequence = value; - } - - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Gets the value of the ref property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getRef() { - return ref; - } - - /** - * Sets the value of the ref property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setRef(String value) { - this.ref = value; - } - - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-         * <complexType>
-         *   <complexContent>
-         *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-         *       <attribute name="resource" use="required">
-         *         <simpleType>
-         *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
-         *             <enumeration value="EMBL-CDS"/>
-         *             <enumeration value="EMBL"/>
-         *           </restriction>
-         *         </simpleType>
-         *       </attribute>
-         *       <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-         *       <attribute name="version" type="{http://www.w3.org/2001/XMLSchema}int" />
-         *     </restriction>
-         *   </complexContent>
-         * </complexType>
-         * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Sequence { - - @XmlAttribute(name = "resource", required = true) - protected String resource; - @XmlAttribute(name = "id", required = true) - protected String id; - @XmlAttribute(name = "version") - protected Integer version; - - /** - * Gets the value of the resource property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getResource() { - return resource; - } - - /** - * Sets the value of the resource property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setResource(String value) { - this.resource = value; - } - - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } - - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; - } - - /** - * Gets the value of the version property. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getVersion() { - return version; - } - - /** - * Sets the value of the version property. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setVersion(Integer value) { - this.version = value; - } - - } - + public List getVmax() + { + if (vmax == null) + { + vmax = new ArrayList(); + } + return this.vmax; } - /** - *

Java class for anonymous complex type. + * Gets the value of the text property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the text property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="name" type="{http://www.w3.org/2001/XMLSchema}string"/>
-     *         <element name="acronym" type="{http://www.w3.org/2001/XMLSchema}string"/>
-     *         <element name="description" type="{http://www.w3.org/2001/XMLSchema}string"/>
-     *         <element name="dbReference" type="{http://uniprot.org/uniprot}dbReferenceType"/>
-     *       </sequence>
-     *       <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getText().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "name", - "acronym", - "description", - "dbReference" - }) - public static class Disease { - - @XmlElement(required = true) - protected String name; - @XmlElement(required = true) - protected String acronym; - @XmlElement(required = true) - protected String description; - @XmlElement(required = true) - protected DbReferenceType dbReference; - @XmlAttribute(name = "id", required = true) - protected String id; - - /** - * Gets the value of the name property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Sets the value of the name property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Gets the value of the acronym property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAcronym() { - return acronym; - } - - /** - * Sets the value of the acronym property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAcronym(String value) { - this.acronym = value; - } - - /** - * Gets the value of the description property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDescription() { - return description; - } - - /** - * Sets the value of the description property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDescription(String value) { - this.description = value; - } - - /** - * Gets the value of the dbReference property. - * - * @return - * possible object is - * {@link DbReferenceType } - * - */ - public DbReferenceType getDbReference() { - return dbReference; - } - - /** - * Sets the value of the dbReference property. - * - * @param value - * allowed object is - * {@link DbReferenceType } - * - */ - public void setDbReference(DbReferenceType value) { - this.dbReference = value; - } - - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } - - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; - } - + public List getText() + { + if (text == null) + { + text = new ArrayList(); + } + return this.text; } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <attribute name="uri" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Link + { + + @XmlAttribute(name = "uri", required = true) + @XmlSchemaType(name = "anyURI") + protected String uri; /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="KM" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
-     *         <element name="Vmax" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
-     *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ * Gets the value of the uri property. * + * @return possible object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "km", - "vmax", - "text" - }) - public static class Kinetics { - - @XmlElement(name = "KM") - protected List km; - @XmlElement(name = "Vmax") - protected List vmax; - protected List text; - - /** - * Gets the value of the km property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the km property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getKM().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getKM() { - if (km == null) { - km = new ArrayList(); - } - return this.km; - } - - /** - * Gets the value of the vmax property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the vmax property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getVmax().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getVmax() { - if (vmax == null) { - vmax = new ArrayList(); - } - return this.vmax; - } - - /** - * Gets the value of the text property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the text property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getText().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getText() { - if (text == null) { - text = new ArrayList(); - } - return this.text; - } - + public String getUri() + { + return uri; } - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="uri" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ * Sets the value of the uri property. * + * @param value + * allowed object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Link { - - @XmlAttribute(name = "uri", required = true) - @XmlSchemaType(name = "anyURI") - protected String uri; - - /** - * Gets the value of the uri property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getUri() { - return uri; - } - - /** - * Sets the value of the uri property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setUri(String value) { - this.uri = value; - } - + public void setUri(String value) + { + this.uri = value; } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded"/>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "text" }) + public static class PhDependence + { + + @XmlElement(required = true) + protected List text; /** - *

Java class for anonymous complex type. + * Gets the value of the text property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the text property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getText().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "text" - }) - public static class PhDependence { - - @XmlElement(required = true) - protected List text; - - /** - * Gets the value of the text property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the text property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getText().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getText() { - if (text == null) { - text = new ArrayList(); - } - return this.text; - } - + public List getText() + { + if (text == null) + { + text = new ArrayList(); + } + return this.text; } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded"/>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "text" }) + public static class RedoxPotential + { + + @XmlElement(required = true) + protected List text; /** - *

Java class for anonymous complex type. + * Gets the value of the text property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the text property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getText().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "text" - }) - public static class RedoxPotential { - - @XmlElement(required = true) - protected List text; - - /** - * Gets the value of the text property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the text property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getText().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getText() { - if (text == null) { - text = new ArrayList(); - } - return this.text; - } - + public List getText() + { + if (text == null) + { + text = new ArrayList(); + } + return this.text; } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded"/>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "text" }) + public static class TemperatureDependence + { + + @XmlElement(required = true) + protected List text; /** - *

Java class for anonymous complex type. + * Gets the value of the text property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the text property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="text" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getText().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "text" - }) - public static class TemperatureDependence { - - @XmlElement(required = true) - protected List text; - - /** - * Gets the value of the text property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the text property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getText().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getText() { - if (text == null) { - text = new ArrayList(); - } - return this.text; - } - + public List getText() + { + if (text == null) + { + text = new ArrayList(); + } + return this.text; } + } + } diff --git a/src/jalview/xml/binding/uniprot/ConsortiumType.java b/src/jalview/xml/binding/uniprot/ConsortiumType.java index 71db504..719344b 100644 --- a/src/jalview/xml/binding/uniprot/ConsortiumType.java +++ b/src/jalview/xml/binding/uniprot/ConsortiumType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import javax.xml.bind.annotation.XmlAccessType; @@ -13,14 +12,16 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - * Describes the authors of a citation when these are represented by a consortium. - * Equivalent to the flat file RG-line. + * Describes the authors of a citation when these are represented by a + * consortium. Equivalent to the flat file RG-line. * - *

Java class for consortiumType complex type. + *

+ * Java class for consortiumType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="consortiumType">
@@ -36,33 +37,33 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "consortiumType")
-public class ConsortiumType {
+public class ConsortiumType
+{
 
-    @XmlAttribute(name = "name", required = true)
-    protected String name;
+  @XmlAttribute(name = "name", required = true)
+  protected String name;
 
-    /**
-     * Gets the value of the name property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getName() {
-        return name;
-    }
+  /**
+   * Gets the value of the name property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getName()
+  {
+    return name;
+  }
 
-    /**
-     * Sets the value of the name property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setName(String value) {
-        this.name = value;
-    }
+  /**
+   * Sets the value of the name property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setName(String value)
+  {
+    this.name = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/DbReferenceType.java b/src/jalview/xml/binding/uniprot/DbReferenceType.java
index 73ccfa8..184f424 100644
--- a/src/jalview/xml/binding/uniprot/DbReferenceType.java
+++ b/src/jalview/xml/binding/uniprot/DbReferenceType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.util.ArrayList;
@@ -15,15 +14,16 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * Describes a database cross-reference.
- *             Equivalent to the flat file DR-line.
- *             
+ * Describes a database cross-reference. Equivalent to the flat file DR-line.
  * 
- * 

Java class for dbReferenceType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * Java class for dbReferenceType complex type. + * + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="dbReferenceType">
@@ -44,149 +44,153 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "dbReferenceType", propOrder = {
-    "molecule",
-    "property"
-})
-public class DbReferenceType {
-
-    protected MoleculeType molecule;
-    protected List property;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
-    @XmlAttribute(name = "id", required = true)
-    protected String id;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
-
-    /**
-     * Gets the value of the molecule property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link MoleculeType }
-     *     
-     */
-    public MoleculeType getMolecule() {
-        return molecule;
-    }
+@XmlType(name = "dbReferenceType", propOrder = { "molecule", "property" })
+public class DbReferenceType
+{
 
-    /**
-     * Sets the value of the molecule property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link MoleculeType }
-     *     
-     */
-    public void setMolecule(MoleculeType value) {
-        this.molecule = value;
-    }
+  protected MoleculeType molecule;
 
-    /**
-     * Gets the value of the property property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the property property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getProperty().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link PropertyType } - * - * - */ - public List getProperty() { - if (property == null) { - property = new ArrayList(); - } - return this.property; - } + protected List property; - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } + @XmlAttribute(name = "type", required = true) + protected String type; - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } + @XmlAttribute(name = "id", required = true) + protected String id; - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } + @XmlAttribute(name = "evidence") + protected List evidence; + + /** + * Gets the value of the molecule property. + * + * @return possible object is {@link MoleculeType } + * + */ + public MoleculeType getMolecule() + { + return molecule; + } - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; + /** + * Sets the value of the molecule property. + * + * @param value + * allowed object is {@link MoleculeType } + * + */ + public void setMolecule(MoleculeType value) + { + this.molecule = value; + } + + /** + * Gets the value of the property property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the property property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getProperty().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link PropertyType } + * + * + */ + public List getProperty() + { + if (property == null) + { + property = new ArrayList(); } + return this.property; + } + + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } + + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } } diff --git a/src/jalview/xml/binding/uniprot/Entry.java b/src/jalview/xml/binding/uniprot/Entry.java index 21963a8..72de883 100644 --- a/src/jalview/xml/binding/uniprot/Entry.java +++ b/src/jalview/xml/binding/uniprot/Entry.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -19,11 +18,13 @@ import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.datatype.XMLGregorianCalendar; - /** - *

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType>
@@ -65,561 +66,594 @@ import javax.xml.datatype.XMLGregorianCalendar;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
-    "accession",
-    "name",
-    "protein",
-    "gene",
-    "organism",
-    "organismHost",
-    "geneLocation",
-    "reference",
-    "comment",
-    "dbReference",
-    "proteinExistence",
-    "keyword",
-    "feature",
-    "evidence",
-    "sequence"
-})
+@XmlType(
+  name = "",
+  propOrder =
+  { "accession", "name", "protein", "gene", "organism", "organismHost",
+      "geneLocation", "reference", "comment", "dbReference",
+      "proteinExistence", "keyword", "feature", "evidence", "sequence" })
 @XmlRootElement(name = "entry")
-public class Entry {
-
-    @XmlElement(required = true)
-    protected List accession;
-    @XmlElement(required = true)
-    protected List name;
-    @XmlElement(required = true)
-    protected ProteinType protein;
-    protected List gene;
-    @XmlElement(required = true)
-    protected OrganismType organism;
-    protected List organismHost;
-    protected List geneLocation;
-    @XmlElement(required = true)
-    protected List reference;
-    @XmlElement(nillable = true)
-    protected List comment;
-    protected List dbReference;
-    @XmlElement(required = true)
-    protected ProteinExistenceType proteinExistence;
-    protected List keyword;
-    protected List feature;
-    protected List evidence;
-    @XmlElement(required = true)
-    protected SequenceType sequence;
-    @XmlAttribute(name = "dataset", required = true)
-    protected String dataset;
-    @XmlAttribute(name = "created", required = true)
-    @XmlSchemaType(name = "date")
-    protected XMLGregorianCalendar created;
-    @XmlAttribute(name = "modified", required = true)
-    @XmlSchemaType(name = "date")
-    protected XMLGregorianCalendar modified;
-    @XmlAttribute(name = "version", required = true)
-    protected int version;
-
-    /**
-     * Gets the value of the accession property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the accession property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAccession().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getAccession() { - if (accession == null) { - accession = new ArrayList(); - } - return this.accession; - } +public class Entry +{ - /** - * Gets the value of the name property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the name property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getName().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getName() { - if (name == null) { - name = new ArrayList(); - } - return this.name; - } + @XmlElement(required = true) + protected List accession; - /** - * Gets the value of the protein property. - * - * @return - * possible object is - * {@link ProteinType } - * - */ - public ProteinType getProtein() { - return protein; - } + @XmlElement(required = true) + protected List name; - /** - * Sets the value of the protein property. - * - * @param value - * allowed object is - * {@link ProteinType } - * - */ - public void setProtein(ProteinType value) { - this.protein = value; - } + @XmlElement(required = true) + protected ProteinType protein; - /** - * Gets the value of the gene property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the gene property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getGene().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link GeneType } - * - * - */ - public List getGene() { - if (gene == null) { - gene = new ArrayList(); - } - return this.gene; - } + protected List gene; - /** - * Gets the value of the organism property. - * - * @return - * possible object is - * {@link OrganismType } - * - */ - public OrganismType getOrganism() { - return organism; - } + @XmlElement(required = true) + protected OrganismType organism; - /** - * Sets the value of the organism property. - * - * @param value - * allowed object is - * {@link OrganismType } - * - */ - public void setOrganism(OrganismType value) { - this.organism = value; - } + protected List organismHost; - /** - * Gets the value of the organismHost property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the organismHost property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getOrganismHost().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link OrganismType } - * - * - */ - public List getOrganismHost() { - if (organismHost == null) { - organismHost = new ArrayList(); - } - return this.organismHost; - } + protected List geneLocation; - /** - * Gets the value of the geneLocation property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the geneLocation property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getGeneLocation().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link GeneLocationType } - * - * - */ - public List getGeneLocation() { - if (geneLocation == null) { - geneLocation = new ArrayList(); - } - return this.geneLocation; - } + @XmlElement(required = true) + protected List reference; - /** - * Gets the value of the reference property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the reference property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getReference().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ReferenceType } - * - * - */ - public List getReference() { - if (reference == null) { - reference = new ArrayList(); - } - return this.reference; - } + @XmlElement(nillable = true) + protected List comment; - /** - * Gets the value of the comment property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the comment property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getComment().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link CommentType } - * - * - */ - public List getComment() { - if (comment == null) { - comment = new ArrayList(); - } - return this.comment; - } + protected List dbReference; - /** - * Gets the value of the dbReference property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the dbReference property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getDbReference().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link DbReferenceType } - * - * - */ - public List getDbReference() { - if (dbReference == null) { - dbReference = new ArrayList(); - } - return this.dbReference; - } + @XmlElement(required = true) + protected ProteinExistenceType proteinExistence; - /** - * Gets the value of the proteinExistence property. - * - * @return - * possible object is - * {@link ProteinExistenceType } - * - */ - public ProteinExistenceType getProteinExistence() { - return proteinExistence; - } + protected List keyword; - /** - * Sets the value of the proteinExistence property. - * - * @param value - * allowed object is - * {@link ProteinExistenceType } - * - */ - public void setProteinExistence(ProteinExistenceType value) { - this.proteinExistence = value; - } + protected List feature; - /** - * Gets the value of the keyword property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the keyword property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getKeyword().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link KeywordType } - * - * - */ - public List getKeyword() { - if (keyword == null) { - keyword = new ArrayList(); - } - return this.keyword; - } + protected List evidence; - /** - * Gets the value of the feature property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the feature property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getFeature().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link FeatureType } - * - * - */ - public List getFeature() { - if (feature == null) { - feature = new ArrayList(); - } - return this.feature; - } + @XmlElement(required = true) + protected SequenceType sequence; - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidenceType } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } + @XmlAttribute(name = "dataset", required = true) + protected String dataset; - /** - * Gets the value of the sequence property. - * - * @return - * possible object is - * {@link SequenceType } - * - */ - public SequenceType getSequence() { - return sequence; - } + @XmlAttribute(name = "created", required = true) + @XmlSchemaType(name = "date") + protected XMLGregorianCalendar created; - /** - * Sets the value of the sequence property. - * - * @param value - * allowed object is - * {@link SequenceType } - * - */ - public void setSequence(SequenceType value) { - this.sequence = value; - } + @XmlAttribute(name = "modified", required = true) + @XmlSchemaType(name = "date") + protected XMLGregorianCalendar modified; - /** - * Gets the value of the dataset property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDataset() { - return dataset; - } + @XmlAttribute(name = "version", required = true) + protected int version; - /** - * Sets the value of the dataset property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDataset(String value) { - this.dataset = value; + /** + * Gets the value of the accession property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the accession property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getAccession().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getAccession() + { + if (accession == null) + { + accession = new ArrayList(); } - - /** - * Gets the value of the created property. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getCreated() { - return created; + return this.accession; + } + + /** + * Gets the value of the name property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the name property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getName() + { + if (name == null) + { + name = new ArrayList(); } - - /** - * Sets the value of the created property. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setCreated(XMLGregorianCalendar value) { - this.created = value; + return this.name; + } + + /** + * Gets the value of the protein property. + * + * @return possible object is {@link ProteinType } + * + */ + public ProteinType getProtein() + { + return protein; + } + + /** + * Sets the value of the protein property. + * + * @param value + * allowed object is {@link ProteinType } + * + */ + public void setProtein(ProteinType value) + { + this.protein = value; + } + + /** + * Gets the value of the gene property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the gene property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getGene().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link GeneType } + * + * + */ + public List getGene() + { + if (gene == null) + { + gene = new ArrayList(); } - - /** - * Gets the value of the modified property. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getModified() { - return modified; + return this.gene; + } + + /** + * Gets the value of the organism property. + * + * @return possible object is {@link OrganismType } + * + */ + public OrganismType getOrganism() + { + return organism; + } + + /** + * Sets the value of the organism property. + * + * @param value + * allowed object is {@link OrganismType } + * + */ + public void setOrganism(OrganismType value) + { + this.organism = value; + } + + /** + * Gets the value of the organismHost property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the organismHost property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getOrganismHost().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link OrganismType } + * + * + */ + public List getOrganismHost() + { + if (organismHost == null) + { + organismHost = new ArrayList(); } - - /** - * Sets the value of the modified property. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setModified(XMLGregorianCalendar value) { - this.modified = value; + return this.organismHost; + } + + /** + * Gets the value of the geneLocation property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the geneLocation property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getGeneLocation().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link GeneLocationType } + * + * + */ + public List getGeneLocation() + { + if (geneLocation == null) + { + geneLocation = new ArrayList(); } - - /** - * Gets the value of the version property. - * - */ - public int getVersion() { - return version; + return this.geneLocation; + } + + /** + * Gets the value of the reference property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the reference property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getReference().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ReferenceType } + * + * + */ + public List getReference() + { + if (reference == null) + { + reference = new ArrayList(); } - - /** - * Sets the value of the version property. - * - */ - public void setVersion(int value) { - this.version = value; + return this.reference; + } + + /** + * Gets the value of the comment property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the comment property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getComment().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link CommentType + * } + * + * + */ + public List getComment() + { + if (comment == null) + { + comment = new ArrayList(); + } + return this.comment; + } + + /** + * Gets the value of the dbReference property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the dbReference property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getDbReference().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link DbReferenceType } + * + * + */ + public List getDbReference() + { + if (dbReference == null) + { + dbReference = new ArrayList(); + } + return this.dbReference; + } + + /** + * Gets the value of the proteinExistence property. + * + * @return possible object is {@link ProteinExistenceType } + * + */ + public ProteinExistenceType getProteinExistence() + { + return proteinExistence; + } + + /** + * Sets the value of the proteinExistence property. + * + * @param value + * allowed object is {@link ProteinExistenceType } + * + */ + public void setProteinExistence(ProteinExistenceType value) + { + this.proteinExistence = value; + } + + /** + * Gets the value of the keyword property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the keyword property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getKeyword().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link KeywordType + * } + * + * + */ + public List getKeyword() + { + if (keyword == null) + { + keyword = new ArrayList(); + } + return this.keyword; + } + + /** + * Gets the value of the feature property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the feature property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getFeature().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link FeatureType + * } + * + * + */ + public List getFeature() + { + if (feature == null) + { + feature = new ArrayList(); + } + return this.feature; + } + + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidenceType } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } + + /** + * Gets the value of the sequence property. + * + * @return possible object is {@link SequenceType } + * + */ + public SequenceType getSequence() + { + return sequence; + } + + /** + * Sets the value of the sequence property. + * + * @param value + * allowed object is {@link SequenceType } + * + */ + public void setSequence(SequenceType value) + { + this.sequence = value; + } + + /** + * Gets the value of the dataset property. + * + * @return possible object is {@link String } + * + */ + public String getDataset() + { + return dataset; + } + + /** + * Sets the value of the dataset property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDataset(String value) + { + this.dataset = value; + } + + /** + * Gets the value of the created property. + * + * @return possible object is {@link XMLGregorianCalendar } + * + */ + public XMLGregorianCalendar getCreated() + { + return created; + } + + /** + * Sets the value of the created property. + * + * @param value + * allowed object is {@link XMLGregorianCalendar } + * + */ + public void setCreated(XMLGregorianCalendar value) + { + this.created = value; + } + + /** + * Gets the value of the modified property. + * + * @return possible object is {@link XMLGregorianCalendar } + * + */ + public XMLGregorianCalendar getModified() + { + return modified; + } + + /** + * Sets the value of the modified property. + * + * @param value + * allowed object is {@link XMLGregorianCalendar } + * + */ + public void setModified(XMLGregorianCalendar value) + { + this.modified = value; + } + + /** + * Gets the value of the version property. + * + */ + public int getVersion() + { + return version; + } + + /** + * Sets the value of the version property. + * + */ + public void setVersion(int value) + { + this.version = value; + } } diff --git a/src/jalview/xml/binding/uniprot/EventType.java b/src/jalview/xml/binding/uniprot/EventType.java index 0b4d4bd..ec9fdcd 100644 --- a/src/jalview/xml/binding/uniprot/EventType.java +++ b/src/jalview/xml/binding/uniprot/EventType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import javax.xml.bind.annotation.XmlAccessType; @@ -13,13 +12,15 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** * Describes the type of events that cause alternative products. * - *

Java class for eventType complex type. + *

+ * Java class for eventType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="eventType">
@@ -44,33 +45,33 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "eventType")
-public class EventType {
+public class EventType
+{
 
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
+  @XmlAttribute(name = "type", required = true)
+  protected String type;
 
-    /**
-     * Gets the value of the type property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getType() {
-        return type;
-    }
+  /**
+   * Gets the value of the type property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getType()
+  {
+    return type;
+  }
 
-    /**
-     * Sets the value of the type property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setType(String value) {
-        this.type = value;
-    }
+  /**
+   * Sets the value of the type property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setType(String value)
+  {
+    this.type = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/EvidenceType.java b/src/jalview/xml/binding/uniprot/EvidenceType.java
index 59c9857..d40163d 100644
--- a/src/jalview/xml/binding/uniprot/EvidenceType.java
+++ b/src/jalview/xml/binding/uniprot/EvidenceType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.math.BigInteger;
@@ -14,14 +13,15 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * Describes the evidence for an annotation.
- *             No flat file equivalent.
+ * Describes the evidence for an annotation. No flat file equivalent.
  * 
- * 

Java class for evidenceType complex type. + *

+ * Java class for evidenceType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="evidenceType">
@@ -41,113 +41,110 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "evidenceType", propOrder = {
-    "source",
-    "importedFrom"
-})
-public class EvidenceType {
-
-    protected SourceType source;
-    protected ImportedFromType importedFrom;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
-    @XmlAttribute(name = "key", required = true)
-    protected BigInteger key;
-
-    /**
-     * Gets the value of the source property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link SourceType }
-     *     
-     */
-    public SourceType getSource() {
-        return source;
-    }
-
-    /**
-     * Sets the value of the source property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link SourceType }
-     *     
-     */
-    public void setSource(SourceType value) {
-        this.source = value;
-    }
-
-    /**
-     * Gets the value of the importedFrom property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link ImportedFromType }
-     *     
-     */
-    public ImportedFromType getImportedFrom() {
-        return importedFrom;
-    }
-
-    /**
-     * Sets the value of the importedFrom property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link ImportedFromType }
-     *     
-     */
-    public void setImportedFrom(ImportedFromType value) {
-        this.importedFrom = value;
-    }
-
-    /**
-     * Gets the value of the type property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getType() {
-        return type;
-    }
-
-    /**
-     * Sets the value of the type property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setType(String value) {
-        this.type = value;
-    }
-
-    /**
-     * Gets the value of the key property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link BigInteger }
-     *     
-     */
-    public BigInteger getKey() {
-        return key;
-    }
-
-    /**
-     * Sets the value of the key property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link BigInteger }
-     *     
-     */
-    public void setKey(BigInteger value) {
-        this.key = value;
-    }
+@XmlType(name = "evidenceType", propOrder = { "source", "importedFrom" })
+public class EvidenceType
+{
+
+  protected SourceType source;
+
+  protected ImportedFromType importedFrom;
+
+  @XmlAttribute(name = "type", required = true)
+  protected String type;
+
+  @XmlAttribute(name = "key", required = true)
+  protected BigInteger key;
+
+  /**
+   * Gets the value of the source property.
+   * 
+   * @return possible object is {@link SourceType }
+   * 
+   */
+  public SourceType getSource()
+  {
+    return source;
+  }
+
+  /**
+   * Sets the value of the source property.
+   * 
+   * @param value
+   *          allowed object is {@link SourceType }
+   * 
+   */
+  public void setSource(SourceType value)
+  {
+    this.source = value;
+  }
+
+  /**
+   * Gets the value of the importedFrom property.
+   * 
+   * @return possible object is {@link ImportedFromType }
+   * 
+   */
+  public ImportedFromType getImportedFrom()
+  {
+    return importedFrom;
+  }
+
+  /**
+   * Sets the value of the importedFrom property.
+   * 
+   * @param value
+   *          allowed object is {@link ImportedFromType }
+   * 
+   */
+  public void setImportedFrom(ImportedFromType value)
+  {
+    this.importedFrom = value;
+  }
+
+  /**
+   * Gets the value of the type property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getType()
+  {
+    return type;
+  }
+
+  /**
+   * Sets the value of the type property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setType(String value)
+  {
+    this.type = value;
+  }
+
+  /**
+   * Gets the value of the key property.
+   * 
+   * @return possible object is {@link BigInteger }
+   * 
+   */
+  public BigInteger getKey()
+  {
+    return key;
+  }
+
+  /**
+   * Sets the value of the key property.
+   * 
+   * @param value
+   *          allowed object is {@link BigInteger }
+   * 
+   */
+  public void setKey(BigInteger value)
+  {
+    this.key = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/EvidencedStringType.java b/src/jalview/xml/binding/uniprot/EvidencedStringType.java
index 0fa25a6..4b4c3a2 100644
--- a/src/jalview/xml/binding/uniprot/EvidencedStringType.java
+++ b/src/jalview/xml/binding/uniprot/EvidencedStringType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.util.ArrayList;
@@ -16,11 +15,13 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
 
-
 /**
- * 

Java class for evidencedStringType complex type. + *

+ * Java class for evidencedStringType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="evidencedStringType">
@@ -44,93 +45,94 @@ import javax.xml.bind.annotation.XmlValue;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "evidencedStringType", propOrder = {
-    "value"
-})
-public class EvidencedStringType {
+@XmlType(name = "evidencedStringType", propOrder = { "value" })
+public class EvidencedStringType
+{
 
-    @XmlValue
-    protected String value;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
-    @XmlAttribute(name = "status")
-    protected String status;
+  @XmlValue
+  protected String value;
 
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getValue() {
-        return value;
-    }
+  @XmlAttribute(name = "evidence")
+  protected List evidence;
 
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
+  @XmlAttribute(name = "status")
+  protected String status;
 
-    /**
-     * Gets the value of the evidence property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } + /** + * Gets the value of the value property. + * + * @return possible object is {@link String } + * + */ + public String getValue() + { + return value; + } - /** - * Gets the value of the status property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getStatus() { - return status; - } + /** + * Sets the value of the value property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setValue(String value) + { + this.value = value; + } - /** - * Sets the value of the status property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setStatus(String value) { - this.status = value; + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } + + /** + * Gets the value of the status property. + * + * @return possible object is {@link String } + * + */ + public String getStatus() + { + return status; + } + + /** + * Sets the value of the status property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setStatus(String value) + { + this.status = value; + } } diff --git a/src/jalview/xml/binding/uniprot/FeatureType.java b/src/jalview/xml/binding/uniprot/FeatureType.java index f818e2e..791aa0e 100644 --- a/src/jalview/xml/binding/uniprot/FeatureType.java +++ b/src/jalview/xml/binding/uniprot/FeatureType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -16,14 +15,16 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** - * Describes different types of sequence annotations. - * Equivalent to the flat file FT-line. + * Describes different types of sequence annotations. Equivalent to the flat + * file FT-line. * - *

Java class for featureType complex type. + *

+ * Java class for featureType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="featureType">
@@ -100,254 +101,259 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "featureType", propOrder = {
-    "original",
-    "variation",
-    "location"
-})
-public class FeatureType {
+@XmlType(
+  name = "featureType",
+  propOrder =
+  { "original", "variation", "location" })
+public class FeatureType
+{
 
-    protected String original;
-    protected List variation;
-    @XmlElement(required = true)
-    protected LocationType location;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
-    @XmlAttribute(name = "status")
-    protected String status;
-    @XmlAttribute(name = "id")
-    protected String id;
-    @XmlAttribute(name = "description")
-    protected String description;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
-    @XmlAttribute(name = "ref")
-    protected String ref;
+  protected String original;
 
-    /**
-     * Gets the value of the original property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getOriginal() {
-        return original;
-    }
+  protected List variation;
 
-    /**
-     * Sets the value of the original property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setOriginal(String value) {
-        this.original = value;
-    }
+  @XmlElement(required = true)
+  protected LocationType location;
 
-    /**
-     * Gets the value of the variation property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the variation property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getVariation().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getVariation() { - if (variation == null) { - variation = new ArrayList(); - } - return this.variation; - } + @XmlAttribute(name = "type", required = true) + protected String type; - /** - * Gets the value of the location property. - * - * @return - * possible object is - * {@link LocationType } - * - */ - public LocationType getLocation() { - return location; - } + @XmlAttribute(name = "status") + protected String status; - /** - * Sets the value of the location property. - * - * @param value - * allowed object is - * {@link LocationType } - * - */ - public void setLocation(LocationType value) { - this.location = value; - } + @XmlAttribute(name = "id") + protected String id; - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } + @XmlAttribute(name = "description") + protected String description; - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } + @XmlAttribute(name = "evidence") + protected List evidence; - /** - * Gets the value of the status property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getStatus() { - return status; - } + @XmlAttribute(name = "ref") + protected String ref; - /** - * Sets the value of the status property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setStatus(String value) { - this.status = value; - } + /** + * Gets the value of the original property. + * + * @return possible object is {@link String } + * + */ + public String getOriginal() + { + return original; + } - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } + /** + * Sets the value of the original property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setOriginal(String value) + { + this.original = value; + } - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; + /** + * Gets the value of the variation property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the variation property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getVariation().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getVariation() + { + if (variation == null) + { + variation = new ArrayList(); } + return this.variation; + } - /** - * Gets the value of the description property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDescription() { - return description; - } + /** + * Gets the value of the location property. + * + * @return possible object is {@link LocationType } + * + */ + public LocationType getLocation() + { + return location; + } - /** - * Sets the value of the description property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDescription(String value) { - this.description = value; - } + /** + * Sets the value of the location property. + * + * @param value + * allowed object is {@link LocationType } + * + */ + public void setLocation(LocationType value) + { + this.location = value; + } - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } - /** - * Gets the value of the ref property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getRef() { - return ref; - } + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } + + /** + * Gets the value of the status property. + * + * @return possible object is {@link String } + * + */ + public String getStatus() + { + return status; + } + + /** + * Sets the value of the status property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setStatus(String value) + { + this.status = value; + } - /** - * Sets the value of the ref property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setRef(String value) { - this.ref = value; + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } + + /** + * Gets the value of the description property. + * + * @return possible object is {@link String } + * + */ + public String getDescription() + { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setDescription(String value) + { + this.description = value; + } + + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } + + /** + * Gets the value of the ref property. + * + * @return possible object is {@link String } + * + */ + public String getRef() + { + return ref; + } + + /** + * Sets the value of the ref property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setRef(String value) + { + this.ref = value; + } } diff --git a/src/jalview/xml/binding/uniprot/GeneLocationType.java b/src/jalview/xml/binding/uniprot/GeneLocationType.java index f2d5638..f3d2973 100644 --- a/src/jalview/xml/binding/uniprot/GeneLocationType.java +++ b/src/jalview/xml/binding/uniprot/GeneLocationType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -15,14 +14,16 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - * Describes non-nuclear gene locations (organelles and plasmids). - * Equivalent to the flat file OG-line. + * Describes non-nuclear gene locations (organelles and plasmids). Equivalent to + * the flat file OG-line. * - *

Java class for geneLocationType complex type. + *

+ * Java class for geneLocationType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="geneLocationType">
@@ -56,97 +57,102 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "geneLocationType", propOrder = {
-    "name"
-})
-public class GeneLocationType {
+@XmlType(name = "geneLocationType", propOrder = { "name" })
+public class GeneLocationType
+{
 
-    protected List name;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
+  protected List name;
 
-    /**
-     * Gets the value of the name property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the name property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getName().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link StatusType } - * - * - */ - public List getName() { - if (name == null) { - name = new ArrayList(); - } - return this.name; - } + @XmlAttribute(name = "type", required = true) + protected String type; - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } + @XmlAttribute(name = "evidence") + protected List evidence; - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; + /** + * Gets the value of the name property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the name property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link StatusType + * } + * + * + */ + public List getName() + { + if (name == null) + { + name = new ArrayList(); } + return this.name; + } + + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } } diff --git a/src/jalview/xml/binding/uniprot/GeneNameType.java b/src/jalview/xml/binding/uniprot/GeneNameType.java index 71af71f..b8cec80 100644 --- a/src/jalview/xml/binding/uniprot/GeneNameType.java +++ b/src/jalview/xml/binding/uniprot/GeneNameType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -16,14 +15,16 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlValue; - /** - * Describes different types of gene designations. - * Equivalent to the flat file GN-line. + * Describes different types of gene designations. Equivalent to the flat file + * GN-line. * - *

Java class for geneNameType complex type. + *

+ * Java class for geneNameType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="geneNameType">
@@ -48,93 +49,94 @@ import javax.xml.bind.annotation.XmlValue;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "geneNameType", propOrder = {
-    "value"
-})
-public class GeneNameType {
+@XmlType(name = "geneNameType", propOrder = { "value" })
+public class GeneNameType
+{
 
-    @XmlValue
-    protected String value;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
+  @XmlValue
+  protected String value;
 
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getValue() {
-        return value;
-    }
+  @XmlAttribute(name = "evidence")
+  protected List evidence;
 
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
+  @XmlAttribute(name = "type", required = true)
+  protected String type;
 
-    /**
-     * Gets the value of the evidence property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } + /** + * Gets the value of the value property. + * + * @return possible object is {@link String } + * + */ + public String getValue() + { + return value; + } - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } + /** + * Sets the value of the value property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setValue(String value) + { + this.value = value; + } - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } + + /** + * Gets the value of the type property. + * + * @return possible object is {@link String } + * + */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setType(String value) + { + this.type = value; + } } diff --git a/src/jalview/xml/binding/uniprot/GeneType.java b/src/jalview/xml/binding/uniprot/GeneType.java index 5fa628e..3b2300b 100644 --- a/src/jalview/xml/binding/uniprot/GeneType.java +++ b/src/jalview/xml/binding/uniprot/GeneType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -15,14 +14,15 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** - * Describes a gene. - * Equivalent to the flat file GN-line. + * Describes a gene. Equivalent to the flat file GN-line. * - *

Java class for geneType complex type. + *

+ * Java class for geneType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="geneType">
@@ -39,41 +39,43 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "geneType", propOrder = {
-    "name"
-})
-public class GeneType {
+@XmlType(name = "geneType", propOrder = { "name" })
+public class GeneType
+{
 
-    @XmlElement(required = true)
-    protected List name;
+  @XmlElement(required = true)
+  protected List name;
 
-    /**
-     * Gets the value of the name property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the name property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getName().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link GeneNameType } - * - * - */ - public List getName() { - if (name == null) { - name = new ArrayList(); - } - return this.name; + /** + * Gets the value of the name property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the name property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link GeneNameType } + * + * + */ + public List getName() + { + if (name == null) + { + name = new ArrayList(); } + return this.name; + } } diff --git a/src/jalview/xml/binding/uniprot/ImportedFromType.java b/src/jalview/xml/binding/uniprot/ImportedFromType.java index 3d6c308..f22b4c8 100644 --- a/src/jalview/xml/binding/uniprot/ImportedFromType.java +++ b/src/jalview/xml/binding/uniprot/ImportedFromType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import javax.xml.bind.annotation.XmlAccessType; @@ -13,13 +12,16 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** - * Describes the source of the evidence, when it is not assigned by UniProt, but imported from an external database. + * Describes the source of the evidence, when it is not assigned by UniProt, but + * imported from an external database. * - *

Java class for importedFromType complex type. + *

+ * Java class for importedFromType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="importedFromType">
@@ -36,36 +38,34 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "importedFromType", propOrder = {
-    "dbReference"
-})
-public class ImportedFromType {
+@XmlType(name = "importedFromType", propOrder = { "dbReference" })
+public class ImportedFromType
+{
 
-    @XmlElement(required = true)
-    protected DbReferenceType dbReference;
+  @XmlElement(required = true)
+  protected DbReferenceType dbReference;
 
-    /**
-     * Gets the value of the dbReference property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link DbReferenceType }
-     *     
-     */
-    public DbReferenceType getDbReference() {
-        return dbReference;
-    }
+  /**
+   * Gets the value of the dbReference property.
+   * 
+   * @return possible object is {@link DbReferenceType }
+   * 
+   */
+  public DbReferenceType getDbReference()
+  {
+    return dbReference;
+  }
 
-    /**
-     * Sets the value of the dbReference property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link DbReferenceType }
-     *     
-     */
-    public void setDbReference(DbReferenceType value) {
-        this.dbReference = value;
-    }
+  /**
+   * Sets the value of the dbReference property.
+   * 
+   * @param value
+   *          allowed object is {@link DbReferenceType }
+   * 
+   */
+  public void setDbReference(DbReferenceType value)
+  {
+    this.dbReference = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/InteractantType.java b/src/jalview/xml/binding/uniprot/InteractantType.java
index c9cadc2..8902f68 100644
--- a/src/jalview/xml/binding/uniprot/InteractantType.java
+++ b/src/jalview/xml/binding/uniprot/InteractantType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -13,11 +12,13 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * 

Java class for interactantType complex type. + *

+ * Java class for interactantType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="interactantType">
@@ -33,87 +34,84 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "interactantType", propOrder = {
-    "id",
-    "label"
-})
-public class InteractantType {
+@XmlType(name = "interactantType", propOrder = { "id", "label" })
+public class InteractantType
+{
+
+  protected String id;
+
+  protected String label;
 
-    protected String id;
-    protected String label;
-    @XmlAttribute(name = "intactId", required = true)
-    protected String intactId;
+  @XmlAttribute(name = "intactId", required = true)
+  protected String intactId;
 
-    /**
-     * Gets the value of the id property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getId() {
-        return id;
-    }
+  /**
+   * Gets the value of the id property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getId()
+  {
+    return id;
+  }
 
-    /**
-     * Sets the value of the id property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setId(String value) {
-        this.id = value;
-    }
+  /**
+   * Sets the value of the id property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setId(String value)
+  {
+    this.id = value;
+  }
 
-    /**
-     * Gets the value of the label property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getLabel() {
-        return label;
-    }
+  /**
+   * Gets the value of the label property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getLabel()
+  {
+    return label;
+  }
 
-    /**
-     * Sets the value of the label property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setLabel(String value) {
-        this.label = value;
-    }
+  /**
+   * Sets the value of the label property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setLabel(String value)
+  {
+    this.label = value;
+  }
 
-    /**
-     * Gets the value of the intactId property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getIntactId() {
-        return intactId;
-    }
+  /**
+   * Gets the value of the intactId property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getIntactId()
+  {
+    return intactId;
+  }
 
-    /**
-     * Sets the value of the intactId property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setIntactId(String value) {
-        this.intactId = value;
-    }
+  /**
+   * Sets the value of the intactId property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setIntactId(String value)
+  {
+    this.intactId = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/IsoformType.java b/src/jalview/xml/binding/uniprot/IsoformType.java
index ea55664..c3f1d0a 100644
--- a/src/jalview/xml/binding/uniprot/IsoformType.java
+++ b/src/jalview/xml/binding/uniprot/IsoformType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.util.ArrayList;
@@ -17,13 +16,15 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
 
-
 /**
  * Describes isoforms in 'alternative products' annotations.
  * 
- * 

Java class for isoformType complex type. + *

+ * Java class for isoformType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="isoformType">
@@ -69,302 +70,316 @@ import javax.xml.bind.annotation.XmlValue;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "isoformType", propOrder = {
-    "id",
-    "name",
-    "sequence",
-    "text"
-})
-public class IsoformType {
+@XmlType(
+  name = "isoformType",
+  propOrder =
+  { "id", "name", "sequence", "text" })
+public class IsoformType
+{
 
-    @XmlElement(required = true)
-    protected List id;
-    @XmlElement(required = true)
-    protected List name;
-    @XmlElement(required = true)
-    protected IsoformType.Sequence sequence;
-    protected List text;
+  @XmlElement(required = true)
+  protected List id;
 
-    /**
-     * Gets the value of the id property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the id property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getId().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getId() { - if (id == null) { - id = new ArrayList(); - } - return this.id; + @XmlElement(required = true) + protected List name; + + @XmlElement(required = true) + protected IsoformType.Sequence sequence; + + protected List text; + + /** + * Gets the value of the id property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the id property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getId().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getId() + { + if (id == null) + { + id = new ArrayList(); } + return this.id; + } - /** - * Gets the value of the name property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the name property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getName().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link IsoformType.Name } - * - * - */ - public List getName() { - if (name == null) { - name = new ArrayList(); - } - return this.name; + /** + * Gets the value of the name property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the name property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link IsoformType.Name } + * + * + */ + public List getName() + { + if (name == null) + { + name = new ArrayList(); + } + return this.name; + } + + /** + * Gets the value of the sequence property. + * + * @return possible object is {@link IsoformType.Sequence } + * + */ + public IsoformType.Sequence getSequence() + { + return sequence; + } + + /** + * Sets the value of the sequence property. + * + * @param value + * allowed object is {@link IsoformType.Sequence } + * + */ + public void setSequence(IsoformType.Sequence value) + { + this.sequence = value; + } + + /** + * Gets the value of the text property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the text property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getText().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getText() + { + if (text == null) + { + text = new ArrayList(); } + return this.text; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <simpleContent>
+   *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
+   *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
+   *     </extension>
+   *   </simpleContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "value" }) + public static class Name + { + + @XmlValue + protected String value; + + @XmlAttribute(name = "evidence") + protected List evidence; /** - * Gets the value of the sequence property. + * Gets the value of the value property. + * + * @return possible object is {@link String } * - * @return - * possible object is - * {@link IsoformType.Sequence } - * */ - public IsoformType.Sequence getSequence() { - return sequence; + public String getValue() + { + return value; } /** - * Sets the value of the sequence property. + * Sets the value of the value property. * * @param value - * allowed object is - * {@link IsoformType.Sequence } - * + * allowed object is {@link String } + * */ - public void setSequence(IsoformType.Sequence value) { - this.sequence = value; + public void setValue(String value) + { + this.value = value; } /** - * Gets the value of the text property. + * Gets the value of the evidence property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the text property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the evidence property. * *

* For example, to add a new item, do as follows: + * *

-     *    getText().add(newItem);
+     * getEvidence().add(newItem);
      * 
* * *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } + * Objects of the following type(s) are allowed in the list {@link Integer } * * */ - public List getText() { - if (text == null) { - text = new ArrayList(); - } - return this.text; + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); + } + return this.evidence; } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <attribute name="type" use="required">
+   *         <simpleType>
+   *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+   *             <enumeration value="not described"/>
+   *             <enumeration value="described"/>
+   *             <enumeration value="displayed"/>
+   *             <enumeration value="external"/>
+   *           </restriction>
+   *         </simpleType>
+   *       </attribute>
+   *       <attribute name="ref" type="{http://www.w3.org/2001/XMLSchema}string" />
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Sequence + { + + @XmlAttribute(name = "type", required = true) + protected String type; + + @XmlAttribute(name = "ref") + protected String ref; /** - *

Java class for anonymous complex type. + * Gets the value of the type property. * - *

The following schema fragment specifies the expected content contained within this class. + * @return possible object is {@link String } * - *

-     * <complexType>
-     *   <simpleContent>
-     *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
-     *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
-     *     </extension>
-     *   </simpleContent>
-     * </complexType>
-     * 
+ */ + public String getType() + { + return type; + } + + /** + * Sets the value of the type property. * + * @param value + * allowed object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "value" - }) - public static class Name { - - @XmlValue - protected String value; - @XmlAttribute(name = "evidence") - protected List evidence; - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getEvidence().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } - + public void setType(String value) + { + this.type = value; } - /** - *

Java class for anonymous complex type. + * Gets the value of the ref property. * - *

The following schema fragment specifies the expected content contained within this class. + * @return possible object is {@link String } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="type" use="required">
-     *         <simpleType>
-     *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
-     *             <enumeration value="not described"/>
-     *             <enumeration value="described"/>
-     *             <enumeration value="displayed"/>
-     *             <enumeration value="external"/>
-     *           </restriction>
-     *         </simpleType>
-     *       </attribute>
-     *       <attribute name="ref" type="{http://www.w3.org/2001/XMLSchema}string" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public String getRef() + { + return ref; + } + + /** + * Sets the value of the ref property. * + * @param value + * allowed object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Sequence { - - @XmlAttribute(name = "type", required = true) - protected String type; - @XmlAttribute(name = "ref") - protected String ref; - - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Gets the value of the ref property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getRef() { - return ref; - } - - /** - * Sets the value of the ref property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setRef(String value) { - this.ref = value; - } - + public void setRef(String value) + { + this.ref = value; } + } + } diff --git a/src/jalview/xml/binding/uniprot/KeywordType.java b/src/jalview/xml/binding/uniprot/KeywordType.java index f6409ee..0c10761 100644 --- a/src/jalview/xml/binding/uniprot/KeywordType.java +++ b/src/jalview/xml/binding/uniprot/KeywordType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -16,11 +15,13 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlValue; - /** - *

Java class for keywordType complex type. + *

+ * Java class for keywordType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="keywordType">
@@ -36,93 +37,94 @@ import javax.xml.bind.annotation.XmlValue;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "keywordType", propOrder = {
-    "value"
-})
-public class KeywordType {
+@XmlType(name = "keywordType", propOrder = { "value" })
+public class KeywordType
+{
 
-    @XmlValue
-    protected String value;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
-    @XmlAttribute(name = "id", required = true)
-    protected String id;
+  @XmlValue
+  protected String value;
 
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getValue() {
-        return value;
-    }
+  @XmlAttribute(name = "evidence")
+  protected List evidence;
 
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
+  @XmlAttribute(name = "id", required = true)
+  protected String id;
 
-    /**
-     * Gets the value of the evidence property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } + /** + * Gets the value of the value property. + * + * @return possible object is {@link String } + * + */ + public String getValue() + { + return value; + } - /** - * Gets the value of the id property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getId() { - return id; - } + /** + * Sets the value of the value property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setValue(String value) + { + this.value = value; + } - /** - * Sets the value of the id property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setId(String value) { - this.id = value; + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } + + /** + * Gets the value of the id property. + * + * @return possible object is {@link String } + * + */ + public String getId() + { + return id; + } + + /** + * Sets the value of the id property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setId(String value) + { + this.id = value; + } } diff --git a/src/jalview/xml/binding/uniprot/LocationType.java b/src/jalview/xml/binding/uniprot/LocationType.java index 62e9999..1aa1925 100644 --- a/src/jalview/xml/binding/uniprot/LocationType.java +++ b/src/jalview/xml/binding/uniprot/LocationType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import javax.xml.bind.annotation.XmlAccessType; @@ -13,13 +12,17 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - * Describes a sequence location as either a range with a begin and end or as a position. The 'sequence' attribute is only used when the location is not on the canonical sequence displayed in the current entry. + * Describes a sequence location as either a range with a begin and end or as a + * position. The 'sequence' attribute is only used when the location is not on + * the canonical sequence displayed in the current entry. * - *

Java class for locationType complex type. + *

+ * Java class for locationType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="locationType">
@@ -41,113 +44,109 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "locationType", propOrder = {
-    "begin",
-    "end",
-    "position"
-})
-public class LocationType {
-
-    protected PositionType begin;
-    protected PositionType end;
-    protected PositionType position;
-    @XmlAttribute(name = "sequence")
-    protected String sequence;
-
-    /**
-     * Gets the value of the begin property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link PositionType }
-     *     
-     */
-    public PositionType getBegin() {
-        return begin;
-    }
-
-    /**
-     * Sets the value of the begin property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link PositionType }
-     *     
-     */
-    public void setBegin(PositionType value) {
-        this.begin = value;
-    }
-
-    /**
-     * Gets the value of the end property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link PositionType }
-     *     
-     */
-    public PositionType getEnd() {
-        return end;
-    }
-
-    /**
-     * Sets the value of the end property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link PositionType }
-     *     
-     */
-    public void setEnd(PositionType value) {
-        this.end = value;
-    }
-
-    /**
-     * Gets the value of the position property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link PositionType }
-     *     
-     */
-    public PositionType getPosition() {
-        return position;
-    }
-
-    /**
-     * Sets the value of the position property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link PositionType }
-     *     
-     */
-    public void setPosition(PositionType value) {
-        this.position = value;
-    }
-
-    /**
-     * Gets the value of the sequence property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getSequence() {
-        return sequence;
-    }
-
-    /**
-     * Sets the value of the sequence property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setSequence(String value) {
-        this.sequence = value;
-    }
+@XmlType(name = "locationType", propOrder = { "begin", "end", "position" })
+public class LocationType
+{
+
+  protected PositionType begin;
+
+  protected PositionType end;
+
+  protected PositionType position;
+
+  @XmlAttribute(name = "sequence")
+  protected String sequence;
+
+  /**
+   * Gets the value of the begin property.
+   * 
+   * @return possible object is {@link PositionType }
+   * 
+   */
+  public PositionType getBegin()
+  {
+    return begin;
+  }
+
+  /**
+   * Sets the value of the begin property.
+   * 
+   * @param value
+   *          allowed object is {@link PositionType }
+   * 
+   */
+  public void setBegin(PositionType value)
+  {
+    this.begin = value;
+  }
+
+  /**
+   * Gets the value of the end property.
+   * 
+   * @return possible object is {@link PositionType }
+   * 
+   */
+  public PositionType getEnd()
+  {
+    return end;
+  }
+
+  /**
+   * Sets the value of the end property.
+   * 
+   * @param value
+   *          allowed object is {@link PositionType }
+   * 
+   */
+  public void setEnd(PositionType value)
+  {
+    this.end = value;
+  }
+
+  /**
+   * Gets the value of the position property.
+   * 
+   * @return possible object is {@link PositionType }
+   * 
+   */
+  public PositionType getPosition()
+  {
+    return position;
+  }
+
+  /**
+   * Sets the value of the position property.
+   * 
+   * @param value
+   *          allowed object is {@link PositionType }
+   * 
+   */
+  public void setPosition(PositionType value)
+  {
+    this.position = value;
+  }
+
+  /**
+   * Gets the value of the sequence property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getSequence()
+  {
+    return sequence;
+  }
+
+  /**
+   * Sets the value of the sequence property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setSequence(String value)
+  {
+    this.sequence = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/MoleculeType.java b/src/jalview/xml/binding/uniprot/MoleculeType.java
index 8b52523..3b6d294 100644
--- a/src/jalview/xml/binding/uniprot/MoleculeType.java
+++ b/src/jalview/xml/binding/uniprot/MoleculeType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -14,13 +13,15 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
 
-
 /**
  * Describes a molecule by name or unique identifier.
  * 
- * 

Java class for moleculeType complex type. + *

+ * Java class for moleculeType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="moleculeType">
@@ -35,62 +36,60 @@ import javax.xml.bind.annotation.XmlValue;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "moleculeType", propOrder = {
-    "value"
-})
-public class MoleculeType {
+@XmlType(name = "moleculeType", propOrder = { "value" })
+public class MoleculeType
+{
+
+  @XmlValue
+  protected String value;
 
-    @XmlValue
-    protected String value;
-    @XmlAttribute(name = "id")
-    protected String id;
+  @XmlAttribute(name = "id")
+  protected String id;
 
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getValue() {
-        return value;
-    }
+  /**
+   * Gets the value of the value property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getValue()
+  {
+    return value;
+  }
 
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
+  /**
+   * Sets the value of the value property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
 
-    /**
-     * Gets the value of the id property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getId() {
-        return id;
-    }
+  /**
+   * Gets the value of the id property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getId()
+  {
+    return id;
+  }
 
-    /**
-     * Sets the value of the id property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setId(String value) {
-        this.id = value;
-    }
+  /**
+   * Sets the value of the id property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setId(String value)
+  {
+    this.id = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/NameListType.java b/src/jalview/xml/binding/uniprot/NameListType.java
index be68867..89496ec 100644
--- a/src/jalview/xml/binding/uniprot/NameListType.java
+++ b/src/jalview/xml/binding/uniprot/NameListType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.util.ArrayList;
@@ -16,11 +15,13 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElements;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * 

Java class for nameListType complex type. + *

+ * Java class for nameListType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="nameListType">
@@ -38,45 +39,45 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "nameListType", propOrder = {
-    "consortiumOrPerson"
-})
-public class NameListType {
+@XmlType(name = "nameListType", propOrder = { "consortiumOrPerson" })
+public class NameListType
+{
 
-    @XmlElements({
-        @XmlElement(name = "consortium", type = ConsortiumType.class),
-        @XmlElement(name = "person", type = PersonType.class)
-    })
-    protected List consortiumOrPerson;
+  @XmlElements({
+      @XmlElement(name = "consortium", type = ConsortiumType.class),
+      @XmlElement(name = "person", type = PersonType.class) })
+  protected List consortiumOrPerson;
 
-    /**
-     * Gets the value of the consortiumOrPerson property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the consortiumOrPerson property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getConsortiumOrPerson().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ConsortiumType } - * {@link PersonType } - * - * - */ - public List getConsortiumOrPerson() { - if (consortiumOrPerson == null) { - consortiumOrPerson = new ArrayList(); - } - return this.consortiumOrPerson; + /** + * Gets the value of the consortiumOrPerson property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the consortiumOrPerson property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getConsortiumOrPerson().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ConsortiumType } {@link PersonType } + * + * + */ + public List getConsortiumOrPerson() + { + if (consortiumOrPerson == null) + { + consortiumOrPerson = new ArrayList(); } + return this.consortiumOrPerson; + } } diff --git a/src/jalview/xml/binding/uniprot/ObjectFactory.java b/src/jalview/xml/binding/uniprot/ObjectFactory.java index e2bb255..07967eb 100644 --- a/src/jalview/xml/binding/uniprot/ObjectFactory.java +++ b/src/jalview/xml/binding/uniprot/ObjectFactory.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import javax.xml.bind.JAXBElement; @@ -13,496 +12,558 @@ import javax.xml.bind.annotation.XmlElementDecl; import javax.xml.bind.annotation.XmlRegistry; import javax.xml.namespace.QName; - /** - * This object contains factory methods for each - * Java content interface and Java element interface - * generated in the jalview.xml.binding.uniprot package. - *

An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. + * This object contains factory methods for each Java content interface and Java + * element interface generated in the jalview.xml.binding.uniprot package. + *

+ * An ObjectFactory allows you to programatically construct new instances of the + * Java representation for XML content. The Java representation of XML content + * can consist of schema derived interfaces and classes representing the binding + * of schema type definitions, element declarations and model groups. Factory + * methods for each of these are provided in this class. * */ @XmlRegistry -public class ObjectFactory { - - private final static QName _Copyright_QNAME = new QName("http://uniprot.org/uniprot", "copyright"); - - /** - * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: jalview.xml.binding.uniprot - * - */ - public ObjectFactory() { - } - - /** - * Create an instance of {@link SourceDataType } - * - */ - public SourceDataType createSourceDataType() { - return new SourceDataType(); - } - - /** - * Create an instance of {@link IsoformType } - * - */ - public IsoformType createIsoformType() { - return new IsoformType(); - } - - /** - * Create an instance of {@link CommentType } - * - */ - public CommentType createCommentType() { - return new CommentType(); - } - - /** - * Create an instance of {@link CommentType.Conflict } - * - */ - public CommentType.Conflict createCommentTypeConflict() { - return new CommentType.Conflict(); - } - - /** - * Create an instance of {@link OrganismType } - * - */ - public OrganismType createOrganismType() { - return new OrganismType(); - } - - /** - * Create an instance of {@link ProteinType } - * - */ - public ProteinType createProteinType() { - return new ProteinType(); - } - - /** - * Create an instance of {@link Entry } - * - */ - public Entry createEntry() { - return new Entry(); - } - - /** - * Create an instance of {@link GeneType } - * - */ - public GeneType createGeneType() { - return new GeneType(); - } - - /** - * Create an instance of {@link GeneLocationType } - * - */ - public GeneLocationType createGeneLocationType() { - return new GeneLocationType(); - } - - /** - * Create an instance of {@link ReferenceType } - * - */ - public ReferenceType createReferenceType() { - return new ReferenceType(); - } - - /** - * Create an instance of {@link DbReferenceType } - * - */ - public DbReferenceType createDbReferenceType() { - return new DbReferenceType(); - } - - /** - * Create an instance of {@link ProteinExistenceType } - * - */ - public ProteinExistenceType createProteinExistenceType() { - return new ProteinExistenceType(); - } - - /** - * Create an instance of {@link KeywordType } - * - */ - public KeywordType createKeywordType() { - return new KeywordType(); - } - - /** - * Create an instance of {@link FeatureType } - * - */ - public FeatureType createFeatureType() { - return new FeatureType(); - } - - /** - * Create an instance of {@link EvidenceType } - * - */ - public EvidenceType createEvidenceType() { - return new EvidenceType(); - } - - /** - * Create an instance of {@link SequenceType } - * - */ - public SequenceType createSequenceType() { - return new SequenceType(); - } - - /** - * Create an instance of {@link Uniprot } - * - */ - public Uniprot createUniprot() { - return new Uniprot(); - } - - /** - * Create an instance of {@link StatusType } - * - */ - public StatusType createStatusType() { - return new StatusType(); - } - - /** - * Create an instance of {@link PositionType } - * - */ - public PositionType createPositionType() { - return new PositionType(); - } - - /** - * Create an instance of {@link ConsortiumType } - * - */ - public ConsortiumType createConsortiumType() { - return new ConsortiumType(); - } - - /** - * Create an instance of {@link GeneNameType } - * - */ - public GeneNameType createGeneNameType() { - return new GeneNameType(); - } - - /** - * Create an instance of {@link LocationType } - * - */ - public LocationType createLocationType() { - return new LocationType(); - } - - /** - * Create an instance of {@link CitationType } - * - */ - public CitationType createCitationType() { - return new CitationType(); - } - - /** - * Create an instance of {@link PropertyType } - * - */ - public PropertyType createPropertyType() { - return new PropertyType(); - } - - /** - * Create an instance of {@link PhysiologicalReactionType } - * - */ - public PhysiologicalReactionType createPhysiologicalReactionType() { - return new PhysiologicalReactionType(); - } - - /** - * Create an instance of {@link CofactorType } - * - */ - public CofactorType createCofactorType() { - return new CofactorType(); - } - - /** - * Create an instance of {@link EvidencedStringType } - * - */ - public EvidencedStringType createEvidencedStringType() { - return new EvidencedStringType(); - } - - /** - * Create an instance of {@link PersonType } - * - */ - public PersonType createPersonType() { - return new PersonType(); - } - - /** - * Create an instance of {@link ImportedFromType } - * - */ - public ImportedFromType createImportedFromType() { - return new ImportedFromType(); - } - - /** - * Create an instance of {@link EventType } - * - */ - public EventType createEventType() { - return new EventType(); - } - - /** - * Create an instance of {@link InteractantType } - * - */ - public InteractantType createInteractantType() { - return new InteractantType(); - } - - /** - * Create an instance of {@link NameListType } - * - */ - public NameListType createNameListType() { - return new NameListType(); - } - - /** - * Create an instance of {@link ReactionType } - * - */ - public ReactionType createReactionType() { - return new ReactionType(); - } - - /** - * Create an instance of {@link SourceType } - * - */ - public SourceType createSourceType() { - return new SourceType(); - } - - /** - * Create an instance of {@link MoleculeType } - * - */ - public MoleculeType createMoleculeType() { - return new MoleculeType(); - } - - /** - * Create an instance of {@link OrganismNameType } - * - */ - public OrganismNameType createOrganismNameType() { - return new OrganismNameType(); - } - - /** - * Create an instance of {@link SubcellularLocationType } - * - */ - public SubcellularLocationType createSubcellularLocationType() { - return new SubcellularLocationType(); - } - - /** - * Create an instance of {@link SourceDataType.Strain } - * - */ - public SourceDataType.Strain createSourceDataTypeStrain() { - return new SourceDataType.Strain(); - } - - /** - * Create an instance of {@link SourceDataType.Plasmid } - * - */ - public SourceDataType.Plasmid createSourceDataTypePlasmid() { - return new SourceDataType.Plasmid(); - } - - /** - * Create an instance of {@link SourceDataType.Transposon } - * - */ - public SourceDataType.Transposon createSourceDataTypeTransposon() { - return new SourceDataType.Transposon(); - } - - /** - * Create an instance of {@link SourceDataType.Tissue } - * - */ - public SourceDataType.Tissue createSourceDataTypeTissue() { - return new SourceDataType.Tissue(); - } - - /** - * Create an instance of {@link IsoformType.Name } - * - */ - public IsoformType.Name createIsoformTypeName() { - return new IsoformType.Name(); - } - - /** - * Create an instance of {@link IsoformType.Sequence } - * - */ - public IsoformType.Sequence createIsoformTypeSequence() { - return new IsoformType.Sequence(); - } - - /** - * Create an instance of {@link CommentType.Absorption } - * - */ - public CommentType.Absorption createCommentTypeAbsorption() { - return new CommentType.Absorption(); - } - - /** - * Create an instance of {@link CommentType.Kinetics } - * - */ - public CommentType.Kinetics createCommentTypeKinetics() { - return new CommentType.Kinetics(); - } - - /** - * Create an instance of {@link CommentType.PhDependence } - * - */ - public CommentType.PhDependence createCommentTypePhDependence() { - return new CommentType.PhDependence(); - } - - /** - * Create an instance of {@link CommentType.RedoxPotential } - * - */ - public CommentType.RedoxPotential createCommentTypeRedoxPotential() { - return new CommentType.RedoxPotential(); - } - - /** - * Create an instance of {@link CommentType.TemperatureDependence } - * - */ - public CommentType.TemperatureDependence createCommentTypeTemperatureDependence() { - return new CommentType.TemperatureDependence(); - } - - /** - * Create an instance of {@link CommentType.Link } - * - */ - public CommentType.Link createCommentTypeLink() { - return new CommentType.Link(); - } - - /** - * Create an instance of {@link CommentType.Disease } - * - */ - public CommentType.Disease createCommentTypeDisease() { - return new CommentType.Disease(); - } - - /** - * Create an instance of {@link CommentType.Conflict.Sequence } - * - */ - public CommentType.Conflict.Sequence createCommentTypeConflictSequence() { - return new CommentType.Conflict.Sequence(); - } - - /** - * Create an instance of {@link OrganismType.Lineage } - * - */ - public OrganismType.Lineage createOrganismTypeLineage() { - return new OrganismType.Lineage(); - } - - /** - * Create an instance of {@link ProteinType.RecommendedName } - * - */ - public ProteinType.RecommendedName createProteinTypeRecommendedName() { - return new ProteinType.RecommendedName(); - } - - /** - * Create an instance of {@link ProteinType.AlternativeName } - * - */ - public ProteinType.AlternativeName createProteinTypeAlternativeName() { - return new ProteinType.AlternativeName(); - } - - /** - * Create an instance of {@link ProteinType.SubmittedName } - * - */ - public ProteinType.SubmittedName createProteinTypeSubmittedName() { - return new ProteinType.SubmittedName(); - } - - /** - * Create an instance of {@link ProteinType.Domain } - * - */ - public ProteinType.Domain createProteinTypeDomain() { - return new ProteinType.Domain(); - } - - /** - * Create an instance of {@link ProteinType.Component } - * - */ - public ProteinType.Component createProteinTypeComponent() { - return new ProteinType.Component(); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - * - */ - @XmlElementDecl(namespace = "http://uniprot.org/uniprot", name = "copyright") - public JAXBElement createCopyright(String value) { - return new JAXBElement(_Copyright_QNAME, String.class, null, value); - } +public class ObjectFactory +{ + + private final static QName _Copyright_QNAME = new QName( + "http://uniprot.org/uniprot", "copyright"); + + /** + * Create a new ObjectFactory that can be used to create new instances of + * schema derived classes for package: jalview.xml.binding.uniprot + * + */ + public ObjectFactory() + { + } + + /** + * Create an instance of {@link SourceDataType } + * + */ + public SourceDataType createSourceDataType() + { + return new SourceDataType(); + } + + /** + * Create an instance of {@link IsoformType } + * + */ + public IsoformType createIsoformType() + { + return new IsoformType(); + } + + /** + * Create an instance of {@link CommentType } + * + */ + public CommentType createCommentType() + { + return new CommentType(); + } + + /** + * Create an instance of {@link CommentType.Conflict } + * + */ + public CommentType.Conflict createCommentTypeConflict() + { + return new CommentType.Conflict(); + } + + /** + * Create an instance of {@link OrganismType } + * + */ + public OrganismType createOrganismType() + { + return new OrganismType(); + } + + /** + * Create an instance of {@link ProteinType } + * + */ + public ProteinType createProteinType() + { + return new ProteinType(); + } + + /** + * Create an instance of {@link Entry } + * + */ + public Entry createEntry() + { + return new Entry(); + } + + /** + * Create an instance of {@link GeneType } + * + */ + public GeneType createGeneType() + { + return new GeneType(); + } + + /** + * Create an instance of {@link GeneLocationType } + * + */ + public GeneLocationType createGeneLocationType() + { + return new GeneLocationType(); + } + + /** + * Create an instance of {@link ReferenceType } + * + */ + public ReferenceType createReferenceType() + { + return new ReferenceType(); + } + + /** + * Create an instance of {@link DbReferenceType } + * + */ + public DbReferenceType createDbReferenceType() + { + return new DbReferenceType(); + } + + /** + * Create an instance of {@link ProteinExistenceType } + * + */ + public ProteinExistenceType createProteinExistenceType() + { + return new ProteinExistenceType(); + } + + /** + * Create an instance of {@link KeywordType } + * + */ + public KeywordType createKeywordType() + { + return new KeywordType(); + } + + /** + * Create an instance of {@link FeatureType } + * + */ + public FeatureType createFeatureType() + { + return new FeatureType(); + } + + /** + * Create an instance of {@link EvidenceType } + * + */ + public EvidenceType createEvidenceType() + { + return new EvidenceType(); + } + + /** + * Create an instance of {@link SequenceType } + * + */ + public SequenceType createSequenceType() + { + return new SequenceType(); + } + + /** + * Create an instance of {@link Uniprot } + * + */ + public Uniprot createUniprot() + { + return new Uniprot(); + } + + /** + * Create an instance of {@link StatusType } + * + */ + public StatusType createStatusType() + { + return new StatusType(); + } + + /** + * Create an instance of {@link PositionType } + * + */ + public PositionType createPositionType() + { + return new PositionType(); + } + + /** + * Create an instance of {@link ConsortiumType } + * + */ + public ConsortiumType createConsortiumType() + { + return new ConsortiumType(); + } + + /** + * Create an instance of {@link GeneNameType } + * + */ + public GeneNameType createGeneNameType() + { + return new GeneNameType(); + } + + /** + * Create an instance of {@link LocationType } + * + */ + public LocationType createLocationType() + { + return new LocationType(); + } + + /** + * Create an instance of {@link CitationType } + * + */ + public CitationType createCitationType() + { + return new CitationType(); + } + + /** + * Create an instance of {@link PropertyType } + * + */ + public PropertyType createPropertyType() + { + return new PropertyType(); + } + + /** + * Create an instance of {@link PhysiologicalReactionType } + * + */ + public PhysiologicalReactionType createPhysiologicalReactionType() + { + return new PhysiologicalReactionType(); + } + + /** + * Create an instance of {@link CofactorType } + * + */ + public CofactorType createCofactorType() + { + return new CofactorType(); + } + + /** + * Create an instance of {@link EvidencedStringType } + * + */ + public EvidencedStringType createEvidencedStringType() + { + return new EvidencedStringType(); + } + + /** + * Create an instance of {@link PersonType } + * + */ + public PersonType createPersonType() + { + return new PersonType(); + } + + /** + * Create an instance of {@link ImportedFromType } + * + */ + public ImportedFromType createImportedFromType() + { + return new ImportedFromType(); + } + + /** + * Create an instance of {@link EventType } + * + */ + public EventType createEventType() + { + return new EventType(); + } + + /** + * Create an instance of {@link InteractantType } + * + */ + public InteractantType createInteractantType() + { + return new InteractantType(); + } + + /** + * Create an instance of {@link NameListType } + * + */ + public NameListType createNameListType() + { + return new NameListType(); + } + + /** + * Create an instance of {@link ReactionType } + * + */ + public ReactionType createReactionType() + { + return new ReactionType(); + } + + /** + * Create an instance of {@link SourceType } + * + */ + public SourceType createSourceType() + { + return new SourceType(); + } + + /** + * Create an instance of {@link MoleculeType } + * + */ + public MoleculeType createMoleculeType() + { + return new MoleculeType(); + } + + /** + * Create an instance of {@link OrganismNameType } + * + */ + public OrganismNameType createOrganismNameType() + { + return new OrganismNameType(); + } + + /** + * Create an instance of {@link SubcellularLocationType } + * + */ + public SubcellularLocationType createSubcellularLocationType() + { + return new SubcellularLocationType(); + } + + /** + * Create an instance of {@link SourceDataType.Strain } + * + */ + public SourceDataType.Strain createSourceDataTypeStrain() + { + return new SourceDataType.Strain(); + } + + /** + * Create an instance of {@link SourceDataType.Plasmid } + * + */ + public SourceDataType.Plasmid createSourceDataTypePlasmid() + { + return new SourceDataType.Plasmid(); + } + + /** + * Create an instance of {@link SourceDataType.Transposon } + * + */ + public SourceDataType.Transposon createSourceDataTypeTransposon() + { + return new SourceDataType.Transposon(); + } + + /** + * Create an instance of {@link SourceDataType.Tissue } + * + */ + public SourceDataType.Tissue createSourceDataTypeTissue() + { + return new SourceDataType.Tissue(); + } + + /** + * Create an instance of {@link IsoformType.Name } + * + */ + public IsoformType.Name createIsoformTypeName() + { + return new IsoformType.Name(); + } + + /** + * Create an instance of {@link IsoformType.Sequence } + * + */ + public IsoformType.Sequence createIsoformTypeSequence() + { + return new IsoformType.Sequence(); + } + + /** + * Create an instance of {@link CommentType.Absorption } + * + */ + public CommentType.Absorption createCommentTypeAbsorption() + { + return new CommentType.Absorption(); + } + + /** + * Create an instance of {@link CommentType.Kinetics } + * + */ + public CommentType.Kinetics createCommentTypeKinetics() + { + return new CommentType.Kinetics(); + } + + /** + * Create an instance of {@link CommentType.PhDependence } + * + */ + public CommentType.PhDependence createCommentTypePhDependence() + { + return new CommentType.PhDependence(); + } + + /** + * Create an instance of {@link CommentType.RedoxPotential } + * + */ + public CommentType.RedoxPotential createCommentTypeRedoxPotential() + { + return new CommentType.RedoxPotential(); + } + + /** + * Create an instance of {@link CommentType.TemperatureDependence } + * + */ + public CommentType.TemperatureDependence createCommentTypeTemperatureDependence() + { + return new CommentType.TemperatureDependence(); + } + + /** + * Create an instance of {@link CommentType.Link } + * + */ + public CommentType.Link createCommentTypeLink() + { + return new CommentType.Link(); + } + + /** + * Create an instance of {@link CommentType.Disease } + * + */ + public CommentType.Disease createCommentTypeDisease() + { + return new CommentType.Disease(); + } + + /** + * Create an instance of {@link CommentType.Conflict.Sequence } + * + */ + public CommentType.Conflict.Sequence createCommentTypeConflictSequence() + { + return new CommentType.Conflict.Sequence(); + } + + /** + * Create an instance of {@link OrganismType.Lineage } + * + */ + public OrganismType.Lineage createOrganismTypeLineage() + { + return new OrganismType.Lineage(); + } + + /** + * Create an instance of {@link ProteinType.RecommendedName } + * + */ + public ProteinType.RecommendedName createProteinTypeRecommendedName() + { + return new ProteinType.RecommendedName(); + } + + /** + * Create an instance of {@link ProteinType.AlternativeName } + * + */ + public ProteinType.AlternativeName createProteinTypeAlternativeName() + { + return new ProteinType.AlternativeName(); + } + + /** + * Create an instance of {@link ProteinType.SubmittedName } + * + */ + public ProteinType.SubmittedName createProteinTypeSubmittedName() + { + return new ProteinType.SubmittedName(); + } + + /** + * Create an instance of {@link ProteinType.Domain } + * + */ + public ProteinType.Domain createProteinTypeDomain() + { + return new ProteinType.Domain(); + } + + /** + * Create an instance of {@link ProteinType.Component } + * + */ + public ProteinType.Component createProteinTypeComponent() + { + return new ProteinType.Component(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link String + * }{@code >}} + * + */ + @XmlElementDecl( + namespace = "http://uniprot.org/uniprot", + name = "copyright") + public JAXBElement createCopyright(String value) + { + return new JAXBElement(_Copyright_QNAME, String.class, null, + value); + } } diff --git a/src/jalview/xml/binding/uniprot/OrganismNameType.java b/src/jalview/xml/binding/uniprot/OrganismNameType.java index bc5c8c5..de03ff2 100644 --- a/src/jalview/xml/binding/uniprot/OrganismNameType.java +++ b/src/jalview/xml/binding/uniprot/OrganismNameType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import javax.xml.bind.annotation.XmlAccessType; @@ -14,13 +13,15 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlValue; - /** * Describes different types of source organism names. * - *

Java class for organismNameType complex type. + *

+ * Java class for organismNameType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="organismNameType">
@@ -45,62 +46,60 @@ import javax.xml.bind.annotation.XmlValue;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "organismNameType", propOrder = {
-    "value"
-})
-public class OrganismNameType {
+@XmlType(name = "organismNameType", propOrder = { "value" })
+public class OrganismNameType
+{
+
+  @XmlValue
+  protected String value;
 
-    @XmlValue
-    protected String value;
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
+  @XmlAttribute(name = "type", required = true)
+  protected String type;
 
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getValue() {
-        return value;
-    }
+  /**
+   * Gets the value of the value property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getValue()
+  {
+    return value;
+  }
 
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
+  /**
+   * Sets the value of the value property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
 
-    /**
-     * Gets the value of the type property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getType() {
-        return type;
-    }
+  /**
+   * Gets the value of the type property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getType()
+  {
+    return type;
+  }
 
-    /**
-     * Sets the value of the type property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setType(String value) {
-        this.type = value;
-    }
+  /**
+   * Sets the value of the type property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setType(String value)
+  {
+    this.type = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/OrganismType.java b/src/jalview/xml/binding/uniprot/OrganismType.java
index bb76add..b053df8 100644
--- a/src/jalview/xml/binding/uniprot/OrganismType.java
+++ b/src/jalview/xml/binding/uniprot/OrganismType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.util.ArrayList;
@@ -16,13 +15,15 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
  * Describes the source organism.
  * 
- * 

Java class for organismType complex type. + *

+ * Java class for organismType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="organismType">
@@ -52,190 +53,203 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "organismType", propOrder = {
-    "name",
-    "dbReference",
-    "lineage"
-})
-public class OrganismType {
-
-    @XmlElement(required = true)
-    protected List name;
-    @XmlElement(required = true)
-    protected List dbReference;
-    protected OrganismType.Lineage lineage;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
-
-    /**
-     * Gets the value of the name property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the name property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getName().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link OrganismNameType } - * - * - */ - public List getName() { - if (name == null) { - name = new ArrayList(); - } - return this.name; +@XmlType( + name = "organismType", + propOrder = + { "name", "dbReference", "lineage" }) +public class OrganismType +{ + + @XmlElement(required = true) + protected List name; + + @XmlElement(required = true) + protected List dbReference; + + protected OrganismType.Lineage lineage; + + @XmlAttribute(name = "evidence") + protected List evidence; + + /** + * Gets the value of the name property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the name property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link OrganismNameType } + * + * + */ + public List getName() + { + if (name == null) + { + name = new ArrayList(); } - - /** - * Gets the value of the dbReference property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the dbReference property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getDbReference().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link DbReferenceType } - * - * - */ - public List getDbReference() { - if (dbReference == null) { - dbReference = new ArrayList(); - } - return this.dbReference; + return this.name; + } + + /** + * Gets the value of the dbReference property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the dbReference property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getDbReference().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link DbReferenceType } + * + * + */ + public List getDbReference() + { + if (dbReference == null) + { + dbReference = new ArrayList(); } - - /** - * Gets the value of the lineage property. - * - * @return - * possible object is - * {@link OrganismType.Lineage } - * - */ - public OrganismType.Lineage getLineage() { - return lineage; + return this.dbReference; + } + + /** + * Gets the value of the lineage property. + * + * @return possible object is {@link OrganismType.Lineage } + * + */ + public OrganismType.Lineage getLineage() + { + return lineage; + } + + /** + * Sets the value of the lineage property. + * + * @param value + * allowed object is {@link OrganismType.Lineage } + * + */ + public void setLineage(OrganismType.Lineage value) + { + this.lineage = value; + } + + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="taxon" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "taxon" }) + public static class Lineage + { - /** - * Sets the value of the lineage property. - * - * @param value - * allowed object is - * {@link OrganismType.Lineage } - * - */ - public void setLineage(OrganismType.Lineage value) { - this.lineage = value; - } + @XmlElement(required = true) + protected List taxon; /** - * Gets the value of the evidence property. + * Gets the value of the taxon property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the taxon property. * *

* For example, to add a new item, do as follows: + * *

-     *    getEvidence().add(newItem);
+     * getTaxon().add(newItem);
      * 
* * *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } + * Objects of the following type(s) are allowed in the list {@link String } * * */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; + public List getTaxon() + { + if (taxon == null) + { + taxon = new ArrayList(); + } + return this.taxon; } - - /** - *

Java class for anonymous complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="taxon" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- * - * - */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "taxon" - }) - public static class Lineage { - - @XmlElement(required = true) - protected List taxon; - - /** - * Gets the value of the taxon property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the taxon property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getTaxon().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getTaxon() { - if (taxon == null) { - taxon = new ArrayList(); - } - return this.taxon; - } - - } + } } diff --git a/src/jalview/xml/binding/uniprot/PersonType.java b/src/jalview/xml/binding/uniprot/PersonType.java index 1354092..0887b7b 100644 --- a/src/jalview/xml/binding/uniprot/PersonType.java +++ b/src/jalview/xml/binding/uniprot/PersonType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import javax.xml.bind.annotation.XmlAccessType; @@ -13,11 +12,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for personType complex type. + *

+ * Java class for personType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="personType">
@@ -33,33 +34,33 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "personType")
-public class PersonType {
+public class PersonType
+{
 
-    @XmlAttribute(name = "name", required = true)
-    protected String name;
+  @XmlAttribute(name = "name", required = true)
+  protected String name;
 
-    /**
-     * Gets the value of the name property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getName() {
-        return name;
-    }
+  /**
+   * Gets the value of the name property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getName()
+  {
+    return name;
+  }
 
-    /**
-     * Sets the value of the name property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setName(String value) {
-        this.name = value;
-    }
+  /**
+   * Sets the value of the name property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setName(String value)
+  {
+    this.name = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/PhysiologicalReactionType.java b/src/jalview/xml/binding/uniprot/PhysiologicalReactionType.java
index e674452..e8cea36 100644
--- a/src/jalview/xml/binding/uniprot/PhysiologicalReactionType.java
+++ b/src/jalview/xml/binding/uniprot/PhysiologicalReactionType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.util.ArrayList;
@@ -16,13 +15,15 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
  * Describes a physiological reaction.
  * 
- * 

Java class for physiologicalReactionType complex type. + *

+ * Java class for physiologicalReactionType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="physiologicalReactionType">
@@ -48,93 +49,94 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "physiologicalReactionType", propOrder = {
-    "dbReference"
-})
-public class PhysiologicalReactionType {
+@XmlType(name = "physiologicalReactionType", propOrder = { "dbReference" })
+public class PhysiologicalReactionType
+{
 
-    @XmlElement(required = true)
-    protected DbReferenceType dbReference;
-    @XmlAttribute(name = "direction", required = true)
-    protected String direction;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
+  @XmlElement(required = true)
+  protected DbReferenceType dbReference;
 
-    /**
-     * Gets the value of the dbReference property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link DbReferenceType }
-     *     
-     */
-    public DbReferenceType getDbReference() {
-        return dbReference;
-    }
+  @XmlAttribute(name = "direction", required = true)
+  protected String direction;
 
-    /**
-     * Sets the value of the dbReference property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link DbReferenceType }
-     *     
-     */
-    public void setDbReference(DbReferenceType value) {
-        this.dbReference = value;
-    }
+  @XmlAttribute(name = "evidence")
+  protected List evidence;
 
-    /**
-     * Gets the value of the direction property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getDirection() {
-        return direction;
-    }
+  /**
+   * Gets the value of the dbReference property.
+   * 
+   * @return possible object is {@link DbReferenceType }
+   * 
+   */
+  public DbReferenceType getDbReference()
+  {
+    return dbReference;
+  }
 
-    /**
-     * Sets the value of the direction property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setDirection(String value) {
-        this.direction = value;
-    }
+  /**
+   * Sets the value of the dbReference property.
+   * 
+   * @param value
+   *          allowed object is {@link DbReferenceType }
+   * 
+   */
+  public void setDbReference(DbReferenceType value)
+  {
+    this.dbReference = value;
+  }
+
+  /**
+   * Gets the value of the direction property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getDirection()
+  {
+    return direction;
+  }
+
+  /**
+   * Sets the value of the direction property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setDirection(String value)
+  {
+    this.direction = value;
+  }
 
-    /**
-     * Gets the value of the evidence property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } } diff --git a/src/jalview/xml/binding/uniprot/PositionType.java b/src/jalview/xml/binding/uniprot/PositionType.java index a00d698..3383f53 100644 --- a/src/jalview/xml/binding/uniprot/PositionType.java +++ b/src/jalview/xml/binding/uniprot/PositionType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.math.BigInteger; @@ -17,11 +16,13 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for positionType complex type. + *

+ * Java class for positionType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="positionType">
@@ -49,95 +50,101 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "positionType")
-public class PositionType {
+public class PositionType
+{
 
-    @XmlAttribute(name = "position")
-    @XmlSchemaType(name = "unsignedLong")
-    protected BigInteger position;
-    @XmlAttribute(name = "status")
-    protected String status;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
+  @XmlAttribute(name = "position")
+  @XmlSchemaType(name = "unsignedLong")
+  protected BigInteger position;
 
-    /**
-     * Gets the value of the position property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link BigInteger }
-     *     
-     */
-    public BigInteger getPosition() {
-        return position;
-    }
+  @XmlAttribute(name = "status")
+  protected String status;
 
-    /**
-     * Sets the value of the position property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link BigInteger }
-     *     
-     */
-    public void setPosition(BigInteger value) {
-        this.position = value;
-    }
+  @XmlAttribute(name = "evidence")
+  protected List evidence;
 
-    /**
-     * Gets the value of the status property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getStatus() {
-        if (status == null) {
-            return "certain";
-        } else {
-            return status;
-        }
-    }
+  /**
+   * Gets the value of the position property.
+   * 
+   * @return possible object is {@link BigInteger }
+   * 
+   */
+  public BigInteger getPosition()
+  {
+    return position;
+  }
+
+  /**
+   * Sets the value of the position property.
+   * 
+   * @param value
+   *          allowed object is {@link BigInteger }
+   * 
+   */
+  public void setPosition(BigInteger value)
+  {
+    this.position = value;
+  }
 
-    /**
-     * Sets the value of the status property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setStatus(String value) {
-        this.status = value;
+  /**
+   * Gets the value of the status property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getStatus()
+  {
+    if (status == null)
+    {
+      return "certain";
     }
+    else
+    {
+      return status;
+    }
+  }
+
+  /**
+   * Sets the value of the status property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setStatus(String value)
+  {
+    this.status = value;
+  }
 
-    /**
-     * Gets the value of the evidence property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } } diff --git a/src/jalview/xml/binding/uniprot/PropertyType.java b/src/jalview/xml/binding/uniprot/PropertyType.java index c9f169c..e651a3b 100644 --- a/src/jalview/xml/binding/uniprot/PropertyType.java +++ b/src/jalview/xml/binding/uniprot/PropertyType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import javax.xml.bind.annotation.XmlAccessType; @@ -13,11 +12,13 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for propertyType complex type. + *

+ * Java class for propertyType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="propertyType">
@@ -34,59 +35,59 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "propertyType")
-public class PropertyType {
+public class PropertyType
+{
+
+  @XmlAttribute(name = "type", required = true)
+  protected String type;
 
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
-    @XmlAttribute(name = "value", required = true)
-    protected String value;
+  @XmlAttribute(name = "value", required = true)
+  protected String value;
 
-    /**
-     * Gets the value of the type property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getType() {
-        return type;
-    }
+  /**
+   * Gets the value of the type property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getType()
+  {
+    return type;
+  }
 
-    /**
-     * Sets the value of the type property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setType(String value) {
-        this.type = value;
-    }
+  /**
+   * Sets the value of the type property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setType(String value)
+  {
+    this.type = value;
+  }
 
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getValue() {
-        return value;
-    }
+  /**
+   * Gets the value of the value property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getValue()
+  {
+    return value;
+  }
 
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
+  /**
+   * Sets the value of the value property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/ProteinExistenceType.java b/src/jalview/xml/binding/uniprot/ProteinExistenceType.java
index c34a0f5..f3d61ee 100644
--- a/src/jalview/xml/binding/uniprot/ProteinExistenceType.java
+++ b/src/jalview/xml/binding/uniprot/ProteinExistenceType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -13,14 +12,16 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * Describes the evidence for the protein's existence.
- *             Equivalent to the flat file PE-line.
+ * Describes the evidence for the protein's existence. Equivalent to the flat
+ * file PE-line.
  * 
- * 

Java class for proteinExistenceType complex type. + *

+ * Java class for proteinExistenceType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="proteinExistenceType">
@@ -46,33 +47,33 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "proteinExistenceType")
-public class ProteinExistenceType {
+public class ProteinExistenceType
+{
 
-    @XmlAttribute(name = "type", required = true)
-    protected String type;
+  @XmlAttribute(name = "type", required = true)
+  protected String type;
 
-    /**
-     * Gets the value of the type property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getType() {
-        return type;
-    }
+  /**
+   * Gets the value of the type property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getType()
+  {
+    return type;
+  }
 
-    /**
-     * Sets the value of the type property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setType(String value) {
-        this.type = value;
-    }
+  /**
+   * Sets the value of the type property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setType(String value)
+  {
+    this.type = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/ProteinType.java b/src/jalview/xml/binding/uniprot/ProteinType.java
index 7b106fb..13fe5aa 100644
--- a/src/jalview/xml/binding/uniprot/ProteinType.java
+++ b/src/jalview/xml/binding/uniprot/ProteinType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.util.ArrayList;
@@ -15,14 +14,16 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * Describes the names for the protein and parts thereof.
- *             Equivalent to the flat file DE-line.
+ * Describes the names for the protein and parts thereof. Equivalent to the flat
+ * file DE-line.
  * 
- * 

Java class for proteinType complex type. + *

+ * Java class for proteinType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="proteinType">
@@ -57,66 +58,497 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "proteinType", propOrder = {
-    "recommendedName",
-    "alternativeName",
-    "submittedName",
-    "allergenName",
-    "biotechName",
-    "cdAntigenName",
-    "innName",
-    "domain",
-    "component"
-})
-public class ProteinType {
+@XmlType(
+  name = "proteinType",
+  propOrder =
+  { "recommendedName", "alternativeName", "submittedName", "allergenName",
+      "biotechName", "cdAntigenName", "innName", "domain", "component" })
+public class ProteinType
+{
+
+  protected ProteinType.RecommendedName recommendedName;
+
+  protected List alternativeName;
+
+  protected List submittedName;
+
+  protected EvidencedStringType allergenName;
+
+  protected EvidencedStringType biotechName;
+
+  protected List cdAntigenName;
+
+  protected List innName;
+
+  protected List domain;
+
+  protected List component;
+
+  /**
+   * Gets the value of the recommendedName property.
+   * 
+   * @return possible object is {@link ProteinType.RecommendedName }
+   * 
+   */
+  public ProteinType.RecommendedName getRecommendedName()
+  {
+    return recommendedName;
+  }
+
+  /**
+   * Sets the value of the recommendedName property.
+   * 
+   * @param value
+   *          allowed object is {@link ProteinType.RecommendedName }
+   * 
+   */
+  public void setRecommendedName(ProteinType.RecommendedName value)
+  {
+    this.recommendedName = value;
+  }
+
+  /**
+   * Gets the value of the alternativeName property.
+   * 
+   * 

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the alternativeName property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getAlternativeName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ProteinType.AlternativeName } + * + * + */ + public List getAlternativeName() + { + if (alternativeName == null) + { + alternativeName = new ArrayList(); + } + return this.alternativeName; + } + + /** + * Gets the value of the submittedName property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the submittedName property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getSubmittedName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ProteinType.SubmittedName } + * + * + */ + public List getSubmittedName() + { + if (submittedName == null) + { + submittedName = new ArrayList(); + } + return this.submittedName; + } + + /** + * Gets the value of the allergenName property. + * + * @return possible object is {@link EvidencedStringType } + * + */ + public EvidencedStringType getAllergenName() + { + return allergenName; + } + + /** + * Sets the value of the allergenName property. + * + * @param value + * allowed object is {@link EvidencedStringType } + * + */ + public void setAllergenName(EvidencedStringType value) + { + this.allergenName = value; + } + + /** + * Gets the value of the biotechName property. + * + * @return possible object is {@link EvidencedStringType } + * + */ + public EvidencedStringType getBiotechName() + { + return biotechName; + } + + /** + * Sets the value of the biotechName property. + * + * @param value + * allowed object is {@link EvidencedStringType } + * + */ + public void setBiotechName(EvidencedStringType value) + { + this.biotechName = value; + } + + /** + * Gets the value of the cdAntigenName property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the cdAntigenName property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getCdAntigenName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getCdAntigenName() + { + if (cdAntigenName == null) + { + cdAntigenName = new ArrayList(); + } + return this.cdAntigenName; + } + + /** + * Gets the value of the innName property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the innName property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getInnName().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getInnName() + { + if (innName == null) + { + innName = new ArrayList(); + } + return this.innName; + } + + /** + * Gets the value of the domain property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the domain property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getDomain().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ProteinType.Domain } + * + * + */ + public List getDomain() + { + if (domain == null) + { + domain = new ArrayList(); + } + return this.domain; + } + + /** + * Gets the value of the component property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the component property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getComponent().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ProteinType.Component } + * + * + */ + public List getComponent() + { + if (component == null) + { + component = new ArrayList(); + } + return this.component; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="fullName" type="{http://uniprot.org/uniprot}evidencedStringType" minOccurs="0"/>
+   *         <element name="shortName" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
+   *         <element name="ecNumber" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "fullName", "shortName", "ecNumber" }) + public static class AlternativeName + { + + protected EvidencedStringType fullName; + + protected List shortName; + + protected List ecNumber; + + /** + * Gets the value of the fullName property. + * + * @return possible object is {@link EvidencedStringType } + * + */ + public EvidencedStringType getFullName() + { + return fullName; + } + + /** + * Sets the value of the fullName property. + * + * @param value + * allowed object is {@link EvidencedStringType } + * + */ + public void setFullName(EvidencedStringType value) + { + this.fullName = value; + } + + /** + * Gets the value of the shortName property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the shortName property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getShortName().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getShortName() + { + if (shortName == null) + { + shortName = new ArrayList(); + } + return this.shortName; + } + + /** + * Gets the value of the ecNumber property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the ecNumber property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getEcNumber().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getEcNumber() + { + if (ecNumber == null) + { + ecNumber = new ArrayList(); + } + return this.ecNumber; + } + + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <group ref="{http://uniprot.org/uniprot}proteinNameGroup"/>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType( + name = "", + propOrder = + { "recommendedName", "alternativeName", "submittedName", "allergenName", + "biotechName", "cdAntigenName", "innName" }) + public static class Component + { protected ProteinType.RecommendedName recommendedName; + protected List alternativeName; + protected List submittedName; + protected EvidencedStringType allergenName; + protected EvidencedStringType biotechName; + protected List cdAntigenName; + protected List innName; - protected List domain; - protected List component; /** * Gets the value of the recommendedName property. * - * @return - * possible object is - * {@link ProteinType.RecommendedName } - * + * @return possible object is {@link ProteinType.RecommendedName } + * */ - public ProteinType.RecommendedName getRecommendedName() { - return recommendedName; + public ProteinType.RecommendedName getRecommendedName() + { + return recommendedName; } /** * Sets the value of the recommendedName property. * * @param value - * allowed object is - * {@link ProteinType.RecommendedName } - * + * allowed object is {@link ProteinType.RecommendedName } + * */ - public void setRecommendedName(ProteinType.RecommendedName value) { - this.recommendedName = value; + public void setRecommendedName(ProteinType.RecommendedName value) + { + this.recommendedName = value; } /** * Gets the value of the alternativeName property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the alternativeName property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the alternativeName property. * *

* For example, to add a new item, do as follows: + * *

-     *    getAlternativeName().add(newItem);
+     * getAlternativeName().add(newItem);
      * 
* * @@ -126,26 +558,29 @@ public class ProteinType { * * */ - public List getAlternativeName() { - if (alternativeName == null) { - alternativeName = new ArrayList(); - } - return this.alternativeName; + public List getAlternativeName() + { + if (alternativeName == null) + { + alternativeName = new ArrayList(); + } + return this.alternativeName; } /** * Gets the value of the submittedName property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the submittedName property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the submittedName property. * *

* For example, to add a new item, do as follows: + * *

-     *    getSubmittedName().add(newItem);
+     * getSubmittedName().add(newItem);
      * 
* * @@ -155,74 +590,75 @@ public class ProteinType { * * */ - public List getSubmittedName() { - if (submittedName == null) { - submittedName = new ArrayList(); - } - return this.submittedName; + public List getSubmittedName() + { + if (submittedName == null) + { + submittedName = new ArrayList(); + } + return this.submittedName; } /** * Gets the value of the allergenName property. * - * @return - * possible object is - * {@link EvidencedStringType } - * + * @return possible object is {@link EvidencedStringType } + * */ - public EvidencedStringType getAllergenName() { - return allergenName; + public EvidencedStringType getAllergenName() + { + return allergenName; } /** * Sets the value of the allergenName property. * * @param value - * allowed object is - * {@link EvidencedStringType } - * + * allowed object is {@link EvidencedStringType } + * */ - public void setAllergenName(EvidencedStringType value) { - this.allergenName = value; + public void setAllergenName(EvidencedStringType value) + { + this.allergenName = value; } /** * Gets the value of the biotechName property. * - * @return - * possible object is - * {@link EvidencedStringType } - * + * @return possible object is {@link EvidencedStringType } + * */ - public EvidencedStringType getBiotechName() { - return biotechName; + public EvidencedStringType getBiotechName() + { + return biotechName; } /** * Sets the value of the biotechName property. * * @param value - * allowed object is - * {@link EvidencedStringType } - * + * allowed object is {@link EvidencedStringType } + * */ - public void setBiotechName(EvidencedStringType value) { - this.biotechName = value; + public void setBiotechName(EvidencedStringType value) + { + this.biotechName = value; } /** * Gets the value of the cdAntigenName property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the cdAntigenName property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the cdAntigenName property. * *

* For example, to add a new item, do as follows: + * *

-     *    getCdAntigenName().add(newItem);
+     * getCdAntigenName().add(newItem);
      * 
* * @@ -232,26 +668,29 @@ public class ProteinType { * * */ - public List getCdAntigenName() { - if (cdAntigenName == null) { - cdAntigenName = new ArrayList(); - } - return this.cdAntigenName; + public List getCdAntigenName() + { + if (cdAntigenName == null) + { + cdAntigenName = new ArrayList(); + } + return this.cdAntigenName; } /** * Gets the value of the innName property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the innName property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the innName property. * *

* For example, to add a new item, do as follows: + * *

-     *    getInnName().add(newItem);
+     * getInnName().add(newItem);
      * 
* * @@ -261,849 +700,472 @@ public class ProteinType { * * */ - public List getInnName() { - if (innName == null) { - innName = new ArrayList(); - } - return this.innName; + public List getInnName() + { + if (innName == null) + { + innName = new ArrayList(); + } + return this.innName; + } + + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <group ref="{http://uniprot.org/uniprot}proteinNameGroup"/>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType( + name = "", + propOrder = + { "recommendedName", "alternativeName", "submittedName", "allergenName", + "biotechName", "cdAntigenName", "innName" }) + public static class Domain + { + + protected ProteinType.RecommendedName recommendedName; + + protected List alternativeName; + + protected List submittedName; + + protected EvidencedStringType allergenName; + + protected EvidencedStringType biotechName; + + protected List cdAntigenName; + + protected List innName; + + /** + * Gets the value of the recommendedName property. + * + * @return possible object is {@link ProteinType.RecommendedName } + * + */ + public ProteinType.RecommendedName getRecommendedName() + { + return recommendedName; } /** - * Gets the value of the domain property. + * Sets the value of the recommendedName property. + * + * @param value + * allowed object is {@link ProteinType.RecommendedName } + * + */ + public void setRecommendedName(ProteinType.RecommendedName value) + { + this.recommendedName = value; + } + + /** + * Gets the value of the alternativeName property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the domain property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the alternativeName property. * *

* For example, to add a new item, do as follows: + * *

-     *    getDomain().add(newItem);
+     * getAlternativeName().add(newItem);
      * 
* * *

* Objects of the following type(s) are allowed in the list - * {@link ProteinType.Domain } + * {@link ProteinType.AlternativeName } * * */ - public List getDomain() { - if (domain == null) { - domain = new ArrayList(); - } - return this.domain; + public List getAlternativeName() + { + if (alternativeName == null) + { + alternativeName = new ArrayList(); + } + return this.alternativeName; } /** - * Gets the value of the component property. + * Gets the value of the submittedName property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the component property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the submittedName property. * *

* For example, to add a new item, do as follows: + * *

-     *    getComponent().add(newItem);
+     * getSubmittedName().add(newItem);
      * 
* * *

* Objects of the following type(s) are allowed in the list - * {@link ProteinType.Component } + * {@link ProteinType.SubmittedName } * * */ - public List getComponent() { - if (component == null) { - component = new ArrayList(); - } - return this.component; + public List getSubmittedName() + { + if (submittedName == null) + { + submittedName = new ArrayList(); + } + return this.submittedName; } + /** + * Gets the value of the allergenName property. + * + * @return possible object is {@link EvidencedStringType } + * + */ + public EvidencedStringType getAllergenName() + { + return allergenName; + } /** - *

Java class for anonymous complex type. + * Sets the value of the allergenName property. * - *

The following schema fragment specifies the expected content contained within this class. + * @param value + * allowed object is {@link EvidencedStringType } * - *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="fullName" type="{http://uniprot.org/uniprot}evidencedStringType" minOccurs="0"/>
-     *         <element name="shortName" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
-     *         <element name="ecNumber" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
+ */ + public void setAllergenName(EvidencedStringType value) + { + this.allergenName = value; + } + + /** + * Gets the value of the biotechName property. * + * @return possible object is {@link EvidencedStringType } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "fullName", - "shortName", - "ecNumber" - }) - public static class AlternativeName { - - protected EvidencedStringType fullName; - protected List shortName; - protected List ecNumber; - - /** - * Gets the value of the fullName property. - * - * @return - * possible object is - * {@link EvidencedStringType } - * - */ - public EvidencedStringType getFullName() { - return fullName; - } - - /** - * Sets the value of the fullName property. - * - * @param value - * allowed object is - * {@link EvidencedStringType } - * - */ - public void setFullName(EvidencedStringType value) { - this.fullName = value; - } - - /** - * Gets the value of the shortName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the shortName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getShortName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getShortName() { - if (shortName == null) { - shortName = new ArrayList(); - } - return this.shortName; - } - - /** - * Gets the value of the ecNumber property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the ecNumber property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getEcNumber().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getEcNumber() { - if (ecNumber == null) { - ecNumber = new ArrayList(); - } - return this.ecNumber; - } + public EvidencedStringType getBiotechName() + { + return biotechName; + } + /** + * Sets the value of the biotechName property. + * + * @param value + * allowed object is {@link EvidencedStringType } + * + */ + public void setBiotechName(EvidencedStringType value) + { + this.biotechName = value; } + /** + * Gets the value of the cdAntigenName property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the cdAntigenName property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+     * getCdAntigenName().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getCdAntigenName() + { + if (cdAntigenName == null) + { + cdAntigenName = new ArrayList(); + } + return this.cdAntigenName; + } /** - *

Java class for anonymous complex type. + * Gets the value of the innName property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the innName property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <group ref="{http://uniprot.org/uniprot}proteinNameGroup"/>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getInnName().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "recommendedName", - "alternativeName", - "submittedName", - "allergenName", - "biotechName", - "cdAntigenName", - "innName" - }) - public static class Component { - - protected ProteinType.RecommendedName recommendedName; - protected List alternativeName; - protected List submittedName; - protected EvidencedStringType allergenName; - protected EvidencedStringType biotechName; - protected List cdAntigenName; - protected List innName; - - /** - * Gets the value of the recommendedName property. - * - * @return - * possible object is - * {@link ProteinType.RecommendedName } - * - */ - public ProteinType.RecommendedName getRecommendedName() { - return recommendedName; - } - - /** - * Sets the value of the recommendedName property. - * - * @param value - * allowed object is - * {@link ProteinType.RecommendedName } - * - */ - public void setRecommendedName(ProteinType.RecommendedName value) { - this.recommendedName = value; - } - - /** - * Gets the value of the alternativeName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the alternativeName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getAlternativeName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ProteinType.AlternativeName } - * - * - */ - public List getAlternativeName() { - if (alternativeName == null) { - alternativeName = new ArrayList(); - } - return this.alternativeName; - } - - /** - * Gets the value of the submittedName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the submittedName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getSubmittedName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ProteinType.SubmittedName } - * - * - */ - public List getSubmittedName() { - if (submittedName == null) { - submittedName = new ArrayList(); - } - return this.submittedName; - } - - /** - * Gets the value of the allergenName property. - * - * @return - * possible object is - * {@link EvidencedStringType } - * - */ - public EvidencedStringType getAllergenName() { - return allergenName; - } - - /** - * Sets the value of the allergenName property. - * - * @param value - * allowed object is - * {@link EvidencedStringType } - * - */ - public void setAllergenName(EvidencedStringType value) { - this.allergenName = value; - } - - /** - * Gets the value of the biotechName property. - * - * @return - * possible object is - * {@link EvidencedStringType } - * - */ - public EvidencedStringType getBiotechName() { - return biotechName; - } - - /** - * Sets the value of the biotechName property. - * - * @param value - * allowed object is - * {@link EvidencedStringType } - * - */ - public void setBiotechName(EvidencedStringType value) { - this.biotechName = value; - } - - /** - * Gets the value of the cdAntigenName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the cdAntigenName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getCdAntigenName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getCdAntigenName() { - if (cdAntigenName == null) { - cdAntigenName = new ArrayList(); - } - return this.cdAntigenName; - } - - /** - * Gets the value of the innName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the innName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getInnName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getInnName() { - if (innName == null) { - innName = new ArrayList(); - } - return this.innName; - } + public List getInnName() + { + if (innName == null) + { + innName = new ArrayList(); + } + return this.innName; + } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="fullName" type="{http://uniprot.org/uniprot}evidencedStringType"/>
+   *         <element name="shortName" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
+   *         <element name="ecNumber" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "fullName", "shortName", "ecNumber" }) + public static class RecommendedName + { + + @XmlElement(required = true) + protected EvidencedStringType fullName; + + protected List shortName; + + protected List ecNumber; + + /** + * Gets the value of the fullName property. + * + * @return possible object is {@link EvidencedStringType } + * + */ + public EvidencedStringType getFullName() + { + return fullName; } + /** + * Sets the value of the fullName property. + * + * @param value + * allowed object is {@link EvidencedStringType } + * + */ + public void setFullName(EvidencedStringType value) + { + this.fullName = value; + } /** - *

Java class for anonymous complex type. + * Gets the value of the shortName property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the shortName property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <group ref="{http://uniprot.org/uniprot}proteinNameGroup"/>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getShortName().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "recommendedName", - "alternativeName", - "submittedName", - "allergenName", - "biotechName", - "cdAntigenName", - "innName" - }) - public static class Domain { - - protected ProteinType.RecommendedName recommendedName; - protected List alternativeName; - protected List submittedName; - protected EvidencedStringType allergenName; - protected EvidencedStringType biotechName; - protected List cdAntigenName; - protected List innName; - - /** - * Gets the value of the recommendedName property. - * - * @return - * possible object is - * {@link ProteinType.RecommendedName } - * - */ - public ProteinType.RecommendedName getRecommendedName() { - return recommendedName; - } - - /** - * Sets the value of the recommendedName property. - * - * @param value - * allowed object is - * {@link ProteinType.RecommendedName } - * - */ - public void setRecommendedName(ProteinType.RecommendedName value) { - this.recommendedName = value; - } - - /** - * Gets the value of the alternativeName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the alternativeName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getAlternativeName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ProteinType.AlternativeName } - * - * - */ - public List getAlternativeName() { - if (alternativeName == null) { - alternativeName = new ArrayList(); - } - return this.alternativeName; - } - - /** - * Gets the value of the submittedName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the submittedName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getSubmittedName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ProteinType.SubmittedName } - * - * - */ - public List getSubmittedName() { - if (submittedName == null) { - submittedName = new ArrayList(); - } - return this.submittedName; - } - - /** - * Gets the value of the allergenName property. - * - * @return - * possible object is - * {@link EvidencedStringType } - * - */ - public EvidencedStringType getAllergenName() { - return allergenName; - } - - /** - * Sets the value of the allergenName property. - * - * @param value - * allowed object is - * {@link EvidencedStringType } - * - */ - public void setAllergenName(EvidencedStringType value) { - this.allergenName = value; - } - - /** - * Gets the value of the biotechName property. - * - * @return - * possible object is - * {@link EvidencedStringType } - * - */ - public EvidencedStringType getBiotechName() { - return biotechName; - } - - /** - * Sets the value of the biotechName property. - * - * @param value - * allowed object is - * {@link EvidencedStringType } - * - */ - public void setBiotechName(EvidencedStringType value) { - this.biotechName = value; - } - - /** - * Gets the value of the cdAntigenName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the cdAntigenName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getCdAntigenName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getCdAntigenName() { - if (cdAntigenName == null) { - cdAntigenName = new ArrayList(); - } - return this.cdAntigenName; - } - - /** - * Gets the value of the innName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the innName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getInnName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getInnName() { - if (innName == null) { - innName = new ArrayList(); - } - return this.innName; - } - + public List getShortName() + { + if (shortName == null) + { + shortName = new ArrayList(); + } + return this.shortName; } - /** - *

Java class for anonymous complex type. + * Gets the value of the ecNumber property. + * + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the ecNumber property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="fullName" type="{http://uniprot.org/uniprot}evidencedStringType"/>
-     *         <element name="shortName" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
-     *         <element name="ecNumber" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getEcNumber().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "fullName", - "shortName", - "ecNumber" - }) - public static class RecommendedName { - - @XmlElement(required = true) - protected EvidencedStringType fullName; - protected List shortName; - protected List ecNumber; - - /** - * Gets the value of the fullName property. - * - * @return - * possible object is - * {@link EvidencedStringType } - * - */ - public EvidencedStringType getFullName() { - return fullName; - } - - /** - * Sets the value of the fullName property. - * - * @param value - * allowed object is - * {@link EvidencedStringType } - * - */ - public void setFullName(EvidencedStringType value) { - this.fullName = value; - } - - /** - * Gets the value of the shortName property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the shortName property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getShortName().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getShortName() { - if (shortName == null) { - shortName = new ArrayList(); - } - return this.shortName; - } - - /** - * Gets the value of the ecNumber property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the ecNumber property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getEcNumber().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getEcNumber() { - if (ecNumber == null) { - ecNumber = new ArrayList(); - } - return this.ecNumber; - } + public List getEcNumber() + { + if (ecNumber == null) + { + ecNumber = new ArrayList(); + } + return this.ecNumber; + } + + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <complexContent>
+   *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+   *       <sequence>
+   *         <element name="fullName" type="{http://uniprot.org/uniprot}evidencedStringType"/>
+   *         <element name="ecNumber" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
+   *       </sequence>
+   *     </restriction>
+   *   </complexContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "fullName", "ecNumber" }) + public static class SubmittedName + { + + @XmlElement(required = true) + protected EvidencedStringType fullName; + + protected List ecNumber; + /** + * Gets the value of the fullName property. + * + * @return possible object is {@link EvidencedStringType } + * + */ + public EvidencedStringType getFullName() + { + return fullName; } + /** + * Sets the value of the fullName property. + * + * @param value + * allowed object is {@link EvidencedStringType } + * + */ + public void setFullName(EvidencedStringType value) + { + this.fullName = value; + } /** - *

Java class for anonymous complex type. + * Gets the value of the ecNumber property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the ecNumber property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="fullName" type="{http://uniprot.org/uniprot}evidencedStringType"/>
-     *         <element name="ecNumber" type="{http://uniprot.org/uniprot}evidencedStringType" maxOccurs="unbounded" minOccurs="0"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
+     * getEcNumber().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "fullName", - "ecNumber" - }) - public static class SubmittedName { - - @XmlElement(required = true) - protected EvidencedStringType fullName; - protected List ecNumber; - - /** - * Gets the value of the fullName property. - * - * @return - * possible object is - * {@link EvidencedStringType } - * - */ - public EvidencedStringType getFullName() { - return fullName; - } - - /** - * Sets the value of the fullName property. - * - * @param value - * allowed object is - * {@link EvidencedStringType } - * - */ - public void setFullName(EvidencedStringType value) { - this.fullName = value; - } - - /** - * Gets the value of the ecNumber property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the ecNumber property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getEcNumber().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getEcNumber() { - if (ecNumber == null) { - ecNumber = new ArrayList(); - } - return this.ecNumber; - } - + public List getEcNumber() + { + if (ecNumber == null) + { + ecNumber = new ArrayList(); + } + return this.ecNumber; } + } + } diff --git a/src/jalview/xml/binding/uniprot/ReactionType.java b/src/jalview/xml/binding/uniprot/ReactionType.java index 8d9d51d..9fbb9da 100644 --- a/src/jalview/xml/binding/uniprot/ReactionType.java +++ b/src/jalview/xml/binding/uniprot/ReactionType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -16,13 +15,15 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** * Describes a chemical reaction. * - *

Java class for reactionType complex type. + *

+ * Java class for reactionType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="reactionType">
@@ -41,99 +42,103 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "reactionType", propOrder = {
-    "text",
-    "dbReference"
-})
-public class ReactionType {
+@XmlType(name = "reactionType", propOrder = { "text", "dbReference" })
+public class ReactionType
+{
 
-    @XmlElement(required = true)
-    protected String text;
-    @XmlElement(required = true)
-    protected List dbReference;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
+  @XmlElement(required = true)
+  protected String text;
 
-    /**
-     * Gets the value of the text property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getText() {
-        return text;
-    }
+  @XmlElement(required = true)
+  protected List dbReference;
 
-    /**
-     * Sets the value of the text property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setText(String value) {
-        this.text = value;
-    }
+  @XmlAttribute(name = "evidence")
+  protected List evidence;
+
+  /**
+   * Gets the value of the text property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getText()
+  {
+    return text;
+  }
+
+  /**
+   * Sets the value of the text property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setText(String value)
+  {
+    this.text = value;
+  }
 
-    /**
-     * Gets the value of the dbReference property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the dbReference property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getDbReference().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link DbReferenceType } - * - * - */ - public List getDbReference() { - if (dbReference == null) { - dbReference = new ArrayList(); - } - return this.dbReference; + /** + * Gets the value of the dbReference property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the dbReference property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getDbReference().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link DbReferenceType } + * + * + */ + public List getDbReference() + { + if (dbReference == null) + { + dbReference = new ArrayList(); } + return this.dbReference; + } - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } } diff --git a/src/jalview/xml/binding/uniprot/ReferenceType.java b/src/jalview/xml/binding/uniprot/ReferenceType.java index e5f9fde..d1562a1 100644 --- a/src/jalview/xml/binding/uniprot/ReferenceType.java +++ b/src/jalview/xml/binding/uniprot/ReferenceType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -16,14 +15,16 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; - /** - * Describes a citation and a summary of its content. - * Equivalent to the flat file RN-, RP-, RC-, RX-, RG-, RA-, RT- and RL-lines. + * Describes a citation and a summary of its content. Equivalent to the flat + * file RN-, RP-, RC-, RX-, RG-, RA-, RT- and RL-lines. * - *

Java class for referenceType complex type. + *

+ * Java class for referenceType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="referenceType">
@@ -43,151 +44,156 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "referenceType", propOrder = {
-    "citation",
-    "scope",
-    "source"
-})
-public class ReferenceType {
-
-    @XmlElement(required = true)
-    protected CitationType citation;
-    @XmlElement(required = true)
-    protected List scope;
-    protected SourceDataType source;
-    @XmlAttribute(name = "evidence")
-    protected List evidence;
-    @XmlAttribute(name = "key", required = true)
-    protected String key;
-
-    /**
-     * Gets the value of the citation property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link CitationType }
-     *     
-     */
-    public CitationType getCitation() {
-        return citation;
-    }
+@XmlType(
+  name = "referenceType",
+  propOrder =
+  { "citation", "scope", "source" })
+public class ReferenceType
+{
 
-    /**
-     * Sets the value of the citation property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link CitationType }
-     *     
-     */
-    public void setCitation(CitationType value) {
-        this.citation = value;
-    }
+  @XmlElement(required = true)
+  protected CitationType citation;
 
-    /**
-     * Gets the value of the scope property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the scope property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getScope().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getScope() { - if (scope == null) { - scope = new ArrayList(); - } - return this.scope; - } + @XmlElement(required = true) + protected List scope; - /** - * Gets the value of the source property. - * - * @return - * possible object is - * {@link SourceDataType } - * - */ - public SourceDataType getSource() { - return source; - } + protected SourceDataType source; - /** - * Sets the value of the source property. - * - * @param value - * allowed object is - * {@link SourceDataType } - * - */ - public void setSource(SourceDataType value) { - this.source = value; - } + @XmlAttribute(name = "evidence") + protected List evidence; - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEvidence().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } + @XmlAttribute(name = "key", required = true) + protected String key; + + /** + * Gets the value of the citation property. + * + * @return possible object is {@link CitationType } + * + */ + public CitationType getCitation() + { + return citation; + } - /** - * Gets the value of the key property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getKey() { - return key; + /** + * Sets the value of the citation property. + * + * @param value + * allowed object is {@link CitationType } + * + */ + public void setCitation(CitationType value) + { + this.citation = value; + } + + /** + * Gets the value of the scope property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the scope property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getScope().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link String } + * + * + */ + public List getScope() + { + if (scope == null) + { + scope = new ArrayList(); } + return this.scope; + } + + /** + * Gets the value of the source property. + * + * @return possible object is {@link SourceDataType } + * + */ + public SourceDataType getSource() + { + return source; + } - /** - * Sets the value of the key property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setKey(String value) { - this.key = value; + /** + * Sets the value of the source property. + * + * @param value + * allowed object is {@link SourceDataType } + * + */ + public void setSource(SourceDataType value) + { + this.source = value; + } + + /** + * Gets the value of the evidence property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the evidence property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEvidence().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * + */ + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); } + return this.evidence; + } + + /** + * Gets the value of the key property. + * + * @return possible object is {@link String } + * + */ + public String getKey() + { + return key; + } + + /** + * Sets the value of the key property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setKey(String value) + { + this.key = value; + } } diff --git a/src/jalview/xml/binding/uniprot/SequenceType.java b/src/jalview/xml/binding/uniprot/SequenceType.java index 49cd130..f9b4daa 100644 --- a/src/jalview/xml/binding/uniprot/SequenceType.java +++ b/src/jalview/xml/binding/uniprot/SequenceType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import javax.xml.bind.annotation.XmlAccessType; @@ -16,11 +15,13 @@ import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlValue; import javax.xml.datatype.XMLGregorianCalendar; - /** - *

Java class for sequenceType complex type. + *

+ * Java class for sequenceType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="sequenceType">
@@ -48,195 +49,202 @@ import javax.xml.datatype.XMLGregorianCalendar;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "sequenceType", propOrder = {
-    "value"
-})
-public class SequenceType {
-
-    @XmlValue
-    protected String value;
-    @XmlAttribute(name = "length", required = true)
-    protected int length;
-    @XmlAttribute(name = "mass", required = true)
-    protected int mass;
-    @XmlAttribute(name = "checksum", required = true)
-    protected String checksum;
-    @XmlAttribute(name = "modified", required = true)
-    @XmlSchemaType(name = "date")
-    protected XMLGregorianCalendar modified;
-    @XmlAttribute(name = "version", required = true)
-    protected int version;
-    @XmlAttribute(name = "precursor")
-    protected Boolean precursor;
-    @XmlAttribute(name = "fragment")
-    protected String fragment;
-
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * Gets the value of the length property.
-     * 
-     */
-    public int getLength() {
-        return length;
-    }
-
-    /**
-     * Sets the value of the length property.
-     * 
-     */
-    public void setLength(int value) {
-        this.length = value;
-    }
-
-    /**
-     * Gets the value of the mass property.
-     * 
-     */
-    public int getMass() {
-        return mass;
-    }
-
-    /**
-     * Sets the value of the mass property.
-     * 
-     */
-    public void setMass(int value) {
-        this.mass = value;
-    }
-
-    /**
-     * Gets the value of the checksum property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getChecksum() {
-        return checksum;
-    }
-
-    /**
-     * Sets the value of the checksum property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setChecksum(String value) {
-        this.checksum = value;
-    }
-
-    /**
-     * Gets the value of the modified property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link XMLGregorianCalendar }
-     *     
-     */
-    public XMLGregorianCalendar getModified() {
-        return modified;
-    }
-
-    /**
-     * Sets the value of the modified property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link XMLGregorianCalendar }
-     *     
-     */
-    public void setModified(XMLGregorianCalendar value) {
-        this.modified = value;
-    }
-
-    /**
-     * Gets the value of the version property.
-     * 
-     */
-    public int getVersion() {
-        return version;
-    }
-
-    /**
-     * Sets the value of the version property.
-     * 
-     */
-    public void setVersion(int value) {
-        this.version = value;
-    }
-
-    /**
-     * Gets the value of the precursor property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Boolean }
-     *     
-     */
-    public Boolean isPrecursor() {
-        return precursor;
-    }
-
-    /**
-     * Sets the value of the precursor property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Boolean }
-     *     
-     */
-    public void setPrecursor(Boolean value) {
-        this.precursor = value;
-    }
-
-    /**
-     * Gets the value of the fragment property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getFragment() {
-        return fragment;
-    }
-
-    /**
-     * Sets the value of the fragment property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setFragment(String value) {
-        this.fragment = value;
-    }
+@XmlType(name = "sequenceType", propOrder = { "value" })
+public class SequenceType
+{
+
+  @XmlValue
+  protected String value;
+
+  @XmlAttribute(name = "length", required = true)
+  protected int length;
+
+  @XmlAttribute(name = "mass", required = true)
+  protected int mass;
+
+  @XmlAttribute(name = "checksum", required = true)
+  protected String checksum;
+
+  @XmlAttribute(name = "modified", required = true)
+  @XmlSchemaType(name = "date")
+  protected XMLGregorianCalendar modified;
+
+  @XmlAttribute(name = "version", required = true)
+  protected int version;
+
+  @XmlAttribute(name = "precursor")
+  protected Boolean precursor;
+
+  @XmlAttribute(name = "fragment")
+  protected String fragment;
+
+  /**
+   * Gets the value of the value property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getValue()
+  {
+    return value;
+  }
+
+  /**
+   * Sets the value of the value property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
+
+  /**
+   * Gets the value of the length property.
+   * 
+   */
+  public int getLength()
+  {
+    return length;
+  }
+
+  /**
+   * Sets the value of the length property.
+   * 
+   */
+  public void setLength(int value)
+  {
+    this.length = value;
+  }
+
+  /**
+   * Gets the value of the mass property.
+   * 
+   */
+  public int getMass()
+  {
+    return mass;
+  }
+
+  /**
+   * Sets the value of the mass property.
+   * 
+   */
+  public void setMass(int value)
+  {
+    this.mass = value;
+  }
+
+  /**
+   * Gets the value of the checksum property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getChecksum()
+  {
+    return checksum;
+  }
+
+  /**
+   * Sets the value of the checksum property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setChecksum(String value)
+  {
+    this.checksum = value;
+  }
+
+  /**
+   * Gets the value of the modified property.
+   * 
+   * @return possible object is {@link XMLGregorianCalendar }
+   * 
+   */
+  public XMLGregorianCalendar getModified()
+  {
+    return modified;
+  }
+
+  /**
+   * Sets the value of the modified property.
+   * 
+   * @param value
+   *          allowed object is {@link XMLGregorianCalendar }
+   * 
+   */
+  public void setModified(XMLGregorianCalendar value)
+  {
+    this.modified = value;
+  }
+
+  /**
+   * Gets the value of the version property.
+   * 
+   */
+  public int getVersion()
+  {
+    return version;
+  }
+
+  /**
+   * Sets the value of the version property.
+   * 
+   */
+  public void setVersion(int value)
+  {
+    this.version = value;
+  }
+
+  /**
+   * Gets the value of the precursor property.
+   * 
+   * @return possible object is {@link Boolean }
+   * 
+   */
+  public Boolean isPrecursor()
+  {
+    return precursor;
+  }
+
+  /**
+   * Sets the value of the precursor property.
+   * 
+   * @param value
+   *          allowed object is {@link Boolean }
+   * 
+   */
+  public void setPrecursor(Boolean value)
+  {
+    this.precursor = value;
+  }
+
+  /**
+   * Gets the value of the fragment property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getFragment()
+  {
+    return fragment;
+  }
+
+  /**
+   * Sets the value of the fragment property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setFragment(String value)
+  {
+    this.fragment = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/SourceDataType.java b/src/jalview/xml/binding/uniprot/SourceDataType.java
index 9796260..4c92560 100644
--- a/src/jalview/xml/binding/uniprot/SourceDataType.java
+++ b/src/jalview/xml/binding/uniprot/SourceDataType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.util.ArrayList;
@@ -18,14 +17,16 @@ import javax.xml.bind.annotation.XmlElements;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
 
-
 /**
- * Describes the source of the sequence according to the citation.
- *             Equivalent to the flat file RC-line.
+ * Describes the source of the sequence according to the citation. Equivalent to
+ * the flat file RC-line.
  * 
- * 

Java class for sourceDataType complex type. + *

+ * Java class for sourceDataType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="sourceDataType">
@@ -77,385 +78,401 @@ import javax.xml.bind.annotation.XmlValue;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "sourceDataType", propOrder = {
-    "strainOrPlasmidOrTransposon"
-})
-public class SourceDataType {
-
-    @XmlElements({
-        @XmlElement(name = "strain", type = SourceDataType.Strain.class),
-        @XmlElement(name = "plasmid", type = SourceDataType.Plasmid.class),
-        @XmlElement(name = "transposon", type = SourceDataType.Transposon.class),
-        @XmlElement(name = "tissue", type = SourceDataType.Tissue.class)
-    })
-    protected List strainOrPlasmidOrTransposon;
+@XmlType(
+  name = "sourceDataType",
+  propOrder =
+  { "strainOrPlasmidOrTransposon" })
+public class SourceDataType
+{
+
+  @XmlElements({
+      @XmlElement(name = "strain", type = SourceDataType.Strain.class),
+      @XmlElement(name = "plasmid", type = SourceDataType.Plasmid.class),
+      @XmlElement(
+        name = "transposon",
+        type = SourceDataType.Transposon.class),
+      @XmlElement(name = "tissue", type = SourceDataType.Tissue.class) })
+  protected List strainOrPlasmidOrTransposon;
+
+  /**
+   * Gets the value of the strainOrPlasmidOrTransposon property.
+   * 
+   * 

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the strainOrPlasmidOrTransposon property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getStrainOrPlasmidOrTransposon().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link SourceDataType.Strain } {@link SourceDataType.Plasmid } + * {@link SourceDataType.Transposon } {@link SourceDataType.Tissue } + * + * + */ + public List getStrainOrPlasmidOrTransposon() + { + if (strainOrPlasmidOrTransposon == null) + { + strainOrPlasmidOrTransposon = new ArrayList(); + } + return this.strainOrPlasmidOrTransposon; + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <simpleContent>
+   *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
+   *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
+   *     </extension>
+   *   </simpleContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "value" }) + public static class Plasmid + { + + @XmlValue + protected String value; + + @XmlAttribute(name = "evidence") + protected List evidence; + + /** + * Gets the value of the value property. + * + * @return possible object is {@link String } + * + */ + public String getValue() + { + return value; + } /** - * Gets the value of the strainOrPlasmidOrTransposon property. + * Sets the value of the value property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setValue(String value) + { + this.value = value; + } + + /** + * Gets the value of the evidence property. * *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the strainOrPlasmidOrTransposon property. + * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the evidence property. * *

* For example, to add a new item, do as follows: + * *

-     *    getStrainOrPlasmidOrTransposon().add(newItem);
+     * getEvidence().add(newItem);
      * 
* * *

- * Objects of the following type(s) are allowed in the list - * {@link SourceDataType.Strain } - * {@link SourceDataType.Plasmid } - * {@link SourceDataType.Transposon } - * {@link SourceDataType.Tissue } + * Objects of the following type(s) are allowed in the list {@link Integer } * * */ - public List getStrainOrPlasmidOrTransposon() { - if (strainOrPlasmidOrTransposon == null) { - strainOrPlasmidOrTransposon = new ArrayList(); - } - return this.strainOrPlasmidOrTransposon; + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); + } + return this.evidence; } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <simpleContent>
+   *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
+   *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
+   *     </extension>
+   *   </simpleContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "value" }) + public static class Strain + { + + @XmlValue + protected String value; + + @XmlAttribute(name = "evidence") + protected List evidence; /** - *

Java class for anonymous complex type. + * Gets the value of the value property. * - *

The following schema fragment specifies the expected content contained within this class. + * @return possible object is {@link String } * - *

-     * <complexType>
-     *   <simpleContent>
-     *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
-     *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
-     *     </extension>
-     *   </simpleContent>
-     * </complexType>
-     * 
+ */ + public String getValue() + { + return value; + } + + /** + * Sets the value of the value property. * + * @param value + * allowed object is {@link String } * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "value" - }) - public static class Plasmid { - - @XmlValue - protected String value; - @XmlAttribute(name = "evidence") - protected List evidence; - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getEvidence().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } - + public void setValue(String value) + { + this.value = value; } - /** - *

Java class for anonymous complex type. + * Gets the value of the evidence property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the evidence property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <simpleContent>
-     *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
-     *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
-     *     </extension>
-     *   </simpleContent>
-     * </complexType>
+     * getEvidence().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "value" - }) - public static class Strain { - - @XmlValue - protected String value; - @XmlAttribute(name = "evidence") - protected List evidence; - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getEvidence().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); + } + return this.evidence; + } + + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <simpleContent>
+   *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
+   *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
+   *     </extension>
+   *   </simpleContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "value" }) + public static class Tissue + { + + @XmlValue + protected String value; + + @XmlAttribute(name = "evidence") + protected List evidence; + /** + * Gets the value of the value property. + * + * @return possible object is {@link String } + * + */ + public String getValue() + { + return value; } + /** + * Sets the value of the value property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setValue(String value) + { + this.value = value; + } /** - *

Java class for anonymous complex type. + * Gets the value of the evidence property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the evidence property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <simpleContent>
-     *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
-     *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
-     *     </extension>
-     *   </simpleContent>
-     * </complexType>
+     * getEvidence().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "value" - }) - public static class Tissue { - - @XmlValue - protected String value; - @XmlAttribute(name = "evidence") - protected List evidence; - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getEvidence().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); + } + return this.evidence; + } + } + + /** + *

+ * Java class for anonymous complex type. + * + *

+ * The following schema fragment specifies the expected content contained + * within this class. + * + *

+   * <complexType>
+   *   <simpleContent>
+   *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
+   *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
+   *     </extension>
+   *   </simpleContent>
+   * </complexType>
+   * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { "value" }) + public static class Transposon + { + + @XmlValue + protected String value; + + @XmlAttribute(name = "evidence") + protected List evidence; + + /** + * Gets the value of the value property. + * + * @return possible object is {@link String } + * + */ + public String getValue() + { + return value; } + /** + * Sets the value of the value property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setValue(String value) + { + this.value = value; + } /** - *

Java class for anonymous complex type. + * Gets the value of the evidence property. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned list will + * be present inside the JAXB object. This is why there is not a + * set method for the evidence property. + * + *

+ * For example, to add a new item, do as follows: * *

-     * <complexType>
-     *   <simpleContent>
-     *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
-     *       <attribute name="evidence" type="{http://uniprot.org/uniprot}intListType" />
-     *     </extension>
-     *   </simpleContent>
-     * </complexType>
+     * getEvidence().add(newItem);
      * 
* * + *

+ * Objects of the following type(s) are allowed in the list {@link Integer } + * + * */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "value" - }) - public static class Transposon { - - @XmlValue - protected String value; - @XmlAttribute(name = "evidence") - protected List evidence; - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Gets the value of the evidence property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evidence property. - * - *

- * For example, to add a new item, do as follows: - *

-         *    getEvidence().add(newItem);
-         * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - * - * - */ - public List getEvidence() { - if (evidence == null) { - evidence = new ArrayList(); - } - return this.evidence; - } - + public List getEvidence() + { + if (evidence == null) + { + evidence = new ArrayList(); + } + return this.evidence; } + } + } diff --git a/src/jalview/xml/binding/uniprot/SourceType.java b/src/jalview/xml/binding/uniprot/SourceType.java index 9293a64..2e92ca6 100644 --- a/src/jalview/xml/binding/uniprot/SourceType.java +++ b/src/jalview/xml/binding/uniprot/SourceType.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.math.BigInteger; @@ -14,13 +13,17 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; - /** - * Describes the source of the data using a database cross-reference (or a 'ref' attribute when the source cannot be found in a public data source, such as PubMed, and is cited only within the UniProtKB entry). + * Describes the source of the data using a database cross-reference (or a 'ref' + * attribute when the source cannot be found in a public data source, such as + * PubMed, and is cited only within the UniProtKB entry). * - *

Java class for sourceType complex type. + *

+ * Java class for sourceType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="sourceType">
@@ -38,61 +41,59 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "sourceType", propOrder = {
-    "dbReference"
-})
-public class SourceType {
+@XmlType(name = "sourceType", propOrder = { "dbReference" })
+public class SourceType
+{
+
+  protected DbReferenceType dbReference;
 
-    protected DbReferenceType dbReference;
-    @XmlAttribute(name = "ref")
-    protected BigInteger ref;
+  @XmlAttribute(name = "ref")
+  protected BigInteger ref;
 
-    /**
-     * Gets the value of the dbReference property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link DbReferenceType }
-     *     
-     */
-    public DbReferenceType getDbReference() {
-        return dbReference;
-    }
+  /**
+   * Gets the value of the dbReference property.
+   * 
+   * @return possible object is {@link DbReferenceType }
+   * 
+   */
+  public DbReferenceType getDbReference()
+  {
+    return dbReference;
+  }
 
-    /**
-     * Sets the value of the dbReference property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link DbReferenceType }
-     *     
-     */
-    public void setDbReference(DbReferenceType value) {
-        this.dbReference = value;
-    }
+  /**
+   * Sets the value of the dbReference property.
+   * 
+   * @param value
+   *          allowed object is {@link DbReferenceType }
+   * 
+   */
+  public void setDbReference(DbReferenceType value)
+  {
+    this.dbReference = value;
+  }
 
-    /**
-     * Gets the value of the ref property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link BigInteger }
-     *     
-     */
-    public BigInteger getRef() {
-        return ref;
-    }
+  /**
+   * Gets the value of the ref property.
+   * 
+   * @return possible object is {@link BigInteger }
+   * 
+   */
+  public BigInteger getRef()
+  {
+    return ref;
+  }
 
-    /**
-     * Sets the value of the ref property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link BigInteger }
-     *     
-     */
-    public void setRef(BigInteger value) {
-        this.ref = value;
-    }
+  /**
+   * Sets the value of the ref property.
+   * 
+   * @param value
+   *          allowed object is {@link BigInteger }
+   * 
+   */
+  public void setRef(BigInteger value)
+  {
+    this.ref = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/StatusType.java b/src/jalview/xml/binding/uniprot/StatusType.java
index dd3308b..220c009 100644
--- a/src/jalview/xml/binding/uniprot/StatusType.java
+++ b/src/jalview/xml/binding/uniprot/StatusType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -14,13 +13,15 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
 
-
 /**
  * Indicates whether the name of a plasmid is known or unknown.
  * 
- * 

Java class for statusType complex type. + *

+ * Java class for statusType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="statusType">
@@ -42,66 +43,67 @@ import javax.xml.bind.annotation.XmlValue;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "statusType", propOrder = {
-    "value"
-})
-public class StatusType {
+@XmlType(name = "statusType", propOrder = { "value" })
+public class StatusType
+{
 
-    @XmlValue
-    protected String value;
-    @XmlAttribute(name = "status")
-    protected String status;
+  @XmlValue
+  protected String value;
 
-    /**
-     * Gets the value of the value property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getValue() {
-        return value;
-    }
+  @XmlAttribute(name = "status")
+  protected String status;
 
-    /**
-     * Sets the value of the value property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
+  /**
+   * Gets the value of the value property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getValue()
+  {
+    return value;
+  }
 
-    /**
-     * Gets the value of the status property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
-     */
-    public String getStatus() {
-        if (status == null) {
-            return "known";
-        } else {
-            return status;
-        }
-    }
+  /**
+   * Sets the value of the value property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
 
-    /**
-     * Sets the value of the status property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
-     */
-    public void setStatus(String value) {
-        this.status = value;
+  /**
+   * Gets the value of the status property.
+   * 
+   * @return possible object is {@link String }
+   * 
+   */
+  public String getStatus()
+  {
+    if (status == null)
+    {
+      return "known";
+    }
+    else
+    {
+      return status;
     }
+  }
+
+  /**
+   * Sets the value of the status property.
+   * 
+   * @param value
+   *          allowed object is {@link String }
+   * 
+   */
+  public void setStatus(String value)
+  {
+    this.status = value;
+  }
 
 }
diff --git a/src/jalview/xml/binding/uniprot/SubcellularLocationType.java b/src/jalview/xml/binding/uniprot/SubcellularLocationType.java
index 97522e2..f8adfde 100644
--- a/src/jalview/xml/binding/uniprot/SubcellularLocationType.java
+++ b/src/jalview/xml/binding/uniprot/SubcellularLocationType.java
@@ -2,10 +2,9 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
 // See http://java.sun.com/xml/jaxb 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2023.03.17 at 05:31:46 PM GMT 
+// Generated on: 2023.05.13 at 06:58:42 PM BST 
 //
 
-
 package jalview.xml.binding.uniprot;
 
 import java.util.ArrayList;
@@ -15,13 +14,16 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
- * Describes the subcellular location and optionally the topology and orientation of a molecule.
+ * Describes the subcellular location and optionally the topology and
+ * orientation of a molecule.
  * 
- * 

Java class for subcellularLocationType complex type. + *

+ * Java class for subcellularLocationType complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType name="subcellularLocationType">
@@ -40,103 +42,114 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "subcellularLocationType", propOrder = {
-    "location",
-    "topology",
-    "orientation"
-})
-public class SubcellularLocationType {
+@XmlType(
+  name = "subcellularLocationType",
+  propOrder =
+  { "location", "topology", "orientation" })
+public class SubcellularLocationType
+{
+
+  @XmlElement(required = true)
+  protected List location;
+
+  protected List topology;
 
-    @XmlElement(required = true)
-    protected List location;
-    protected List topology;
-    protected List orientation;
+  protected List orientation;
 
-    /**
-     * Gets the value of the location property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the location property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLocation().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getLocation() { - if (location == null) { - location = new ArrayList(); - } - return this.location; + /** + * Gets the value of the location property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the location property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getLocation().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getLocation() + { + if (location == null) + { + location = new ArrayList(); } + return this.location; + } - /** - * Gets the value of the topology property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the topology property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getTopology().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getTopology() { - if (topology == null) { - topology = new ArrayList(); - } - return this.topology; + /** + * Gets the value of the topology property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the topology property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getTopology().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getTopology() + { + if (topology == null) + { + topology = new ArrayList(); } + return this.topology; + } - /** - * Gets the value of the orientation property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the orientation property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getOrientation().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EvidencedStringType } - * - * - */ - public List getOrientation() { - if (orientation == null) { - orientation = new ArrayList(); - } - return this.orientation; + /** + * Gets the value of the orientation property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the orientation property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getOrientation().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link EvidencedStringType } + * + * + */ + public List getOrientation() + { + if (orientation == null) + { + orientation = new ArrayList(); } + return this.orientation; + } } diff --git a/src/jalview/xml/binding/uniprot/Uniprot.java b/src/jalview/xml/binding/uniprot/Uniprot.java index 14f96df..283ba1f 100644 --- a/src/jalview/xml/binding/uniprot/Uniprot.java +++ b/src/jalview/xml/binding/uniprot/Uniprot.java @@ -2,10 +2,9 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // - package jalview.xml.binding.uniprot; import java.util.ArrayList; @@ -16,11 +15,13 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; - /** - *

Java class for anonymous complex type. + *

+ * Java class for anonymous complex type. * - *

The following schema fragment specifies the expected content contained within this class. + *

+ * The following schema fragment specifies the expected content contained within + * this class. * *

  * <complexType>
@@ -38,68 +39,68 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {
-    "entry",
-    "copyright"
-})
+@XmlType(name = "", propOrder = { "entry", "copyright" })
 @XmlRootElement(name = "uniprot")
-public class Uniprot {
+public class Uniprot
+{
 
-    @XmlElement(required = true)
-    protected List entry;
-    protected String copyright;
+  @XmlElement(required = true)
+  protected List entry;
 
-    /**
-     * Gets the value of the entry property.
-     * 
-     * 

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the entry property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEntry().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Entry } - * - * - */ - public List getEntry() { - if (entry == null) { - entry = new ArrayList(); - } - return this.entry; - } + protected String copyright; - /** - * Gets the value of the copyright property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCopyright() { - return copyright; + /** + * Gets the value of the entry property. + * + *

+ * This accessor method returns a reference to the live list, not a snapshot. + * Therefore any modification you make to the returned list will be present + * inside the JAXB object. This is why there is not a set method + * for the entry property. + * + *

+ * For example, to add a new item, do as follows: + * + *

+   * getEntry().add(newItem);
+   * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list {@link Entry } + * + * + */ + public List getEntry() + { + if (entry == null) + { + entry = new ArrayList(); } + return this.entry; + } - /** - * Sets the value of the copyright property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCopyright(String value) { - this.copyright = value; - } + /** + * Gets the value of the copyright property. + * + * @return possible object is {@link String } + * + */ + public String getCopyright() + { + return copyright; + } + + /** + * Sets the value of the copyright property. + * + * @param value + * allowed object is {@link String } + * + */ + public void setCopyright(String value) + { + this.copyright = value; + } } diff --git a/src/jalview/xml/binding/uniprot/package-info.java b/src/jalview/xml/binding/uniprot/package-info.java index a7bc67c..eb7f47a 100644 --- a/src/jalview/xml/binding/uniprot/package-info.java +++ b/src/jalview/xml/binding/uniprot/package-info.java @@ -2,8 +2,10 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2023.03.17 at 05:31:46 PM GMT +// Generated on: 2023.05.13 at 06:58:42 PM BST // -@javax.xml.bind.annotation.XmlSchema(namespace = "http://uniprot.org/uniprot", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +@javax.xml.bind.annotation.XmlSchema( + namespace = "http://uniprot.org/uniprot", + elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) package jalview.xml.binding.uniprot; diff --git a/src/mc_view/PDBChain.java b/src/mc_view/PDBChain.java index 6d02630..2970ccf 100755 --- a/src/mc_view/PDBChain.java +++ b/src/mc_view/PDBChain.java @@ -39,6 +39,7 @@ import jalview.schemes.ResidueProperties; import jalview.structure.StructureImportSettings; import jalview.structure.StructureMapping; import jalview.util.Comparison; +import jalview.ws.datamodel.MappableContactMatrixI; public class PDBChain { @@ -700,9 +701,10 @@ public class PDBChain ana = new AlignmentAnnotation(ana); ana.liftOver(dsq, sqmpping); dsq.addAlignmentAnnotation(ana); - if (cm != null) + if (cm != null && cm instanceof MappableContactMatrixI) { - dsq.addContactListFor(ana, cm); + dsq.addContactListFor(ana, ((MappableContactMatrixI) cm) + .liftOver(dsq, sqmpping)); } } else @@ -717,8 +719,8 @@ public class PDBChain // Useful for debugging mappings - adds annotation for mapped position float min = -1, max = 0; Annotation[] an = new Annotation[sq.getEnd() - sq.getStart() + 1]; - for (int i = sq.getStart(), j = sq.getEnd(), - k = 0; i <= j; i++, k++) + for (int i = sq.getStart(), j = sq + .getEnd(), k = 0; i <= j; i++, k++) { int prn = mapping.getPDBResNum(k + 1); diff --git a/test/jalview/analysis/AlignmentUtilsTests.java b/test/jalview/analysis/AlignmentUtilsTests.java index 4baa384..f017662 100644 --- a/test/jalview/analysis/AlignmentUtilsTests.java +++ b/test/jalview/analysis/AlignmentUtilsTests.java @@ -20,6 +20,7 @@ */ package jalview.analysis; +import static org.testng.Assert.assertNotEquals; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNotNull; @@ -54,6 +55,7 @@ import jalview.datamodel.SearchResultsI; import jalview.datamodel.SeqDistanceContactMatrix; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.JvOptionPane; import jalview.io.AppletFormatAdapter; @@ -62,6 +64,7 @@ import jalview.io.FileFormat; import jalview.io.FileFormatI; import jalview.io.FormatAdapter; import jalview.io.gff.SequenceOntologyI; +import jalview.util.Comparison; import jalview.util.MapList; import jalview.util.MappingUtils; @@ -2603,6 +2606,98 @@ public class AlignmentUtilsTests } @Test(groups = "Functional") + public void testAddReferenceAnnotations() + { + SequenceI longseq = new Sequence("longA", "ASDASDASDASDAASDASDASDASDA"); + Annotation[] aa = new Annotation[longseq.getLength()]; + + for (int p = 0; p < aa.length; p++) + { + aa[p] = new Annotation("P", "pos " + (p + 1), (char) 0, + (float) p + 1); + } + AlignmentAnnotation refAnnot = new AlignmentAnnotation("LongSeqAnnot", + "Annotations", aa); + refAnnot.setCalcId("Test"); + longseq.addAlignmentAnnotation(refAnnot); + verifyExpectedSequenceAnnotation(refAnnot); + + Alignment ourAl = new Alignment( + new SequenceI[] + { longseq.getSubSequence(5, 10), + longseq.getSubSequence(7, 12) }); + ourAl.createDatasetAlignment(); + + // transfer annotation + SortedMap tipEntries = new TreeMap<>(); + Map> candidates = new LinkedHashMap<>(); + + AlignmentUtils.findAddableReferenceAnnotations(ourAl.getSequences(), + tipEntries, candidates, ourAl); + AlignmentUtils.addReferenceAnnotations(candidates, ourAl, null); + + assertNotNull(ourAl.getAlignmentAnnotation()); + assertEquals(ourAl.getAlignmentAnnotation().length, 2); + + for (AlignmentAnnotation alan : ourAl.getAlignmentAnnotation()) + { + verifyExpectedSequenceAnnotation(alan); + } + // Everything above works for 2.11.3 and 2.11.2.x. + // now simulate copy/paste to new alignment + SequenceI[] newSeqAl = new SequenceI[2]; + // copy sequences but no annotation + newSeqAl[0] = new Sequence(ourAl.getSequenceAt(0), + ourAl.getSequenceAt(0).getAnnotation()); + newSeqAl[1] = new Sequence(ourAl.getSequenceAt(1), + ourAl.getSequenceAt(1).getAnnotation()); + + Alignment newAl = new Alignment(newSeqAl); + // delete annotation + for (SequenceI sq : newAl.getSequences()) + { + sq.setAlignmentAnnotation(new AlignmentAnnotation[0]); + } + // JAL-4182 scenario test + SequenceGroup sg = new SequenceGroup(Arrays.asList(newSeqAl)); + sg.setStartRes(0); + sg.setEndRes(newAl.getWidth()); + AlignmentUtils.addReferenceAnnotationTo(newAl, newSeqAl[0], + newSeqAl[0].getDatasetSequence().getAnnotation()[0], sg); + AlignmentUtils.addReferenceAnnotationTo(newAl, newSeqAl[1], + newSeqAl[1].getDatasetSequence().getAnnotation()[0], sg); + for (AlignmentAnnotation alan : newAl.getAlignmentAnnotation()) + { + verifyExpectedSequenceAnnotation(alan); + } + } + + /** + * helper - tests annotation is mapped to position it was originally created + * for + * + * @param alan + */ + private void verifyExpectedSequenceAnnotation(AlignmentAnnotation alan) + { + for (int c = 0; c < alan.annotations.length; c++) + { + Annotation a = alan.annotations[c]; + if (a != null) + { + assertEquals("Misaligned annotation at " + c, + (float) alan.sequenceRef.findPosition(c), a.value); + } + else + { + assertTrue("Unexpected Null at position " + c, + c >= alan.sequenceRef.getLength() + || Comparison.isGap(alan.sequenceRef.getCharAt(c))); + } + } + } + + @Test(groups = "Functional") public void testAddReferenceContactMap() { SequenceI sq = new Sequence("a", "SSSQ"); @@ -2626,11 +2721,18 @@ public class AlignmentUtilsTests && al.getAlignmentAnnotation().length == 1); AlignmentAnnotation alan = al.findAnnotations(sq, null, cm_aan.label) .iterator().next(); + ContactMatrixI t_cm = al.getContactMatrixFor(alan); + assertNotNull("No contact map for the transferred annotation row.", + t_cm); + assertTrue(t_cm instanceof SeqDistanceContactMatrix); + assertTrue(((SeqDistanceContactMatrix) t_cm).hasReferenceSeq()); + ContactListI cl = al.getContactListFor(alan, 1); assertNotNull( "No contact matrix recovered after reference annotation transfer", cl); - // semantics of sequence associated contact list is slightly tricky - column 3 in alignment should have data + // semantics of sequence associated contact list is slightly tricky - column + // 3 in alignment should have data cl = al.getContactListFor(alan, 3); assertNotNull( "Contact matrix should have data for last position in sequence", diff --git a/test/jalview/analysis/AverageDistanceEngineTest.java b/test/jalview/analysis/AverageDistanceEngineTest.java index 6d9ab50..5a8361d 100644 --- a/test/jalview/analysis/AverageDistanceEngineTest.java +++ b/test/jalview/analysis/AverageDistanceEngineTest.java @@ -32,66 +32,77 @@ import jalview.ws.datamodel.alphafold.PAEContactMatrix; public class AverageDistanceEngineTest { - @BeforeClass(alwaysRun = true) - public void setUpJvOptionPane() + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + + @BeforeMethod(alwaysRun = true) + public void loadProperties() + { + Cache.loadProperties("test/jalview/bin/TestProps.jvprops"); + } + + @Test(groups = { "Functional" }) + public void testUPGMAEngine() throws Exception + { + AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded( + "examples/test_fab41.result/sample.a3m", DataSourceType.FILE); + AlignmentI seqs = af.getViewport().getAlignment(); + SequenceI target = seqs.getSequenceAt(0); + File testPAE = new File( + "examples/test_fab41.result/test_fab41_predicted_aligned_error_v1.json"); + List pae_obj = (List) Platform + .parseJSON(new FileInputStream(testPAE)); + if (pae_obj == null) { - JvOptionPane.setInteractiveMode(false); - JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + Assert.fail("JSON PAE file did not parse properly."); } + ContactMatrixI matrix = new PAEContactMatrix(target, + (Map) pae_obj.get(0)); + AlignmentAnnotation aa = target.addContactList(matrix); + System.out.println("Matrix has max=" + matrix.getMax() + " and min=" + + matrix.getMin()); + long start = System.currentTimeMillis(); + AverageDistanceEngine clusterer = new AverageDistanceEngine( + af.getViewport(), null, matrix); + System.out.println("built a tree in " + + (System.currentTimeMillis() - start) * 0.001 + " seconds."); + StringBuffer sb = new StringBuffer(); + System.out.println("Newick string\n" + + new jalview.io.NewickFile(clusterer.getTopNode(), true, true) + .print()); - @BeforeMethod(alwaysRun = true) - public void loadProperties() + double height = clusterer.findHeight(clusterer.getTopNode()); + // compute height fraction to cut + // PAE matrixes are absolute measure in angstrom, so + // cluster all regions within threshold (e.g. 2A) - if height above + // threshold. Otherwise all nodes are in one cluster + double thr = .2; + List groups; + if (height > thr) { - Cache.loadProperties("test/jalview/bin/TestProps.jvprops"); + float cut = (float) (thr / height); + System.out.println("Threshold " + cut + " for height=" + height); + groups = clusterer.groupNodes(cut); } - @Test - public void testUPGMAEngine() throws Exception + else { - AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded("examples/test_fab41.result/sample.a3m",DataSourceType.FILE); - AlignmentI seqs = af.getViewport().getAlignment(); - SequenceI target = seqs.getSequenceAt(0); - File testPAE = new File("examples/test_fab41.result/test_fab41_predicted_aligned_error_v1.json"); - List pae_obj = (List) Platform.parseJSON(new FileInputStream(testPAE)); - if (pae_obj == null) - { - Assert.fail("JSON PAE file did not parse properly."); - } - ContactMatrixI matrix = new PAEContactMatrix(target, - (Map) pae_obj.get(0)); - AlignmentAnnotation aa = target.addContactList(matrix); - System.out.println("Matrix has max="+matrix.getMax()+" and min="+matrix.getMin()); - long start = System.currentTimeMillis(); - AverageDistanceEngine clusterer = new AverageDistanceEngine(af.getViewport(), null, matrix); - System.out.println("built a tree in "+(System.currentTimeMillis()-start)*0.001+" seconds."); - StringBuffer sb = new StringBuffer(); - System.out.println("Newick string\n"+ new jalview.io.NewickFile(clusterer.getTopNode(),true,true).print()); - - double height = clusterer.findHeight(clusterer.getTopNode()); - // compute height fraction to cut - // PAE matrixes are absolute measure in angstrom, so - // cluster all regions within threshold (e.g. 2A) - if height above threshold. Otherwise all nodes are in one cluster - double thr=.2; - List groups; - if (height>thr) - { - float cut = (float) (thr/height); - System.out.println("Threshold "+cut+" for height="+height); - groups = clusterer.groupNodes(cut); - } else{ - groups=new ArrayList(); - groups.add(clusterer.getTopNode()); - } - int n=1; - for (BinaryNode root:groups) + groups = new ArrayList(); + groups.add(clusterer.getTopNode()); + } + int n = 1; + for (BinaryNode root : groups) + { + System.out.println("Cluster " + n++); + for (BinaryNode leaf : clusterer.findLeaves(root)) { - System.out.println("Cluster "+n++); - for (BinaryNode leaf:clusterer.findLeaves(root)) - { - System.out.print(" "+leaf.getName()); - } - System.out.println("\\"); + System.out.print(" " + leaf.getName()); } - + System.out.println("\\"); } + } } diff --git a/test/jalview/datamodel/AlignmentAnnotationTests.java b/test/jalview/datamodel/AlignmentAnnotationTests.java index 2f46eca..4615204 100644 --- a/test/jalview/datamodel/AlignmentAnnotationTests.java +++ b/test/jalview/datamodel/AlignmentAnnotationTests.java @@ -20,7 +20,9 @@ */ package jalview.datamodel; +import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; import static org.testng.AssertJUnit.assertEquals; import jalview.analysis.AlignSeq; @@ -426,4 +428,23 @@ public class AlignmentAnnotationTests assertNull(ann.annotations[0]); assertNull(ann.annotations[4]); } + /** + * test the contact matrix nogroups property methods + */ + @Test(groups= {"Functional"}) + public void test_contactMatrixGroups() + { + AlignmentAnnotation aa = new AlignmentAnnotation("foo","foo desc",null); + assertTrue(aa.isShowGroupsForContactMatrix()); + aa.setShowGroupsForContactMatrix(false); + assertFalse(aa.isShowGroupsForContactMatrix()); + AlignmentAnnotation copy = new AlignmentAnnotation(aa); + assertFalse(copy.isShowGroupsForContactMatrix()); + aa.setShowGroupsForContactMatrix(true); + assertTrue(aa.isShowGroupsForContactMatrix()); + // copy should not be updated + assertFalse(copy.isShowGroupsForContactMatrix()); + + + } } diff --git a/test/jalview/datamodel/AlignmentTest.java b/test/jalview/datamodel/AlignmentTest.java index 92db223..1c27420 100644 --- a/test/jalview/datamodel/AlignmentTest.java +++ b/test/jalview/datamodel/AlignmentTest.java @@ -1591,7 +1591,8 @@ public class AlignmentTest // ? } - @Test(groups = {"Functional"}) + + @Test(groups = { "Functional" }) public void testEquals() { SequenceI seq1 = new Sequence("seq1", "ABCDEF--"); @@ -1599,6 +1600,6 @@ public class AlignmentTest SequenceI seq3 = new Sequence("seq2", "-PQR"); AlignmentI a = new Alignment(new SequenceI[] { seq1, seq2, seq3 }); a.setDataset(null); - assertEquals(a.getDataset(),a.getDataset()); + assertEquals(a.getDataset(), a.getDataset()); } } diff --git a/test/jalview/datamodel/ContactRangeTest.java b/test/jalview/datamodel/ContactRangeTest.java index 431834c..8bde11e 100644 --- a/test/jalview/datamodel/ContactRangeTest.java +++ b/test/jalview/datamodel/ContactRangeTest.java @@ -3,13 +3,14 @@ package jalview.datamodel; import org.testng.Assert; import org.testng.annotations.Test; -public class ContactRangeTest { +public class ContactRangeTest +{ @Test public void testContactRangeBean() { ContactRange cr = new ContactRange(); - cr.update(5, 15, 6, 0.2, 12, 1.5,3.7); + cr.update(5, 15, 6, 0.2, 12, 1.5, 3.7); Assert.assertEquals(5, cr.getFrom_column()); Assert.assertEquals(15, cr.getTo_column()); Assert.assertEquals(6, cr.getMinPos()); diff --git a/test/jalview/datamodel/PAEContactMatrixTest.java b/test/jalview/datamodel/PAEContactMatrixTest.java new file mode 100644 index 0000000..67edb37 --- /dev/null +++ b/test/jalview/datamodel/PAEContactMatrixTest.java @@ -0,0 +1,246 @@ +package jalview.datamodel; + +import static org.testng.Assert.*; + +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import jalview.analysis.AlignmentUtils; +import jalview.analysis.SeqsetUtils; +import jalview.gui.JvOptionPane; +import jalview.util.MapList; +import jalview.ws.datamodel.MappableContactMatrixI; +import jalview.ws.datamodel.alphafold.PAEContactMatrix; + +public class PAEContactMatrixTest +{ + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + + static float[][] PAEdata = { { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f }, + { 2.0f, 1.0f, 2.0f, 3.0f, 4.0f }, + { 3.0f, 2.0f, 1.0f, 2.0f, 3.0f }, + { 4.0f, 3.0f, 2.0f, 1.0f, 2.0f }, + { 5.0f, 4.0f, 3.0f, 2.0f, 1.0f } }; + + /** + * test associations for a PAE matrix + */ + @Test(groups = { "Functional" }) + public void testSeqAssociatedPAEMatrix() + { + Sequence seq = new Sequence("Seq", "ASDQE"); + AlignmentAnnotation aa = seq + .addContactList(new PAEContactMatrix(seq, PAEdata)); + assertNotNull(seq.getContactListFor(aa, 0)); + assertEquals(seq.getContactListFor(aa, 0).getContactAt(0), 1.0); + assertNotNull(seq.getContactListFor(aa, 1)); + assertEquals(seq.getContactListFor(aa, 1).getContactAt(1), 1.0); + assertNotNull(seq.getContactListFor(aa, 2)); + assertEquals(seq.getContactListFor(aa, 2).getContactAt(2), 1.0); + assertNotNull(seq.getContactListFor(aa, 3)); + assertEquals(seq.getContactListFor(aa, 3).getContactAt(3), 1.0); + assertNotNull(seq.getContactListFor(aa, 4)); + assertEquals(seq.getContactListFor(aa, 4).getContactAt(4), 1.0); + + assertNotNull(seq.getContactListFor(aa, seq.getEnd() - 1)); + assertNull(seq.getContactListFor(aa, seq.getEnd())); + + ContactListI cm = seq.getContactListFor(aa, seq.getStart()); + assertEquals(cm.getContactAt(seq.getStart()), 1d); + verifyPAEmatrix(seq, aa, 0, 0, 4); + + // Now associated with sequence not starting at 1 + seq = new Sequence("Seq/5-9", "ASDQE"); + ContactMatrixI paematrix = new PAEContactMatrix(seq, PAEdata); + aa = seq.addContactList(paematrix); + assertNotNull(aa); + // individual annotation elements need to be distinct for Matrix associated + // rows + Annotation ae5 = aa.getAnnotationForPosition(5); + Annotation ae6 = aa.getAnnotationForPosition(6); + assertNotNull(ae5); + assertNotNull(ae6); + assertTrue(ae5 != ae6); + + cm = seq.getContactListFor(aa, 0); + assertEquals(cm.getContactAt(0), 1d); + verifyPAEmatrix(seq, aa, 0, 0, 4); + + // test clustering + paematrix.setGroupSet(GroupSet.makeGroups(paematrix, 0.1f, false)); + + // remap - test the MappableContactMatrix.liftOver method + SequenceI newseq = new Sequence("Seq", "ASDQEASDQEASDQE"); + Mapping sqmap = new Mapping(seq, + new MapList(new int[] + { 5, 8, 10, 10 }, new int[] { 5, 9 }, 1, 1)); + assertTrue(paematrix instanceof MappableContactMatrixI); + + MappableContactMatrixI remapped = ((MappableContactMatrixI) paematrix) + .liftOver(newseq, sqmap); + assertTrue(remapped instanceof PAEContactMatrix); + + AlignmentAnnotation newaa = newseq.addContactList(remapped); + assertNull(newseq.getContactListFor(newaa, -1 + newseq.findIndex(1))); + assertNull(newseq.getContactListFor(newaa, -1 + newseq.findIndex(4))); + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(5))); + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(6))); + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(7))); + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(8))); + // no mapping for position 9 + assertNull(newseq.getContactListFor(newaa, -1 + newseq.findIndex(9))); + // last column + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(10))); + + // verify MappedPositions includes discontinuity + int[] mappedCl = newseq.getContactListFor(newaa, 5) + .getMappedPositionsFor(0, 4); + assertEquals(4, mappedCl.length, + "getMappedPositionsFor doesn't support discontinuous mappings to contactList"); + + // make it harder. + + SequenceI alseq = newseq.getSubSequence(6, 10); + alseq.insertCharAt(2, 2, '-'); + AlignmentI alForSeq = new Alignment(new SequenceI[] { alseq }); + newaa = AlignmentUtils.addReferenceAnnotationTo(alForSeq, alseq, newaa, + null); + ContactListI alcl = alForSeq.getContactListFor(newaa, 1); + assertNotNull(alcl); + mappedCl = alcl.getMappedPositionsFor(0, 4); + assertNotNull(mappedCl); + assertEquals(4, mappedCl.length, + "getMappedPositionsFor doesn't support discontinuous mappings to contactList"); + + // remap2 - test with original matrix map from 1-5 remapped to 5-9 + + seq = new Sequence("Seq/1-5", "ASDQE"); + paematrix = new PAEContactMatrix(seq, PAEdata); + assertTrue(paematrix instanceof MappableContactMatrixI); + aa = seq.addContactList(paematrix); + + newseq = new Sequence("Seq", "ASDQEASDQEASDQE"); + sqmap = new Mapping(seq, + new MapList(new int[] + { 5, 9 }, new int[] { 1, 5 }, 1, 1)); + + remapped = ((MappableContactMatrixI) paematrix).liftOver(newseq, sqmap); + assertTrue(remapped instanceof PAEContactMatrix); + + newaa = newseq.addContactList(remapped); + verify_mapping(newseq, newaa); + + // remap3 - remap2 but mapping sense in liftover is reversed + + seq = new Sequence("Seq/1-5", "ASDQE"); + paematrix = new PAEContactMatrix(seq, PAEdata); + assertTrue(paematrix instanceof MappableContactMatrixI); + aa = seq.addContactList(paematrix); + + newseq = new Sequence("Seq", "ASDQEASDQEASDQE"); + sqmap = new Mapping(newseq, + new MapList(new int[] + { 1, 5 }, new int[] { 5, 9 }, 1, 1)); + + remapped = ((MappableContactMatrixI) paematrix).liftOver(newseq, sqmap); + assertTrue(remapped instanceof PAEContactMatrix); + + newaa = newseq.addContactList(remapped); + verify_mapping(newseq, newaa); + } + + /** + * checks that the PAE matrix is located at positions 1-9 in newseq, and + * columns are not truncated. + * + * @param newseq + * @param newaa + */ + private void verify_mapping(SequenceI newseq, AlignmentAnnotation newaa) + { + assertNull(newseq.getContactListFor(newaa, -1 + newseq.findIndex(1))); + assertNull(newseq.getContactListFor(newaa, -1 + newseq.findIndex(4))); + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(5))); + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(6))); + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(7))); + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(8))); + assertNotNull( + newseq.getContactListFor(newaa, -1 + newseq.findIndex(9))); + // last column should be null this time + assertNull(newseq.getContactListFor(newaa, -1 + newseq.findIndex(10))); + + verifyPAEmatrix(newseq, newaa, 4, 4, 8); + } + + private void verifyPAEmatrix(SequenceI seq, AlignmentAnnotation aa, + int topl, int rowl, int rowr) + { + int[] mappedCl; + for (int f = rowl; f <= rowr; f++) + { + ContactListI clist = seq.getContactListFor(aa, f); + assertNotNull(clist, "No ContactListI for position " + (f)); + assertEquals(clist.getContactAt(0), (double) f - topl + 1, + "for column " + f + " relative to " + topl); + mappedCl = clist.getMappedPositionsFor(0, 0); + assertNotNull(mappedCl); + assertEquals(mappedCl[0], mappedCl[1]); + assertEquals(mappedCl[0], seq.findIndex(seq.getStart() + topl)); + assertEquals(clist.getContactAt(f - topl), 1d, + "for column and row " + f + " relative to " + topl); + } + } + + /** + * check mapping and resolution methods work + */ + @Test(groups= {"Functional"}) + public void testMappableContactMatrix() { + SequenceI newseq = new Sequence("Seq", "ASDQEASDQEASDQE"); + MapList map = new MapList(new int[] + { 5, 9 }, new int[] { 1, 5 }, 1, 1); + AlignmentAnnotation aa = newseq + .addContactList(new PAEContactMatrix(newseq,map, PAEdata,null)); + ContactListI clist = newseq.getContactListFor(aa, 4); + assertNotNull(clist); + clist = newseq.getContactListFor(aa, 3); + assertNull(clist); + + ContactMatrixI cm = newseq.getContactMatrixFor(aa); + MappableContactMatrixI mcm = (MappableContactMatrixI) cm; + int[] pos = mcm.getMappedPositionsFor(newseq, 0); + assertNull(pos); + + pos = mcm.getMappedPositionsFor(newseq, 1); + assertNotNull(pos); + assertEquals(pos[0],4+newseq.getStart()); + + pos = mcm.getMappedPositionsFor(newseq, 6); // after end of matrix + assertNull(pos); + pos = mcm.getMappedPositionsFor(newseq, 5); // at end of matrix + assertNotNull(pos); + assertEquals(pos[0],8+newseq.getStart()); + SequenceI alseq = newseq.deriveSequence(); + alseq.insertCharAt(5,'-'); + pos = mcm.getMappedPositionsFor(alseq, 5); // at end of matrix + assertNotNull(pos); + assertEquals(pos[0],8+newseq.getStart()); + + + } +} diff --git a/test/jalview/datamodel/SequenceTest.java b/test/jalview/datamodel/SequenceTest.java index 0151a12..344d74d 100644 --- a/test/jalview/datamodel/SequenceTest.java +++ b/test/jalview/datamodel/SequenceTest.java @@ -1052,6 +1052,38 @@ public class SequenceTest assertEquals("ABCDEF", derived.getDatasetSequence().getSequenceAsString()); } + + /** + * test that creating a copy of an existing sequence with dataset sequence and + * associated contact matrix yields annotation associated with the same + * contact matrix in the copy + */ + @Test(groups= {"Functional"}) + public void testCopyPasteStyleDerivesequence_withcontactMatrixAnn() + { + SequenceI seq1=new Sequence("seq1","ACDACDACD"); + seq1.createDatasetSequence(); + ContactMatrixI cm = new SeqDistanceContactMatrix(seq1.getLength()); + // addContactList needs to return annotation addable to the sequence reference it was called from + AlignmentAnnotation aann = seq1.addContactList(cm); + assertTrue(aann.sequenceRef==seq1); + assertEquals(1,seq1.getAnnotation().length); + assertNotNull(seq1.getContactListFor(seq1.getAnnotation()[0], 1)); + + SequenceI seq_derived=seq1.deriveSequence(); + assertEquals(1,seq_derived.getAnnotation().length); + assertTrue(cm==seq_derived.getContactMatrixFor(seq_derived.getAnnotation()[0])); + assertNotNull(seq_derived.getContactListFor(seq_derived.getAnnotation()[0], 1)); + + // copy paste actually uses the copy constructor .. so + + SequenceI seq_copied=new Sequence((Sequence)seq_derived); + assertEquals(1,seq_copied.getAnnotation().length); + assertTrue(cm==seq_copied.getContactMatrixFor(seq_copied.getAnnotation()[0])); + assertNotNull(seq_copied.getContactListFor(seq_copied.getAnnotation()[0], 1)); + + + } @Test(groups = { "Functional" }) public void testCopyConstructor_noDataset() diff --git a/test/jalview/gui/AlignViewportTest.java b/test/jalview/gui/AlignViewportTest.java index b3c6b2a..4537dcc 100644 --- a/test/jalview/gui/AlignViewportTest.java +++ b/test/jalview/gui/AlignViewportTest.java @@ -42,8 +42,10 @@ import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; +import jalview.datamodel.ContactMatrixI; import jalview.datamodel.SearchResults; import jalview.datamodel.SearchResultsI; +import jalview.datamodel.SeqDistanceContactMatrix; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; @@ -537,4 +539,29 @@ public class AlignViewportTest assertEquals(0, ranges.getStartSeq()); assertEquals(2, ranges.getEndSeq()); } + @Test(groups = {"Functional"}) + public void testGetSelectionAsNewSequences_withContactMatrices() + { + SequenceI seq = new Sequence("seq","ACADA"); + ContactMatrixI cmat = new SeqDistanceContactMatrix(5); + seq.addContactList(cmat); + Alignment al = new Alignment(new SequenceI[] {seq.deriveSequence() }); + al.addAnnotation(al.getSequenceAt(0).getAnnotation()[0]); + AlignFrame af = new AlignFrame(al,500,500); + + SequenceI selseqs[] = af.getViewport().getSelectionAsNewSequence(); + assertNotNull(selseqs[0].getAnnotation()); + assertNotNull(selseqs[0].getAnnotation()[0]); + assertEquals(cmat,selseqs[0].getContactMatrixFor(selseqs[0].getAnnotation()[0])); + + assertNotNull(selseqs[0].getContactListFor(selseqs[0].getAnnotation()[0], 2)); + + // now select everything and test again + af.selectAllSequenceMenuItem_actionPerformed(null); + selseqs = af.getViewport().getSelectionAsNewSequence(); + assertNotNull(selseqs[0].getAnnotation()); + assertNotNull(selseqs[0].getAnnotation()[0]); + assertEquals(cmat,selseqs[0].getContactMatrixFor(selseqs[0].getAnnotation()[0])); + assertNotNull(selseqs[0].getContactListFor(selseqs[0].getAnnotation()[0], 2)); + } } diff --git a/test/jalview/gui/AlignmentPanelTest.java b/test/jalview/gui/AlignmentPanelTest.java index 2d7e3dc..c1896bc 100644 --- a/test/jalview/gui/AlignmentPanelTest.java +++ b/test/jalview/gui/AlignmentPanelTest.java @@ -291,41 +291,43 @@ public class AlignmentPanelTest Cache.setProperty("FIGURE_AUTOIDWIDTH", Boolean.TRUE.toString()); assertEquals(115, af.alignPanel.getVisibleIdWidth(false)); } - + @Test(groups = "Functional") public void testSetOverviewTitle() { OverviewPanel ov1 = this.af.openOverviewPanel(true); String alignFrameTitle = af.getTitle(); assertEquals(ov1.getTitle(), "Overview " + alignFrameTitle); - + /* * on New View, existing overview should get " Original" added to title * and new view's overview should get " View 1" added */ af.newView_actionPerformed(null); - assertEquals(ov1.getTitle(), "Overview " + alignFrameTitle + " Original"); + assertEquals(ov1.getTitle(), + "Overview " + alignFrameTitle + " Original"); OverviewPanel ov2 = this.af.openOverviewPanel(true); assertEquals(ov2.getTitle(), "Overview " + alignFrameTitle + " View 1"); } - + @Test(groups = "Functional") public void testSetOverviewTitle_automaticOverview() { - Cache.setProperty("SHOW_OVERVIEW", "true"); + Cache.setProperty("SHOW_OVERVIEW", "true"); AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded( "examples/uniref50.fa", DataSourceType.FILE); OverviewPanel ov1 = alignFrame.alignPanel.getOverviewPanel(); assertNotNull(ov1); String alignFrameTitle = alignFrame.getTitle(); assertEquals(ov1.getTitle(), "Overview " + alignFrameTitle); - + /* * on New View, existing overview should get " Original" added to title * and new view's automatic overview should have " View 1" added */ alignFrame.newView_actionPerformed(null); - assertEquals(ov1.getTitle(), "Overview " + alignFrameTitle + " Original"); + assertEquals(ov1.getTitle(), + "Overview " + alignFrameTitle + " Original"); OverviewPanel ov2 = alignFrame.alignPanel.getOverviewPanel(); assertNotNull(ov2); assertEquals(ov2.getTitle(), "Overview " + alignFrameTitle + " View 1"); diff --git a/test/jalview/gui/structurechooser/StructureChooserQuerySourceTest.java b/test/jalview/gui/structurechooser/StructureChooserQuerySourceTest.java index 16f4b7e..c21add1 100644 --- a/test/jalview/gui/structurechooser/StructureChooserQuerySourceTest.java +++ b/test/jalview/gui/structurechooser/StructureChooserQuerySourceTest.java @@ -250,8 +250,7 @@ public class StructureChooserQuerySourceTest } @SuppressWarnings("deprecation") - @Test(groups = - { "Functional" }) + @Test(groups = { "Functional" }) public void buildPDBQueryTest() { System.out.println("seq >>>> " + seq); @@ -299,8 +298,7 @@ public class StructureChooserQuerySourceTest } @SuppressWarnings("deprecation") - @Test(groups = - { "Functional" }) + @Test(groups = { "Functional" }) public void buildThreeDBQueryTest() { System.out.println("seq >>>> " + upSeq); diff --git a/test/jalview/io/CrossRef2xmlTests.java b/test/jalview/io/CrossRef2xmlTests.java index 0189ef2..c46477a 100644 --- a/test/jalview/io/CrossRef2xmlTests.java +++ b/test/jalview/io/CrossRef2xmlTests.java @@ -418,7 +418,7 @@ public class CrossRef2xmlTests extends Jalview2xmlBase cra_views2.add(af2.getViewport().getAlignPanel()); cra_views2.add(((jalview.gui.AlignViewport) af2 .getViewport().getCodingComplement()) - .getAlignPanel()); + .getAlignPanel()); } else @@ -426,7 +426,7 @@ public class CrossRef2xmlTests extends Jalview2xmlBase // bottom view, then top cra_views2.add(((jalview.gui.AlignViewport) af2 .getViewport().getCodingComplement()) - .getAlignPanel()); + .getAlignPanel()); cra_views2.add(af2.getViewport().getAlignPanel()); } Assert.assertEquals(cra_views2.size(), 2); diff --git a/test/jalview/io/StockholmFileTest.java b/test/jalview/io/StockholmFileTest.java index 6b2982d..10f368a 100644 --- a/test/jalview/io/StockholmFileTest.java +++ b/test/jalview/io/StockholmFileTest.java @@ -136,27 +136,30 @@ public class StockholmFileTest "Couldn't find Uniprot DBRef on re-imported sequence."); } + @Test(groups = { "Functional" }) public void descriptionLineOutput() throws Exception { // quick test that sequence description is exported & reimported SequenceI sq = new Sequence("FER2_SPIOL", "AASSDDDFFF"); - String expected_descr="This is a description !@&^%@£@"; + String expected_descr = "This is a description !@&^%@£@"; sq.setDescription(expected_descr); AppletFormatAdapter af = new AppletFormatAdapter(); String toStockholm = af.formatSequences(FileFormat.Stockholm, new Alignment(new SequenceI[] { sq }), false); System.out.println(toStockholm); - + // bleh - java.util.Regex sucks - assertTrue(toStockholm.contains(expected_descr),"Couldn't locate expected description srting in generated Stockholm file."); - + assertTrue(toStockholm.contains(expected_descr), + "Couldn't locate expected description srting in generated Stockholm file."); + AlignmentI fromStockholm = af.readFile(toStockholm, DataSourceType.PASTE, FileFormat.Stockholm); SequenceI importedSeq = fromStockholm.getSequenceAt(0); - assertEquals( "Description did not get reimported.",expected_descr,importedSeq.getDescription()); + assertEquals("Description did not get reimported.", expected_descr, + importedSeq.getDescription()); } /** diff --git a/test/jalview/project/Jalview2xmlTests.java b/test/jalview/project/Jalview2xmlTests.java index af52eda..37f946b 100644 --- a/test/jalview/project/Jalview2xmlTests.java +++ b/test/jalview/project/Jalview2xmlTests.java @@ -32,7 +32,9 @@ import java.awt.Color; import java.awt.Rectangle; import java.io.File; import java.io.IOException; +import java.math.BigInteger; import java.util.ArrayList; +import java.util.BitSet; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -59,6 +61,7 @@ import jalview.datamodel.ContactMatrix; import jalview.datamodel.ContactMatrixI; import jalview.datamodel.DBRefEntry; import jalview.datamodel.GeneLocus; +import jalview.datamodel.GroupSet; import jalview.datamodel.HiddenSequences; import jalview.datamodel.Mapping; import jalview.datamodel.PDBEntry; @@ -100,6 +103,7 @@ import jalview.util.MapList; import jalview.util.matcher.Condition; import jalview.viewmodel.AlignmentViewport; import jalview.viewmodel.seqfeatures.FeatureRendererModel; +import jalview.ws.datamodel.MappableContactMatrixI; import jalview.ws.datamodel.alphafold.PAEContactMatrix; @Test(singleThreaded = true) @@ -245,9 +249,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase boolean diffseqcols = false, diffgseqcols = false; SequenceI[] sqs = af.getViewport().getAlignment().getSequencesArray(); - for (int p = 0, - pSize = af.getViewport().getAlignment().getWidth(); p < pSize - && (!diffseqcols || !diffgseqcols); p++) + for (int p = 0, pSize = af.getViewport().getAlignment() + .getWidth(); p < pSize && (!diffseqcols || !diffgseqcols); p++) { if (_rcs.findColour(sqs[0].getCharAt(p), p, sqs[0], null, 0f) != _rcs .findColour(sqs[5].getCharAt(p), p, sqs[5], null, 0f)) @@ -266,9 +269,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase assertTrue(__rcs.isSeqAssociated(), "Group Annotation colourscheme wasn't sequence associated"); - for (int p = 0, - pSize = af.getViewport().getAlignment().getWidth(); p < pSize - && (!diffseqcols || !diffgseqcols); p++) + for (int p = 0, pSize = af.getViewport().getAlignment() + .getWidth(); p < pSize && (!diffseqcols || !diffgseqcols); p++) { if (_rgcs.findColour(sqs[1].getCharAt(p), p, sqs[1], null, 0f) != _rgcs.findColour(sqs[2].getCharAt(p), p, sqs[2], null, @@ -1571,10 +1573,37 @@ public class Jalview2xmlTests extends Jalview2xmlBase float[][] vals = ContactMatrix.fromFloatStringToContacts(content, sq.getLength(), sq.getLength()); assertEquals(vals[3][4], paevals[3][4]); - dummyMat.makeGroups(0.5f, false); + dummyMat.setGroupSet(GroupSet.makeGroups(dummyMat, 0.5f, false)); Assert.assertNotSame(dummyMat.getNewick(), ""); AlignmentAnnotation paeCm = sq.addContactList(dummyMat); al.addAnnotation(paeCm); + // verify store/restore of group bitsets + for (BitSet gp : dummyMat.getGroups()) + { + StringBuilder sb = new StringBuilder(); + for (long val : gp.toLongArray()) + { + if (sb.length() > 0) + { + sb.append(","); + } + sb.append(val); + } + String[] longvals = sb.toString().split(","); + long[] newlongvals = new long[longvals.length]; + for (int lv = 0; lv < longvals.length; lv++) + { + try + { + newlongvals[lv] = Long.valueOf(longvals[lv]); + } catch (Exception x) + { + Assert.fail("failed to deserialise bitset element "); + } + } + BitSet newGp = BitSet.valueOf(newlongvals); + assertTrue(gp.equals(newGp)); + } File tfile = File.createTempFile("testStoreAndRecoverPAEmatrix", ".jvp"); new Jalview2XML(false).saveState(tfile); @@ -1594,20 +1623,28 @@ public class Jalview2xmlTests extends Jalview2xmlBase ContactMatrixI restoredMat = newSeq .getContactMatrixFor(newSeq.getAnnotation()[0]); Assert.assertNotNull(restoredMat); + MapList oldMap = ((MappableContactMatrixI) dummyMat).getMapFor(sq); + MapList newMap = ((MappableContactMatrixI) restoredMat) + .getMapFor(newSeq); + Assert.assertEquals(oldMap.getFromRanges(), newMap.getFromRanges()); + Assert.assertEquals(oldMap.getToRanges(), newMap.getToRanges()); + Assert.assertEquals(oldMap.getFromRatio(), newMap.getFromRatio()); + Assert.assertEquals(oldMap.getToRatio(), newMap.getToRatio()); for (i = sq.getLength() - 1; i >= 0; i--) { ContactListI oldCM = dummyMat.getContactList(i), newCM = restoredMat.getContactList(i); for (int j = oldCM.getContactHeight(); j >= 0; j--) { - Assert.assertEquals(oldCM.getContactAt(j), newCM.getContactAt(j)); + double old_j = oldCM.getContactAt(j); + double new_j = newCM.getContactAt(j); + Assert.assertEquals(old_j, new_j); } } Assert.assertEquals(restoredMat.hasGroups(), dummyMat.hasGroups()); Assert.assertEquals(restoredMat.getGroups(), dummyMat.getGroups()); Assert.assertEquals(restoredMat.hasTree(), dummyMat.hasTree()); Assert.assertEquals(restoredMat.getNewick(), dummyMat.getNewick()); - } } diff --git a/test/jalview/renderer/OverviewRendererTest.java b/test/jalview/renderer/OverviewRendererTest.java index cdb69e3..829eec5 100644 --- a/test/jalview/renderer/OverviewRendererTest.java +++ b/test/jalview/renderer/OverviewRendererTest.java @@ -47,8 +47,8 @@ public class OverviewRendererTest public void testGetColumnColourFromSequence() { // gapColour, residueColour, hiddenColour - OverviewResColourFinder cf = new OverviewResColourFinder( - Color.PINK, Color.white, Color.green); + OverviewResColourFinder cf = new OverviewResColourFinder(Color.PINK, + Color.white, Color.green); Sequence seq1 = new Sequence("seq1", "PQ-RL-"); Sequence seq2 = new Sequence("seq2", "FVE"); AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 }); diff --git a/test/jalview/renderer/OverviewResColourFinderTest.java b/test/jalview/renderer/OverviewResColourFinderTest.java index 028777e..1c9daea 100644 --- a/test/jalview/renderer/OverviewResColourFinderTest.java +++ b/test/jalview/renderer/OverviewResColourFinderTest.java @@ -186,7 +186,8 @@ public class OverviewResColourFinderTest av.getResidueShading(), groups, seq, 2, null)); // use legacy colouring - rcf = new OverviewResColourFinder(Color.white, Color.lightGray, Color.red); + rcf = new OverviewResColourFinder(Color.white, Color.lightGray, + Color.red); // G in group specified as magenta in Zappo assertEquals(Color.magenta, rcf.getResidueColour(false, @@ -237,7 +238,8 @@ public class OverviewResColourFinderTest assertEquals(OverviewCanvas.OVERVIEW_DEFAULT_GAP, c); // legacy colouring set explicitly via constructor - rcf = new OverviewResColourFinder(Color.white, Color.lightGray, Color.red); + rcf = new OverviewResColourFinder(Color.white, Color.lightGray, + Color.red); shader = new ResidueShader(); // residues light gray @@ -273,7 +275,8 @@ public class OverviewResColourFinderTest assertEquals(Color.blue, c); // legacy colouring with colour scheme - rcf = new OverviewResColourFinder(Color.white, Color.lightGray, Color.red); + rcf = new OverviewResColourFinder(Color.white, Color.lightGray, + Color.red); // M residue pink c = rcf.getBoxColour(shader, seq, 0); diff --git a/test/jalview/renderer/seqfeatures/FeatureColourFinderTest.java b/test/jalview/renderer/seqfeatures/FeatureColourFinderTest.java index 637bbf4..3d8313d 100644 --- a/test/jalview/renderer/seqfeatures/FeatureColourFinderTest.java +++ b/test/jalview/renderer/seqfeatures/FeatureColourFinderTest.java @@ -169,7 +169,8 @@ public class FeatureColourFinderTest @Test(groups = "Functional") public void testFindFeatureColour_nestedFeatures() { - SequenceFeature sf1 = new SequenceFeature("domain", "peptide", 1, 120, 0f, null); + SequenceFeature sf1 = new SequenceFeature("domain", "peptide", 1, 120, + 0f, null); seq.addSequenceFeature(sf1); SequenceFeature sf2 = new SequenceFeature("domain", "binding", 10, 20, 0f, null); diff --git a/test/jalview/ws/dbsources/EBIAlphaFoldTest.java b/test/jalview/ws/dbsources/EBIAlphaFoldTest.java index 076ee7e..8cba8ab 100644 --- a/test/jalview/ws/dbsources/EBIAlphaFoldTest.java +++ b/test/jalview/ws/dbsources/EBIAlphaFoldTest.java @@ -6,13 +6,16 @@ import java.io.FileNotFoundException; import java.io.IOException; import org.json.simple.parser.ParseException; -import org.junit.Assert; +import org.testng.Assert; import org.testng.FileAssert; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; import jalview.gui.Desktop; import jalview.gui.JvOptionPane; import jalview.structure.StructureMapping; @@ -32,11 +35,13 @@ public class EBIAlphaFoldTest @DataProvider(name = "getExamplePAEfiles") public Object[][] getExamplePAEfiles() { - return new String[][] { { - "examples/test_fab41.result/test_fab41_predicted_aligned_error_v1.json" }, + return new String[][] { + // + { "examples/test_fab41.result/test_fab41_predicted_aligned_error_v1.json" }, { "examples/AlphaFold/AF-A0A1U8FD60-F1-predicted_aligned_error_v4.json" }, { "examples/AlphaFold/AF-Q5VSL9-F1-predicted_aligned_error_v4.json" }, - { "examples/AlphaFold/AF-Q5VSL9-F1-predicted_aligned_error_v4_2023.json" } }; + // + }; } @Test(groups = { "Functional" }, dataProvider = "getExamplePAEfiles") @@ -46,7 +51,7 @@ public class EBIAlphaFoldTest new Sequence("Dummy/1-2000", "ASDASDA"), EBIAlfaFold.parseJSONtoPAEContactMatrix( new FileInputStream(paeFile))); - Assert.assertNotEquals("No data from " + paeFile, cm.getMax(), 0); + Assert.assertNotEquals(cm.getMax(), 0.0f, "No data from " + paeFile); } @Test(groups = { "Functional" }, dataProvider = "getPDBandPAEfiles") @@ -62,8 +67,13 @@ public class EBIAlphaFoldTest FileAssert.assertFile(new File(paeFile), "Test file '" + paeFile + "' doesn't seem to exist"); } + SequenceI seq = new Sequence("Dummy/1-2000", "ASDASDA"); + AlignmentI al = new Alignment(new SequenceI[] { seq }); StructureSelectionManager ssm = StructureSelectionManager .getStructureSelectionManager(Desktop.instance); + StructureMapping sm = new StructureMapping(seq, pdbFile, null, null, + null, null); + ssm.addStructureMapping(sm); StructureMapping[] smArray = ssm.getMapping(pdbFile); @@ -71,13 +81,30 @@ public class EBIAlphaFoldTest { boolean done = EBIAlfaFold.importPaeJSONAsContactMatrixToStructure( smArray, paeInput, "label"); - Assert.assertTrue( - "Import of '" + paeFile + "' didn't complete successfully", - done); + Assert.assertTrue(done, + "Import of '" + paeFile + "' didn't complete successfully"); } catch (IOException | ParseException e) { - e.printStackTrace(); + Assert.fail("Exception importing paefile '" + paeFile + "'", e); } + } + @DataProvider(name = "getPDBandPAEfiles") + public Object[][] getPDBandPAEfiles() + { + return new String[][] { + // + /* + */ + { "examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb", + "examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3_scores.json" }, + { "examples/AlphaFold/AF-A0A1U8FD60-F1-model_v4.pdb", + "examples/AlphaFold/AF-A0A1U8FD60-F1-predicted_aligned_error_v4.json" }, + { "examples/AlphaFold/AF-Q5VSL9-F1-model_v4.pdb", + "examples/AlphaFold/AF-Q5VSL9-F1-predicted_aligned_error_v4.json" }, + /* + */ + }; } + }