blob: 88cddf9e9b92305f2f846b15c88e8e15096087f9 [file] [log] [blame]
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// @assertion abstract void sort([int compare(E a, E b)])
/// Sorts the list according to the order specified by the compare function.
/// The compare function must act as a Comparator.
/// The default List implementations use Comparable.compare if compare is omitted.
/// @description Checks sorting various integer arrays
/// (lengths: 8, 15, 16, 17, 31, 32, 33, 57, 79, 123, 127, 128, 129).
/// @author iefremov
library sort_A01_t04;
import "../../../Utils/expect.dart";
test(List<E> create<E>([int length, E fill])) {
void check(var actual0, var expected) {
List actual = create();
actual.addAll(actual0);
int c(var a, var b) {
return a < b ? -1 : (a == b ? 0 : 1);
}
actual.sort(c);
Expect.listEquals(expected, actual);
}
//length == 8
check([ 00, -01, -01, 01, 00, 00, -01, 00], [-01, -01, -01, 00, 00, 00, 00, 01]);
check([ 01, 00, 00, -01, 00, 01, -01, 00], [-01, -01, 00, 00, 00, 00, 01, 01]);
check([ 01, 00, 00, 00, -01, 00, -01, -01], [-01, -01, -01, 00, 00, 00, 00, 01]);
check([-01, -01, -01, -01, -01, -01, -01, 01], [-01, -01, -01, -01, -01, -01, -01, 01]);
check([-01, 00, 01, 01, 01, 01, -01, 00], [-01, -01, 00, 00, 01, 01, 01, 01]);
check([ 00, 01, 01, 01, 01, -01, 01, 01], [-01, 00, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 00, 00, 01, 00, -01, -01], [-01, -01, 00, 00, 00, 00, 00, 01]);
check([ 01, -01, 00, 01, 00, 00, 01, 01], [-01, 00, 00, 00, 01, 01, 01, 01]);
check([-01, 01, 01, -01, 01, 01, 01, -01], [-01, -01, -01, 01, 01, 01, 01, 01]);
check([ 01, 00, -01, 01, 01, -01, 00, 00], [-01, -01, 00, 00, 00, 01, 01, 01]);
//length == 8
check([ 23, -20, 08, -10, 12, 11, -16, 03], [-20, -16, -10, 03, 08, 11, 12, 23]);
check([-19, 00, -06, 02, 21, 14, 15, 03], [-19, -06, 00, 02, 03, 14, 15, 21]);
check([-14, 17, 22, 06, 06, -25, 04, -21], [-25, -21, -14, 04, 06, 06, 17, 22]);
check([ 05, 01, -24, -07, 15, 23, -17, 15], [-24, -17, -07, 01, 05, 15, 15, 23]);
check([-22, 18, -19, 17, 04, -10, -05, 10], [-22, -19, -10, -05, 04, 10, 17, 18]);
check([ 17, 15, -11, 13, 06, -20, -06, 19], [-20, -11, -06, 06, 13, 15, 17, 19]);
check([ 22, -07, 01, 03, -07, -20, 10, -25], [-25, -20, -07, -07, 01, 03, 10, 22]);
check([ 08, 11, -05, -02, 10, 03, -11, 15], [-11, -05, -02, 03, 08, 10, 11, 15]);
check([-03, -03, 08, -22, 14, -22, 14, 06], [-22, -22, -03, -03, 06, 08, 14, 14]);
check([ 20, -22, -05, 02, -15, 16, -04, -16], [-22, -16, -15, -05, -04, 02, 16, 20]);
//length == 15
check([ 00, -01, -01, 01, 00, 00, -01, 00, 01, 00, 00, -01, 00, 01, -01],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01]);
check([ 00, 01, 00, 00, 00, -01, 00, -01, -01, -01, -01, -01, -01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 01]);
check([-01, 01, -01, 00, 01, 01, 01, 01, -01, 00, 00, 01, 01, 01, 01],
[-01, -01, -01, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, 01, 01, 00, 00, 00, 00, 01, 00, -01, -01, 01, -01, 00, 01],
[-01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01]);
check([ 00, 00, 01, 01, -01, 01, 01, -01, 01, 01, 01, -01, 01, 00, -01],
[-01, -01, -01, -01, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, -01, 00, 00, 00, 01, 00, 00, 00, 00, 01, -01, 00, -01],
[-01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01]);
check([ 00, -01, -01, -01, -01, 00, 01, -01, 00, 00, 01, 00, 01, -01, 00],
[-01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 01, 01, 01]);
check([ 01, -01, -01, -01, 00, 01, 01, 01, -01, 00, 00, 01, -01, 01, 00],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01]);
check([ 01, -01, 01, -01, 00, -01, 00, 00, -01, -01, -01, -01, 01, 01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 01, 01, 01, 01]);
check([-01, -01, -01, 00, 00, -01, -01, 00, -01, 00, 01, 00, 00, 00, 00],
[-01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01]);
//length == 15
check([ 23, -20, 08, -10, 12, 11, -16, 03, -19, 00, -06, 02, 21, 14, 15],
[-20, -19, -16, -10, -06, 00, 02, 03, 08, 11, 12, 14, 15, 21, 23]);
check([ 03, -14, 17, 22, 06, 06, -25, 04, -21, 05, 01, -24, -07, 15, 23],
[-25, -24, -21, -14, -07, 01, 03, 04, 05, 06, 06, 15, 17, 22, 23]);
check([-17, 15, -22, 18, -19, 17, 04, -10, -05, 10, 17, 15, -11, 13, 06],
[-22, -19, -17, -11, -10, -05, 04, 06, 10, 13, 15, 15, 17, 17, 18]);
check([-20, -06, 19, 22, -07, 01, 03, -07, -20, 10, -25, 08, 11, -05, -02],
[-25, -20, -20, -07, -07, -06, -05, -02, 01, 03, 08, 10, 11, 19, 22]);
check([ 10, 03, -11, 15, -03, -03, 08, -22, 14, -22, 14, 06, 20, -22, -05],
[-22, -22, -22, -11, -05, -03, -03, 03, 06, 08, 10, 14, 14, 15, 20]);
check([ 02, -15, 16, -04, -16, -16, 22, 15, 04, -21, 00, 06, 12, -14, -24],
[-24, -21, -16, -16, -15, -14, -04, 00, 02, 04, 06, 12, 15, 16, 22]);
check([-12, 23, 07, 02, 14, -19, 24, -01, -16, 13, 02, -25, -04, 00, -19],
[-25, -19, -19, -16, -12, -04, -01, 00, 02, 02, 07, 13, 14, 23, 24]);
check([ 16, -21, -09, 09, 00, 01, 20, 00, -09, 01, 06, 18, -18, -06, -19],
[-21, -19, -18, -09, -09, -06, 00, 00, 01, 01, 06, 09, 16, 18, 20]);
check([-14, 07, -20, 20, -14, 21, -24, -13, -05, -13, -23, 24, -12, -02, -01],
[-24, -23, -20, -14, -14, -13, -13, -12, -05, -02, -01, 07, 20, 21, 24]);
check([-06, -08, 03, 12, -22, -19, -12, 24, 08, 06, 00, -11, 01, 10, 10],
[-22, -19, -12, -11, -08, -06, 00, 01, 03, 06, 08, 10, 10, 12, 24]);
//length == 16
check([ 00, -01, -01, 01, 00, 00, -01, 00, 01, 00, 00, -01, 00, 01, -01, 00],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01]);
check([ 01, 00, 00, 00, -01, 00, -01, -01, -01, -01, -01, -01, -01, -01, -01, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 01, 01]);
check([-01, 00, 01, 01, 01, 01, -01, 00, 00, 01, 01, 01, 01, -01, 01, 01],
[-01, -01, -01, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 00, 00, 01, 00, -01, -01, 01, -01, 00, 01, 00, 00, 01, 01],
[-01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01]);
check([-01, 01, 01, -01, 01, 01, 01, -01, 01, 00, -01, 01, 01, -01, 00, 00],
[-01, -01, -01, -01, -01, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 01, 00, 00, 00, 00, 01, -01, 00, -01, 00, -01, -01, -01, -01, 00],
[-01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01]);
check([ 01, -01, 00, 00, 01, 00, 01, -01, 00, 01, -01, -01, -01, 00, 01, 01],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01]);
check([ 01, -01, 00, 00, 01, -01, 01, 00, 01, -01, 01, -01, 00, -01, 00, 00],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01]);
check([-01, -01, -01, -01, 01, 01, -01, -01, -01, -01, 00, 00, -01, -01, 00, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 01, 01]);
check([ 00, 01, 00, 00, 00, 00, -01, 00, 01, -01, 01, 00, 00, -01, 01, 01],
[-01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01]);
//length == 16
check([ 23, -20, 08, -10, 12, 11, -16, 03, -19, 00, -06, 02, 21, 14, 15, 03],
[-20, -19, -16, -10, -06, 00, 02, 03, 03, 08, 11, 12, 14, 15, 21, 23]);
check([-14, 17, 22, 06, 06, -25, 04, -21, 05, 01, -24, -07, 15, 23, -17, 15],
[-25, -24, -21, -17, -14, -07, 01, 04, 05, 06, 06, 15, 15, 17, 22, 23]);
check([-22, 18, -19, 17, 04, -10, -05, 10, 17, 15, -11, 13, 06, -20, -06, 19],
[-22, -20, -19, -11, -10, -06, -05, 04, 06, 10, 13, 15, 17, 17, 18, 19]);
check([ 22, -07, 01, 03, -07, -20, 10, -25, 08, 11, -05, -02, 10, 03, -11, 15],
[-25, -20, -11, -07, -07, -05, -02, 01, 03, 03, 08, 10, 10, 11, 15, 22]);
check([-03, -03, 08, -22, 14, -22, 14, 06, 20, -22, -05, 02, -15, 16, -04, -16],
[-22, -22, -22, -16, -15, -05, -04, -03, -03, 02, 06, 08, 14, 14, 16, 20]);
check([-16, 22, 15, 04, -21, 00, 06, 12, -14, -24, -12, 23, 07, 02, 14, -19],
[-24, -21, -19, -16, -14, -12, 00, 02, 04, 06, 07, 12, 14, 15, 22, 23]);
check([ 24, -01, -16, 13, 02, -25, -04, 00, -19, 16, -21, -09, 09, 00, 01, 20],
[-25, -21, -19, -16, -09, -04, -01, 00, 00, 01, 02, 09, 13, 16, 20, 24]);
check([ 00, -09, 01, 06, 18, -18, -06, -19, -14, 07, -20, 20, -14, 21, -24, -13],
[-24, -20, -19, -18, -14, -14, -13, -09, -06, 00, 01, 06, 07, 18, 20, 21]);
check([-05, -13, -23, 24, -12, -02, -01, -06, -08, 03, 12, -22, -19, -12, 24, 08],
[-23, -22, -19, -13, -12, -12, -08, -06, -05, -02, -01, 03, 08, 12, 24, 24]);
check([ 06, 00, -11, 01, 10, 10, 08, 23, -06, 15, 20, 07, 13, 21, 19, -15],
[-15, -11, -06, 00, 01, 06, 07, 08, 10, 10, 13, 15, 19, 20, 21, 23]);
//length == 17
check([ 00, -01, -01, 01, 00, 00, -01, 00, 01, 00, 00, -01, 00, 01, -01, 00, 01],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01]);
check([ 00, 00, 00, -01, 00, -01, -01, -01, -01, -01, -01, -01, -01, -01, 01, -01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 01]);
check([ 01, 01, 01, 01, -01, 00, 00, 01, 01, 01, 01, -01, 01, 01, 00, 00, 00],
[-01, -01, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 01, 00, -01, -01, 01, -01, 00, 01, 00, 00, 01, 01, -01, 01, 01, -01],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, 01, -01, 01, 00, -01, 01, 01, -01, 00, 00, 00, 01, 00, 00, 00],
[-01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 01, -01, 00, -01, 00, -01, -01, -01, -01, 00, 01, -01, 00, 00, 01, 00],
[-01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01]);
check([ 01, -01, 00, 01, -01, -01, -01, 00, 01, 01, 01, -01, 00, 00, 01, -01, 01],
[-01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 01, -01, 01, -01, 00, -01, 00, 00, -01, -01, -01, -01, 01, 01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 01, 01, 01, 01]);
check([-01, -01, 00, 00, -01, -01, 00, -01, 00, 01, 00, 00, 00, 00, -01, 00, 01],
[-01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01]);
check([-01, 01, 00, 00, -01, 01, 01, 00, -01, 01, -01, -01, 00, 00, 00, 01, -01],
[-01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01]);
//length == 17
check([ 23, -20, 08, -10, 12, 11, -16, 03, -19, 00, -06, 02, 21, 14, 15, 03, -14],
[-20, -19, -16, -14, -10, -06, 00, 02, 03, 03, 08, 11, 12, 14, 15, 21, 23]);
check([ 17, 22, 06, 06, -25, 04, -21, 05, 01, -24, -07, 15, 23, -17, 15, -22, 18],
[-25, -24, -22, -21, -17, -07, 01, 04, 05, 06, 06, 15, 15, 17, 18, 22, 23]);
check([-19, 17, 04, -10, -05, 10, 17, 15, -11, 13, 06, -20, -06, 19, 22, -07, 01],
[-20, -19, -11, -10, -07, -06, -05, 01, 04, 06, 10, 13, 15, 17, 17, 19, 22]);
check([ 03, -07, -20, 10, -25, 08, 11, -05, -02, 10, 03, -11, 15, -03, -03, 08, -22],
[-25, -22, -20, -11, -07, -05, -03, -03, -02, 03, 03, 08, 08, 10, 10, 11, 15]);
check([ 14, -22, 14, 06, 20, -22, -05, 02, -15, 16, -04, -16, -16, 22, 15, 04, -21],
[-22, -22, -21, -16, -16, -15, -05, -04, 02, 04, 06, 14, 14, 15, 16, 20, 22]);
check([ 00, 06, 12, -14, -24, -12, 23, 07, 02, 14, -19, 24, -01, -16, 13, 02, -25],
[-25, -24, -19, -16, -14, -12, -01, 00, 02, 02, 06, 07, 12, 13, 14, 23, 24]);
check([-04, 00, -19, 16, -21, -09, 09, 00, 01, 20, 00, -09, 01, 06, 18, -18, -06],
[-21, -19, -18, -09, -09, -06, -04, 00, 00, 00, 01, 01, 06, 09, 16, 18, 20]);
check([-19, -14, 07, -20, 20, -14, 21, -24, -13, -05, -13, -23, 24, -12, -02, -01, -06],
[-24, -23, -20, -19, -14, -14, -13, -13, -12, -06, -05, -02, -01, 07, 20, 21, 24]);
check([-08, 03, 12, -22, -19, -12, 24, 08, 06, 00, -11, 01, 10, 10, 08, 23, -06],
[-22, -19, -12, -11, -08, -06, 00, 01, 03, 06, 08, 08, 10, 10, 12, 23, 24]);
check([ 15, 20, 07, 13, 21, 19, -15, -15, 23, -16, -02, -03, 11, 19, 16, -09, 07],
[-16, -15, -15, -09, -03, -02, 07, 07, 11, 13, 15, 16, 19, 19, 20, 21, 23]);
//length == 31
check([ 00, -01, -01, 01, 00, 00, -01, 00, 01, 00, 00, -01, 00, 01, -01, 00, 01, 00, 00, 00, -01, 00, -01, -01, -01, -01, -01, -01, -01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01]);
check([ 01, -01, 00, 01, 01, 01, 01, -01, 00, 00, 01, 01, 01, 01, -01, 01, 01, 00, 00, 00, 00, 01, 00, -01, -01, 01, -01, 00, 01, 00, 00],
[-01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, -01, 01, 01, -01, 01, 01, 01, -01, 01, 00, -01, 01, 01, -01, 00, 00, 00, 01, 00, 00, 00, 00, 01, -01, 00, -01, 00, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, 00, 01, -01, 00, 00, 01, 00, 01, -01, 00, 01, -01, -01, -01, 00, 01, 01, 01, -01, 00, 00, 01, -01, 01, 00, 01, -01, 01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, -01, 00, 00, -01, -01, -01, -01, 01, 01, -01, -01, -01, -01, 00, 00, -01, -01, 00, -01, 00, 01, 00, 00, 00, 00, -01, 00, 01, -01, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01]);
check([ 00, 00, -01, 01, 01, 00, -01, 01, -01, -01, 00, 00, 00, 01, -01, 01, -01, 00, 00, -01, 00, 00, -01, 01, -01, 01, -01, 01, -01, 00, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 01, 01, 01, 00, -01, 01, 01, 01, -01, -01, -01, 00, 01, -01, 01, 00, -01, -01, 00, 00, 01, 01, 00, -01, -01, 01, 01, -01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, -01, -01, 01, 00, -01, 00, -01, -01, 01, 00, -01, -01, 01, 01, 00, -01, -01, -01, 00, -01, -01, -01, -01, 00, -01, -01, 00, 00, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01]);
check([ 01, -01, 01, -01, 01, 00, 00, 01, 00, 01, 00, 01, -01, 00, 01, 01, -01, 01, 00, 00, 00, 00, 01, -01, 00, -01, -01, 01, 00, 01, 01],
[-01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, 01, 00, 00, -01, -01, -01, 01, 00, -01, 00, 00, 00, 00, 01, 01, 00, 01, -01, 01, 01, 00, 01, 01, -01, 01, 01, 00, -01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, 01, 00, 01, 01, 01, 01, 00, -01, 01, 01, 00, -01, 01, -01, 01, 01, -01, 01, 00, 01, 00, 00, -01, 01, 00, 00, 01, 00, 01],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 00, 00, 00, 00, -01, 00, 01, 01, 00, 00, 00, -01, 00, 01, 01, -01, 00, 01, -01, -01, -01, -01, 00, -01, 01, 01, 01, 01, 01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, -01, -01, 00, 01, -01, 01, 00, 01, 00, 01, 00, 01, 00, 00, 00, 01, 01, 01, -01, -01, 01, -01, 01, -01, -01, -01, -01, -01, 01, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, 01, 01, 01, -01, 00, 00, -01, -01, -01, 01, 01, 01, 00, 00, 01, -01, 00, -01, 01, -01, 01, 00, 00, 01, 01, 00, -01, 00, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 01, -01, 00, -01, 01, -01, -01, 01, -01, 01, -01, -01, -01, 01, -01, 01, -01, 00, 00, 00, 00, -01, 01, 00, -01, 00, 01, 01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 00, -01, -01, 00, 01, -01, 00, -01, 00, 00, 00, 01, 01, -01, -01, 00, -01, 01, -01, 01, -01, 00, 00, 01, 00, 01, 01, 00, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, -01, -01, 00, -01, 01, 00, 00, -01, 01, 01, 00, -01, 01, 00, -01, -01, 01, 00, -01, -01, -01, 01, 01, 01, 00, 00, 01, 00, -01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, -01, 00, 00, 00, -01, -01, 01, 00, 01, -01, -01, -01, 01, 01, -01, -01, 01, 01, 01, 00, -01, 00, -01, 01, 01, 00, 01, 00, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, 01, 01, -01, 01, -01, -01, 00, 01, -01, 00, 01, 00, 00, -01, 00, 01, -01, -01, 00, -01, 00, 00, -01, 00, -01, -01, -01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, -01, 00, 01, 01, -01, -01, 00, 01, 00, 00, -01, 01, -01, 00, 00, 01, 01, -01, -01, -01, 01, 01, 01, 00, 00, 01, 01, 01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 00, 00, 00, 01, 00, 01, -01, 00, 00, 00, 01, -01, 01, 00, 01, 01, 00, 01, 00, 00, 01, -01, -01, 00, 01, 00, -01, 01, 01],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, 00, -01, 00, -01, 01, -01, -01, -01, 01, 00, 01, 01, 01, 00, 00, 00, 01, 01, 01, -01, 00, 00, 00, -01, 01, 00, 00, -01, 00, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, 01, 00, 01, 01, 00, -01, -01, 01, -01, 01, 00, 01, 00, 00, -01, 00, -01, -01, -01, 00, 00, 01, -01, 01, 00, 00, -01, 01, -01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, -01, -01, 01, 00, 00, 00, -01, 00, -01, 01, 00, -01, -01, 01, 00, 00, 01, 01, -01, 00, 01, 00, 00, 00, -01, 00, -01, 00, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 00, 01, 00, -01, -01, -01, 00, 01, 00, -01, -01, 00, 01, 01, -01, 00, 00, -01, -01, 01, 01, 00, 00, -01, 01, -01, 00, 00, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, -01, 01, -01, -01, -01, -01, 00, 01, 01, 01, 01, 00, 00, 01, 01, 00, 00, 01, 00, 00, 01, -01, -01, -01, 01, 00, 01, 01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, -01, 01, 01, 00, 01, 00, 01, 00, -01, 01, 00, 01, 01, -01, 00, -01, 01, 01, 01, -01, 01, 01, -01, -01, 01, 00, -01, 00, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 00, 01, 01, 00, -01, 00, 01, -01, -01, 00, 00, 00, 00, -01, 01, 01, 00, 00, 01, -01, 00, 01, 01, -01, -01, 00, 01, -01, 00, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, 01, -01, 01, 00, 00, -01, 01, 00, 00, -01, -01, 01, -01, -01, 01, 00, 01, 01, 00, 00, 01, 00, 00, -01, 00, 01, 00, 01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, -01, -01, 01, 01, 00, -01, 01, 00, 01, -01, 00, -01, -01, -01, 00, -01, 01, -01, -01, 00, 00, -01, -01, 00, -01, 00, -01, 00, 00, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01]);
//length == 31
check([ 23, -20, 08, -10, 12, 11, -16, 03, -19, 00, -06, 02, 21, 14, 15, 03, -14, 17, 22, 06, 06, -25, 04, -21, 05, 01, -24, -07, 15, 23, -17],
[-25, -24, -21, -20, -19, -17, -16, -14, -10, -07, -06, 00, 01, 02, 03, 03, 04, 05, 06, 06, 08, 11, 12, 14, 15, 15, 17, 21, 22, 23, 23]);
check([ 15, -22, 18, -19, 17, 04, -10, -05, 10, 17, 15, -11, 13, 06, -20, -06, 19, 22, -07, 01, 03, -07, -20, 10, -25, 08, 11, -05, -02, 10, 03],
[-25, -22, -20, -20, -19, -11, -10, -07, -07, -06, -05, -05, -02, 01, 03, 03, 04, 06, 08, 10, 10, 10, 11, 13, 15, 15, 17, 17, 18, 19, 22]);
check([-11, 15, -03, -03, 08, -22, 14, -22, 14, 06, 20, -22, -05, 02, -15, 16, -04, -16, -16, 22, 15, 04, -21, 00, 06, 12, -14, -24, -12, 23, 07],
[-24, -22, -22, -22, -21, -16, -16, -15, -14, -12, -11, -05, -04, -03, -03, 00, 02, 04, 06, 06, 07, 08, 12, 14, 14, 15, 15, 16, 20, 22, 23]);
check([ 02, 14, -19, 24, -01, -16, 13, 02, -25, -04, 00, -19, 16, -21, -09, 09, 00, 01, 20, 00, -09, 01, 06, 18, -18, -06, -19, -14, 07, -20, 20],
[-25, -21, -20, -19, -19, -19, -18, -16, -14, -09, -09, -06, -04, -01, 00, 00, 00, 01, 01, 02, 02, 06, 07, 09, 13, 14, 16, 18, 20, 20, 24]);
check([-14, 21, -24, -13, -05, -13, -23, 24, -12, -02, -01, -06, -08, 03, 12, -22, -19, -12, 24, 08, 06, 00, -11, 01, 10, 10, 08, 23, -06, 15, 20],
[-24, -23, -22, -19, -14, -13, -13, -12, -12, -11, -08, -06, -06, -05, -02, -01, 00, 01, 03, 06, 08, 08, 10, 10, 12, 15, 20, 21, 23, 24, 24]);
check([ 07, 13, 21, 19, -15, -15, 23, -16, -02, -03, 11, 19, 16, -09, 07, 19, -01, 22, 20, -18, 06, -04, -01, -18, -17, -14, 17, -17, 08, 09, -22],
[-22, -18, -18, -17, -17, -16, -15, -15, -14, -09, -04, -03, -02, -01, -01, 06, 07, 07, 08, 09, 11, 13, 16, 17, 19, 19, 19, 20, 21, 22, 23]);
check([-10, -03, -24, -13, 07, -14, -15, 19, 12, 09, 05, 06, 00, 21, -12, -03, -02, -12, -08, 05, 19, 15, -19, -22, -25, -05, 21, -17, -22, 05, -14],
[-25, -24, -22, -22, -19, -17, -15, -14, -14, -13, -12, -12, -10, -08, -05, -03, -03, -02, 00, 05, 05, 05, 06, 07, 09, 12, 15, 19, 19, 21, 21]);
check([-07, -20, -11, 05, 12, 01, 16, 06, -12, 00, -12, 21, -22, -13, -15, 00, 10, 00, 19, -08, -06, 10, -01, -01, 10, 21, -03, 19, 24, -22, -18],
[-22, -22, -20, -18, -15, -13, -12, -12, -11, -08, -07, -06, -03, -01, -01, 00, 00, 00, 01, 05, 06, 10, 10, 10, 12, 16, 19, 19, 21, 21, 24]);
check([-08, -15, -03, 23, 22, -25, 16, 06, -12, -07, 19, -16, -02, -19, -04, 23, 18, 21, 20, -14, -08, 05, 12, 19, -10, 08, -09, -14, 07, -04, -04],
[-25, -19, -16, -15, -14, -14, -12, -10, -09, -08, -08, -07, -04, -04, -04, -03, -02, 05, 06, 07, 08, 12, 16, 18, 19, 19, 20, 21, 22, 23, 23]);
check([ 24, 06, 18, 24, 06, 20, 17, -13, -17, -14, -17, -06, 11, -08, 18, 12, -15, 16, 07, -04, -14, -13, -15, -20, 04, 18, -04, 18, 00, 20, -11],
[-20, -17, -17, -15, -15, -14, -14, -13, -13, -11, -08, -06, -04, -04, 00, 04, 06, 06, 07, 11, 12, 16, 17, 18, 18, 18, 18, 20, 20, 24, 24]);
check([ 02, 01, -16, 03, -18, -21, -04, -04, -11, 09, 07, 08, -05, 24, 03, -18, -14, -05, 14, 08, 06, -22, 18, 13, 08, 14, -14, 01, -11, -19, 17],
[-22, -21, -19, -18, -18, -16, -14, -14, -11, -11, -05, -05, -04, -04, 01, 01, 02, 03, 03, 06, 07, 08, 08, 08, 09, 13, 14, 14, 17, 18, 24]);
check([ 18, 08, -24, -03, 17, -20, 20, -09, -04, 04, 23, -21, -24, 22, 10, -14, -17, -20, -25, 18, 13, -19, 14, 01, 14, 03, 12, -08, 19, 21, -16],
[-25, -24, -24, -21, -20, -20, -19, -17, -16, -14, -09, -08, -04, -03, 01, 03, 04, 08, 10, 12, 13, 14, 14, 17, 18, 18, 19, 20, 21, 22, 23]);
check([ 13, 04, -13, -13, -02, -08, -18, 14, 13, 13, 12, 19, 16, 11, 06, -23, 20, 11, -20, 15, 01, -14, 04, -21, -23, -16, 19, -04, -21, 15, 07],
[-23, -23, -21, -21, -20, -18, -16, -14, -13, -13, -08, -04, -02, 01, 04, 04, 06, 07, 11, 11, 12, 13, 13, 13, 14, 15, 15, 16, 19, 19, 20]);
check([ 19, -04, 19, -17, 19, -12, -10, 09, -22, -20, -04, 24, 21, -17, 06, 24, -20, -08, -19, 22, 21, -08, 04, -25, -04, 13, 21, 17, 19, 11, -01],
[-25, -22, -20, -20, -19, -17, -17, -12, -10, -08, -08, -04, -04, -04, -01, 04, 06, 09, 11, 13, 17, 19, 19, 19, 19, 21, 21, 21, 22, 24, 24]);
check([ 15, -18, -07, 23, -23, 08, -10, 13, 11, -05, -16, 10, -06, -06, -09, -05, 01, 11, 01, -01, 07, 20, -20, 09, -09, 20, 06, -15, 15, -06, 09],
[-23, -20, -18, -16, -15, -10, -09, -09, -07, -06, -06, -06, -05, -05, -01, 01, 01, 06, 07, 08, 09, 09, 10, 11, 11, 13, 15, 15, 20, 20, 23]);
check([ 07, 02, -21, 08, 06, 12, 23, -06, -02, -04, 05, -15, 17, -25, 02, -13, 03, -12, 13, -21, 22, 10, -16, 08, -24, -20, -11, -14, 22, 09, 22],
[-25, -24, -21, -21, -20, -16, -15, -14, -13, -12, -11, -06, -04, -02, 02, 02, 03, 05, 06, 07, 08, 08, 09, 10, 12, 13, 17, 22, 22, 22, 23]);
check([ 06, -12, -22, -11, 19, 17, -12, -10, -10, 11, 20, 00, 03, 22, -21, 15, 01, -08, 05, 07, -09, -10, 19, -25, -07, 24, -09, 06, 23, -23, 05],
[-25, -23, -22, -21, -12, -12, -11, -10, -10, -10, -09, -09, -08, -07, 00, 01, 03, 05, 05, 06, 06, 07, 11, 15, 17, 19, 19, 20, 22, 23, 24]);
check([ 04, -10, 08, 19, -14, 00, -16, 01, 17, 20, -01, -06, 00, -04, -01, -10, 24, 18, 22, 09, -13, -11, 03, -13, 07, 02, 03, -10, 02, 08, 20],
[-16, -14, -13, -13, -11, -10, -10, -10, -06, -04, -01, -01, 00, 00, 01, 02, 02, 03, 03, 04, 07, 08, 08, 09, 17, 18, 19, 20, 20, 22, 24]);
check([-19, 23, 05, -23, -13, -20, -12, 15, 24, -17, -11, -07, 08, 13, 19, -25, 12, 15, 24, -04, -21, -12, 24, -09, 22, 03, 21, -11, -18, 04, -16],
[-25, -23, -21, -20, -19, -18, -17, -16, -13, -12, -12, -11, -11, -09, -07, -04, 03, 04, 05, 08, 12, 13, 15, 15, 19, 21, 22, 23, 24, 24, 24]);
check([-09, 05, 16, -07, 17, 21, 09, 09, 22, 17, 24, -07, 03, 12, -11, 05, 01, -21, 05, -25, -17, 20, -24, 01, 20, 05, 00, -16, 14, -19, -04],
[-25, -24, -21, -19, -17, -16, -11, -09, -07, -07, -04, 00, 01, 01, 03, 05, 05, 05, 05, 09, 09, 12, 14, 16, 17, 17, 20, 20, 21, 22, 24]);
check([-20, 11, -13, 01, 05, -14, -15, -10, -17, -21, -09, 01, 09, -22, 16, -10, 06, 22, 22, 06, -17, 17, 08, 09, 12, -10, -14, 24, -21, -07, -05],
[-22, -21, -21, -20, -17, -17, -15, -14, -14, -13, -10, -10, -10, -09, -07, -05, 01, 01, 05, 06, 06, 08, 09, 09, 11, 12, 16, 17, 22, 22, 24]);
check([-13, -19, 07, 13, 12, 18, -25, -21, -23, -19, -05, 05, 16, 00, -04, -17, -19, -04, -20, 15, 04, 24, -02, -10, 14, 13, 02, 13, 19, 22, -17],
[-25, -23, -21, -20, -19, -19, -19, -17, -17, -13, -10, -05, -04, -04, -02, 00, 02, 04, 05, 07, 12, 13, 13, 13, 14, 15, 16, 18, 19, 22, 24]);
check([-19, -22, 17, 21, 15, 11, 23, 21, 15, -20, -07, -05, 21, 18, 19, -21, -23, -10, -14, 17, 21, -15, -08, -12, -24, -20, 15, 14, -24, 14, 24],
[-24, -24, -23, -22, -21, -20, -20, -19, -15, -14, -12, -10, -08, -07, -05, 11, 14, 14, 15, 15, 15, 17, 17, 18, 19, 21, 21, 21, 21, 23, 24]);
check([-17, 18, 17, -19, 08, 03, -20, 07, -07, -15, -25, 15, -17, 21, 09, -11, 23, -24, 00, 17, 24, 12, -14, -12, 14, -07, -20, 03, -06, 20, 05],
[-25, -24, -20, -20, -19, -17, -17, -15, -14, -12, -11, -07, -07, -06, 00, 03, 03, 05, 07, 08, 09, 12, 14, 15, 17, 17, 18, 20, 21, 23, 24]);
check([ 04, 13, -03, 11, -02, -23, 16, -18, -03, -22, -17, -13, -14, -21, 24, 00, -21, -23, -25, 23, -21, 12, -16, -08, 03, 02, -01, -18, 23, -04, 14],
[-25, -23, -23, -22, -21, -21, -21, -18, -18, -17, -16, -14, -13, -08, -04, -03, -03, -02, -01, 00, 02, 03, 04, 11, 12, 13, 14, 16, 23, 23, 24]);
check([ 03, -14, -14, -11, 12, -12, -18, 19, 10, -15, -21, 24, -04, -15, 23, 23, -09, -22, -25, -11, -18, 14, 00, 01, -07, -21, -25, 02, -22, -01, -09],
[-25, -25, -22, -22, -21, -21, -18, -18, -15, -15, -14, -14, -12, -11, -11, -09, -09, -07, -04, -01, 00, 01, 02, 03, 10, 12, 14, 19, 23, 23, 24]);
check([ 06, 10, 02, 22, -03, 17, -21, -06, 02, -11, -02, 03, 12, 09, 04, 10, -25, 07, 12, -08, 16, 01, 19, -08, 19, 24, -06, -04, -21, 18, 14],
[-25, -21, -21, -11, -08, -08, -06, -06, -04, -03, -02, 01, 02, 02, 03, 04, 06, 07, 09, 10, 10, 12, 12, 14, 16, 17, 18, 19, 19, 22, 24]);
check([ 10, 04, -09, 09, -22, -17, 13, -03, 12, -21, 23, -07, 16, 09, 22, 03, 09, 06, -10, -22, -03, 16, 23, 14, 13, 24, -17, -14, -22, -21, -24],
[-24, -22, -22, -22, -21, -21, -17, -17, -14, -10, -09, -07, -03, -03, 03, 04, 06, 09, 09, 09, 10, 12, 13, 13, 14, 16, 16, 22, 23, 23, 24]);
check([ 15, 10, -06, 01, 15, 05, -11, -10, -06, -07, -12, 12, -14, 22, 09, 16, 08, -10, -17, 12, 12, -24, 12, 03, 14, 13, 14, -22, 18, 18, -21],
[-24, -22, -21, -17, -14, -12, -11, -10, -10, -07, -06, -06, 01, 03, 05, 08, 09, 10, 12, 12, 12, 12, 13, 14, 14, 15, 15, 16, 18, 18, 22]);
check([ 10, 05, -02, -14, -05, -22, 00, 10, -02, 20, 23, -15, -17, 22, 22, -24, 06, -11, -16, -05, -23, -15, -16, 07, -23, 22, -04, -20, 15, -09, -16],
[-24, -23, -23, -22, -20, -17, -16, -16, -16, -15, -15, -14, -11, -09, -05, -05, -04, -02, -02, 00, 05, 06, 07, 10, 10, 15, 20, 22, 22, 22, 23]);
//length == 32
check([ 00, -01, -01, 01, 00, 00, -01, 00, 01, 00, 00, -01, 00, 01, -01, 00, 01, 00, 00, 00, -01, 00, -01, -01, -01, -01, -01, -01, -01, -01, -01, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01]);
check([-01, 00, 01, 01, 01, 01, -01, 00, 00, 01, 01, 01, 01, -01, 01, 01, 00, 00, 00, 00, 01, 00, -01, -01, 01, -01, 00, 01, 00, 00, 01, 01],
[-01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, 01, 01, -01, 01, 01, 01, -01, 01, 00, -01, 01, 01, -01, 00, 00, 00, 01, 00, 00, 00, 00, 01, -01, 00, -01, 00, -01, -01, -01, -01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, -01, 00, 00, 01, 00, 01, -01, 00, 01, -01, -01, -01, 00, 01, 01, 01, -01, 00, 00, 01, -01, 01, 00, 01, -01, 01, -01, 00, -01, 00, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, -01, -01, 01, 01, -01, -01, -01, -01, 00, 00, -01, -01, 00, -01, 00, 01, 00, 00, 00, 00, -01, 00, 01, -01, 01, 00, 00, -01, 01, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, -01, 01, -01, -01, 00, 00, 00, 01, -01, 01, -01, 00, 00, -01, 00, 00, -01, 01, -01, 01, -01, 01, -01, 00, 00, 00, 01, 01, 01, 00, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, 01, -01, -01, -01, 00, 01, -01, 01, 00, -01, -01, 00, 00, 01, 01, 00, -01, -01, 01, 01, -01, -01, -01, 00, 00, -01, -01, 01, 00, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, -01, -01, 01, 00, -01, -01, 01, 01, 00, -01, -01, -01, 00, -01, -01, -01, -01, 00, -01, -01, 00, 00, 00, 01, -01, 01, -01, 01, 00, 00, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 01, 00, 01, -01, 00, 01, 01, -01, 01, 00, 00, 00, 00, 01, -01, 00, -01, -01, 01, 00, 01, 01, -01, 01, 00, 00, -01, -01, -01, 01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, 00, 00, 00, 00, 01, 01, 00, 01, -01, 01, 01, 00, 01, 01, -01, 01, 01, 00, -01, -01, -01, 01, 01, 01, 00, 01, 01, 01, 01, 00, -01],
[-01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, 00, -01, 01, -01, 01, 01, -01, 01, 00, 01, 00, 00, -01, 01, 00, 00, 01, 00, 01, 01, 00, 00, 00, 00, -01, 00, 01, 01, 00, 00],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, -01, 00, 01, 01, -01, 00, 01, -01, -01, -01, -01, 00, -01, 01, 01, 01, 01, 01, 00, 01, -01, -01, 00, 01, -01, 01, 00, 01, 00, 01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 00, 00, 00, 01, 01, 01, -01, -01, 01, -01, 01, -01, -01, -01, -01, -01, 01, 01, -01, -01, 01, 01, 01, -01, 00, 00, -01, -01, -01, 01, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 00, 00, 01, -01, 00, -01, 01, -01, 01, 00, 00, 01, 01, 00, -01, 00, -01, 00, 00, 01, -01, 00, -01, 01, -01, -01, 01, -01, 01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, 01, -01, 01, -01, 00, 00, 00, 00, -01, 01, 00, -01, 00, 01, 01, 00, 00, 00, 00, -01, -01, 00, 01, -01, 00, -01, 00, 00, 00, 01, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, 00, -01, 01, -01, 01, -01, 00, 00, 01, 00, 01, 01, 00, 00, 00, -01, -01, 00, -01, 01, 00, 00, -01, 01, 01, 00, -01, 01, 00, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, 01, 00, -01, -01, -01, 01, 01, 01, 00, 00, 01, 00, -01, 00, 01, -01, 00, 00, 00, -01, -01, 01, 00, 01, -01, -01, -01, 01, 01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, 01, 00, -01, 00, -01, 01, 01, 00, 01, 00, -01, -01, -01, -01, 01, 01, -01, 01, -01, -01, 00, 01, -01, 00, 01, 00, 00, -01, 00, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, 00, -01, 00, 00, -01, 00, -01, -01, -01, -01, -01, 01, 01, -01, 00, 01, 01, -01, -01, 00, 01, 00, 00, -01, 01, -01, 00, 00, 01, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, -01, -01, 01, 01, 01, 00, 00, 01, 01, 01, 00, 00, 00, 00, 00, 00, 01, 00, 01, -01, 00, 00, 00, 01, -01, 01, 00, 01, 01, 00, 01],
[-01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 01, -01, -01, 00, 01, 00, -01, 01, 01, -01, 00, -01, 00, -01, 01, -01, -01, -01, 01, 00, 01, 01, 01, 00, 00, 00, 01, 01, 01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 00, -01, 01, 00, 00, -01, 00, -01, -01, 01, 00, 01, 01, 00, -01, -01, 01, -01, 01, 00, 01, 00, 00, -01, 00, -01, -01, -01, 00, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, -01, 01, 00, 00, -01, 01, -01, 00, -01, -01, -01, -01, 01, 00, 00, 00, -01, 00, -01, 01, 00, -01, -01, 01, 00, 00, 01, 01, -01, 00, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 00, -01, 00, -01, 00, 00, 00, 00, 00, 01, 00, -01, -01, -01, 00, 01, 00, -01, -01, 00, 01, 01, -01, 00, 00, -01, -01, 01, 01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01]);
check([ 00, -01, 01, -01, 00, 00, 01, -01, -01, -01, 01, -01, -01, -01, -01, 00, 01, 01, 01, 01, 00, 00, 01, 01, 00, 00, 01, 00, 00, 01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([-01, 01, 00, 01, 01, -01, 01, 01, -01, 01, 01, 00, 01, 00, 01, 00, -01, 01, 00, 01, 01, -01, 00, -01, 01, 01, 01, -01, 01, 01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 00, -01, 00, 01, 01, 00, 01, 01, 00, -01, 00, 01, -01, -01, 00, 00, 00, 00, -01, 01, 01, 00, 00, 01, -01, 00, 01, 01, -01, -01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, -01, 00, 01, -01, -01, 01, -01, 01, 00, 00, -01, 01, 00, 00, -01, -01, 01, -01, -01, 01, 00, 01, 01, 00, 00, 01, 00, 00, -01, 00, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 01, 00, 01, -01, -01, 01, 01, 00, -01, 01, 00, 01, -01, 00, -01, -01, -01, 00, -01, 01, -01, -01, 00, 00, -01, -01, 00, -01, 00, -01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, -01, 00, 01, -01, 00, 00, -01, 00, -01, -01, -01, 01, 00, -01, -01, 01, 00, -01, 01, 00, 01, 00, 00, 01, 01, 01, 00, 01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
//length == 32
check([ 23, -20, 08, -10, 12, 11, -16, 03, -19, 00, -06, 02, 21, 14, 15, 03, -14, 17, 22, 06, 06, -25, 04, -21, 05, 01, -24, -07, 15, 23, -17, 15],
[-25, -24, -21, -20, -19, -17, -16, -14, -10, -07, -06, 00, 01, 02, 03, 03, 04, 05, 06, 06, 08, 11, 12, 14, 15, 15, 15, 17, 21, 22, 23, 23]);
check([-22, 18, -19, 17, 04, -10, -05, 10, 17, 15, -11, 13, 06, -20, -06, 19, 22, -07, 01, 03, -07, -20, 10, -25, 08, 11, -05, -02, 10, 03, -11, 15],
[-25, -22, -20, -20, -19, -11, -11, -10, -07, -07, -06, -05, -05, -02, 01, 03, 03, 04, 06, 08, 10, 10, 10, 11, 13, 15, 15, 17, 17, 18, 19, 22]);
check([-03, -03, 08, -22, 14, -22, 14, 06, 20, -22, -05, 02, -15, 16, -04, -16, -16, 22, 15, 04, -21, 00, 06, 12, -14, -24, -12, 23, 07, 02, 14, -19],
[-24, -22, -22, -22, -21, -19, -16, -16, -15, -14, -12, -05, -04, -03, -03, 00, 02, 02, 04, 06, 06, 07, 08, 12, 14, 14, 14, 15, 16, 20, 22, 23]);
check([ 24, -01, -16, 13, 02, -25, -04, 00, -19, 16, -21, -09, 09, 00, 01, 20, 00, -09, 01, 06, 18, -18, -06, -19, -14, 07, -20, 20, -14, 21, -24, -13],
[-25, -24, -21, -20, -19, -19, -18, -16, -14, -14, -13, -09, -09, -06, -04, -01, 00, 00, 00, 01, 01, 02, 06, 07, 09, 13, 16, 18, 20, 20, 21, 24]);
check([-05, -13, -23, 24, -12, -02, -01, -06, -08, 03, 12, -22, -19, -12, 24, 08, 06, 00, -11, 01, 10, 10, 08, 23, -06, 15, 20, 07, 13, 21, 19, -15],
[-23, -22, -19, -15, -13, -12, -12, -11, -08, -06, -06, -05, -02, -01, 00, 01, 03, 06, 07, 08, 08, 10, 10, 12, 13, 15, 19, 20, 21, 23, 24, 24]);
check([-15, 23, -16, -02, -03, 11, 19, 16, -09, 07, 19, -01, 22, 20, -18, 06, -04, -01, -18, -17, -14, 17, -17, 08, 09, -22, -10, -03, -24, -13, 07, -14],
[-24, -22, -18, -18, -17, -17, -16, -15, -14, -14, -13, -10, -09, -04, -03, -03, -02, -01, -01, 06, 07, 07, 08, 09, 11, 16, 17, 19, 19, 20, 22, 23]);
check([-15, 19, 12, 09, 05, 06, 00, 21, -12, -03, -02, -12, -08, 05, 19, 15, -19, -22, -25, -05, 21, -17, -22, 05, -14, -07, -20, -11, 05, 12, 01, 16],
[-25, -22, -22, -20, -19, -17, -15, -14, -12, -12, -11, -08, -07, -05, -03, -02, 00, 01, 05, 05, 05, 05, 06, 09, 12, 12, 15, 16, 19, 19, 21, 21]);
check([ 06, -12, 00, -12, 21, -22, -13, -15, 00, 10, 00, 19, -08, -06, 10, -01, -01, 10, 21, -03, 19, 24, -22, -18, -08, -15, -03, 23, 22, -25, 16, 06],
[-25, -22, -22, -18, -15, -15, -13, -12, -12, -08, -08, -06, -03, -03, -01, -01, 00, 00, 00, 06, 06, 10, 10, 10, 16, 19, 19, 21, 21, 22, 23, 24]);
check([-12, -07, 19, -16, -02, -19, -04, 23, 18, 21, 20, -14, -08, 05, 12, 19, -10, 08, -09, -14, 07, -04, -04, 24, 06, 18, 24, 06, 20, 17, -13, -17],
[-19, -17, -16, -14, -14, -13, -12, -10, -09, -08, -07, -04, -04, -04, -02, 05, 06, 06, 07, 08, 12, 17, 18, 18, 19, 19, 20, 20, 21, 23, 24, 24]);
check([-14, -17, -06, 11, -08, 18, 12, -15, 16, 07, -04, -14, -13, -15, -20, 04, 18, -04, 18, 00, 20, -11, 02, 01, -16, 03, -18, -21, -04, -04, -11, 09],
[-21, -20, -18, -17, -16, -15, -15, -14, -14, -13, -11, -11, -08, -06, -04, -04, -04, -04, 00, 01, 02, 03, 04, 07, 09, 11, 12, 16, 18, 18, 18, 20]);
check([ 07, 08, -05, 24, 03, -18, -14, -05, 14, 08, 06, -22, 18, 13, 08, 14, -14, 01, -11, -19, 17, 18, 08, -24, -03, 17, -20, 20, -09, -04, 04, 23],
[-24, -22, -20, -19, -18, -14, -14, -11, -09, -05, -05, -04, -03, 01, 03, 04, 06, 07, 08, 08, 08, 08, 13, 14, 14, 17, 17, 18, 18, 20, 23, 24]);
check([-21, -24, 22, 10, -14, -17, -20, -25, 18, 13, -19, 14, 01, 14, 03, 12, -08, 19, 21, -16, 13, 04, -13, -13, -02, -08, -18, 14, 13, 13, 12, 19],
[-25, -24, -21, -20, -19, -18, -17, -16, -14, -13, -13, -08, -08, -02, 01, 03, 04, 10, 12, 12, 13, 13, 13, 13, 14, 14, 14, 18, 19, 19, 21, 22]);
check([ 16, 11, 06, -23, 20, 11, -20, 15, 01, -14, 04, -21, -23, -16, 19, -04, -21, 15, 07, 19, -04, 19, -17, 19, -12, -10, 09, -22, -20, -04, 24, 21],
[-23, -23, -22, -21, -21, -20, -20, -17, -16, -14, -12, -10, -04, -04, -04, 01, 04, 06, 07, 09, 11, 11, 15, 15, 16, 19, 19, 19, 19, 20, 21, 24]);
check([-17, 06, 24, -20, -08, -19, 22, 21, -08, 04, -25, -04, 13, 21, 17, 19, 11, -01, 15, -18, -07, 23, -23, 08, -10, 13, 11, -05, -16, 10, -06, -06],
[-25, -23, -20, -19, -18, -17, -16, -10, -08, -08, -07, -06, -06, -05, -04, -01, 04, 06, 08, 10, 11, 11, 13, 13, 15, 17, 19, 21, 21, 22, 23, 24]);
check([-09, -05, 01, 11, 01, -01, 07, 20, -20, 09, -09, 20, 06, -15, 15, -06, 09, 07, 02, -21, 08, 06, 12, 23, -06, -02, -04, 05, -15, 17, -25, 02],
[-25, -21, -20, -15, -15, -09, -09, -06, -06, -05, -04, -02, -01, 01, 01, 02, 02, 05, 06, 06, 07, 07, 08, 09, 09, 11, 12, 15, 17, 20, 20, 23]);
check([-13, 03, -12, 13, -21, 22, 10, -16, 08, -24, -20, -11, -14, 22, 09, 22, 06, -12, -22, -11, 19, 17, -12, -10, -10, 11, 20, 00, 03, 22, -21, 15],
[-24, -22, -21, -21, -20, -16, -14, -13, -12, -12, -12, -11, -11, -10, -10, 00, 03, 03, 06, 08, 09, 10, 11, 13, 15, 17, 19, 20, 22, 22, 22, 22]);
check([ 01, -08, 05, 07, -09, -10, 19, -25, -07, 24, -09, 06, 23, -23, 05, 04, -10, 08, 19, -14, 00, -16, 01, 17, 20, -01, -06, 00, -04, -01, -10, 24],
[-25, -23, -16, -14, -10, -10, -10, -09, -09, -08, -07, -06, -04, -01, -01, 00, 00, 01, 01, 04, 05, 05, 06, 07, 08, 17, 19, 19, 20, 23, 24, 24]);
check([ 18, 22, 09, -13, -11, 03, -13, 07, 02, 03, -10, 02, 08, 20, -19, 23, 05, -23, -13, -20, -12, 15, 24, -17, -11, -07, 08, 13, 19, -25, 12, 15],
[-25, -23, -20, -19, -17, -13, -13, -13, -12, -11, -11, -10, -07, 02, 02, 03, 03, 05, 07, 08, 08, 09, 12, 13, 15, 15, 18, 19, 20, 22, 23, 24]);
check([ 24, -04, -21, -12, 24, -09, 22, 03, 21, -11, -18, 04, -16, -09, 05, 16, -07, 17, 21, 09, 09, 22, 17, 24, -07, 03, 12, -11, 05, 01, -21, 05],
[-21, -21, -18, -16, -12, -11, -11, -09, -09, -07, -07, -04, 01, 03, 03, 04, 05, 05, 05, 09, 09, 12, 16, 17, 17, 21, 21, 22, 22, 24, 24, 24]);
check([-25, -17, 20, -24, 01, 20, 05, 00, -16, 14, -19, -04, -20, 11, -13, 01, 05, -14, -15, -10, -17, -21, -09, 01, 09, -22, 16, -10, 06, 22, 22, 06],
[-25, -24, -22, -21, -20, -19, -17, -17, -16, -15, -14, -13, -10, -10, -09, -04, 00, 01, 01, 01, 05, 05, 06, 06, 09, 11, 14, 16, 20, 20, 22, 22]);
check([-17, 17, 08, 09, 12, -10, -14, 24, -21, -07, -05, -13, -19, 07, 13, 12, 18, -25, -21, -23, -19, -05, 05, 16, 00, -04, -17, -19, -04, -20, 15, 04],
[-25, -23, -21, -21, -20, -19, -19, -19, -17, -17, -14, -13, -10, -07, -05, -05, -04, -04, 00, 04, 05, 07, 08, 09, 12, 12, 13, 15, 16, 17, 18, 24]);
check([ 24, -02, -10, 14, 13, 02, 13, 19, 22, -17, -19, -22, 17, 21, 15, 11, 23, 21, 15, -20, -07, -05, 21, 18, 19, -21, -23, -10, -14, 17, 21, -15],
[-23, -22, -21, -20, -19, -17, -15, -14, -10, -10, -07, -05, -02, 02, 11, 13, 13, 14, 15, 15, 17, 17, 18, 19, 19, 21, 21, 21, 21, 22, 23, 24]);
check([-08, -12, -24, -20, 15, 14, -24, 14, 24, -17, 18, 17, -19, 08, 03, -20, 07, -07, -15, -25, 15, -17, 21, 09, -11, 23, -24, 00, 17, 24, 12, -14],
[-25, -24, -24, -24, -20, -20, -19, -17, -17, -15, -14, -12, -11, -08, -07, 00, 03, 07, 08, 09, 12, 14, 14, 15, 15, 17, 17, 18, 21, 23, 24, 24]);
check([-12, 14, -07, -20, 03, -06, 20, 05, 04, 13, -03, 11, -02, -23, 16, -18, -03, -22, -17, -13, -14, -21, 24, 00, -21, -23, -25, 23, -21, 12, -16, -08],
[-25, -23, -23, -22, -21, -21, -21, -20, -18, -17, -16, -14, -13, -12, -08, -07, -06, -03, -03, -02, 00, 03, 04, 05, 11, 12, 13, 14, 16, 20, 23, 24]);
check([ 03, 02, -01, -18, 23, -04, 14, 03, -14, -14, -11, 12, -12, -18, 19, 10, -15, -21, 24, -04, -15, 23, 23, -09, -22, -25, -11, -18, 14, 00, 01, -07],
[-25, -22, -21, -18, -18, -18, -15, -15, -14, -14, -12, -11, -11, -09, -07, -04, -04, -01, 00, 01, 02, 03, 03, 10, 12, 14, 14, 19, 23, 23, 23, 24]);
check([-21, -25, 02, -22, -01, -09, 06, 10, 02, 22, -03, 17, -21, -06, 02, -11, -02, 03, 12, 09, 04, 10, -25, 07, 12, -08, 16, 01, 19, -08, 19, 24],
[-25, -25, -22, -21, -21, -11, -09, -08, -08, -06, -03, -02, -01, 01, 02, 02, 02, 03, 04, 06, 07, 09, 10, 10, 12, 12, 16, 17, 19, 19, 22, 24]);
check([-06, -04, -21, 18, 14, 10, 04, -09, 09, -22, -17, 13, -03, 12, -21, 23, -07, 16, 09, 22, 03, 09, 06, -10, -22, -03, 16, 23, 14, 13, 24, -17],
[-22, -22, -21, -21, -17, -17, -10, -09, -07, -06, -04, -03, -03, 03, 04, 06, 09, 09, 09, 10, 12, 13, 13, 14, 14, 16, 16, 18, 22, 23, 23, 24]);
check([-14, -22, -21, -24, 15, 10, -06, 01, 15, 05, -11, -10, -06, -07, -12, 12, -14, 22, 09, 16, 08, -10, -17, 12, 12, -24, 12, 03, 14, 13, 14, -22],
[-24, -24, -22, -22, -21, -17, -14, -14, -12, -11, -10, -10, -07, -06, -06, 01, 03, 05, 08, 09, 10, 12, 12, 12, 12, 13, 14, 14, 15, 15, 16, 22]);
check([ 18, 18, -21, 10, 05, -02, -14, -05, -22, 00, 10, -02, 20, 23, -15, -17, 22, 22, -24, 06, -11, -16, -05, -23, -15, -16, 07, -23, 22, -04, -20, 15],
[-24, -23, -23, -22, -21, -20, -17, -16, -16, -15, -15, -14, -11, -05, -05, -04, -02, -02, 00, 05, 06, 07, 10, 10, 15, 18, 18, 20, 22, 22, 22, 23]);
check([-09, -16, 00, 21, 09, 13, -08, 13, -12, -21, -12, -15, -20, 00, -05, -23, -01, -04, 10, 14, 05, -20, 18, 17, -11, 00, 19, -12, 22, 24, -22, -10],
[-23, -22, -21, -20, -20, -16, -15, -12, -12, -12, -11, -10, -09, -08, -05, -04, -01, 00, 00, 00, 05, 09, 10, 13, 13, 14, 17, 18, 19, 21, 22, 24]);
//length == 33
check([ 00, -01, -01, 01, 00, 00, -01, 00, 01, 00, 00, -01, 00, 01, -01, 00, 01, 00, 00, 00, -01, 00, -01, -01, -01, -01, -01, -01, -01, -01, -01, 01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01]);
check([ 00, 01, 01, 01, 01, -01, 00, 00, 01, 01, 01, 01, -01, 01, 01, 00, 00, 00, 00, 01, 00, -01, -01, 01, -01, 00, 01, 00, 00, 01, 01, -01, 01],
[-01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, -01, 01, 01, 01, -01, 01, 00, -01, 01, 01, -01, 00, 00, 00, 01, 00, 00, 00, 00, 01, -01, 00, -01, 00, -01, -01, -01, -01, 00, 01, -01, 00],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 01, 00, 01, -01, 00, 01, -01, -01, -01, 00, 01, 01, 01, -01, 00, 00, 01, -01, 01, 00, 01, -01, 01, -01, 00, -01, 00, 00, -01, -01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, -01, -01, -01, -01, 00, 00, -01, -01, 00, -01, 00, 01, 00, 00, 00, 00, -01, 00, 01, -01, 01, 00, 00, -01, 01, 01, 00, -01, 01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 00, 00, 01, -01, 01, -01, 00, 00, -01, 00, 00, -01, 01, -01, 01, -01, 01, -01, 00, 00, 00, 01, 01, 01, 00, -01, 01, 01, 01, -01, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 00, 01, -01, 01, 00, -01, -01, 00, 00, 01, 01, 00, -01, -01, 01, 01, -01, -01, -01, 00, 00, -01, -01, 01, 00, -01, 00, -01, -01, 01, 00, -01, -01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 01, 01, 01, 01, 01, 01, 01]);
check([ 01, 01, 00, -01, -01, -01, 00, -01, -01, -01, -01, 00, -01, -01, 00, 00, 00, 01, -01, 01, -01, 01, 00, 00, 01, 00, 01, 00, 01, -01, 00, 01, 01],
[-01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01, -01,