public static int[][] generateSudoku(int size, int numbers) {
        final int S = size * size;
        final int[][] array = new int[S][S];
        
        final Random r = new Random();
//        int x = r.nextInt(S);
        final int x = 0;
        
        for (int i = 0; i < S; i++) {
            for (int j = 0; j < S; j++) {
                array[i][j] = (i*size + i/size + j + x) % (S) + 1;
            }
        }
        printArray(array, size);
        
        int tests = 1000;
        
//        while (tests-- > 0) {
//            System.out.println(tests);
        
        int temp;
        int reallytemp;
        for (int i = 0; i < S*S; i++) {
            switch (r.nextInt(6)) {
                case 0:
                    swapRows(array, size, temp = r.nextInt(S),
                                          r.nextInt(size) + temp/size*size);
//                    System.out.println("swapping " + temp + " with " + reallytemp);
                    break;
                case 1:
                    swapRowsBlock(array, size, r.nextInt(size),
                                               r.nextInt(size));
                    break;
                case 2:
                    swapColumnsBlock(array, size, r.nextInt(size),
                                                  r.nextInt(size));
                    break;
                case 3:
                    swapColumns(array, size, temp = r.nextInt(S),
                                             r.nextInt(size) + temp/size*size);
//                    System.out.println("swapping " + temp + " with " + reallytemp);
                    break;
                case 4:
                    reflectAxis(array, size, true);
                    break;
                case 5:
                    reflectAxis(array, size, false);
                    break;
            }
        }
        
//        if (!isValid(array, size)) {
//            System.out.println("=================================");
//            System.out.println("OPS!");
//            System.out.println("=================================");
//            printArray(array, size);
//            
//        }
//        
//        }
        
//        printArray(array, size);
//        reflectAxis(array, size, false);
        System.out.println("=================================");
        printArray(array, size);
//        reflectAxis(array, size, true);
//        reflectAxis(array, size, false);
//        System.out.println("=================================");
//        printArray(array, size);
        
        
        return null;
    }