Проблема с четырьмя королевами с использованием повторного опроса

Я работаю над проблемой 8 ферзей, но я застрял. Я не хочу кода. Я хотел бы руководство и указания, чтобы понять, как решить эту проблему, используя рекурсию backtracking.

Программа должна перечислять все решения проблемы N-queens, рисуя расположение ферзей в ASCII, как два решения здесь.

До сих пор мой псевдокод:

void queen(int n){

   for( int i = 0; i < n; i++){

       place queen[ i ] on row i;

       for(int j = 0 ; j < n ; j++){
               if( queen[ i ] is not in the same column as queen[0] through queen[ i - 1 ]  &&
                   queen[ i ] is not on the same major diagonal with queen[0] through queen[ i -1 ]  &&
                   queen[ i ] is not on the same minor diagonal with queen[0] through queen[ i -1 ]  ) {
                              print 'Q ';
                   }
               else{
                              print '* ';
                   }

               System.out.println();
         }

         System.out.println();

  }

}

В моем псевдокоде нет какой-либо обратной рекурсии, потому что я не знаю, как это сделать.

Любая помощь очень ценится. Нет кода, пожалуйста.

(Обновление в ответ на Nemo):

solver(int n, Board b){
    for(int i = 0; i < b.length; i++){
       place queen in column i;
       for(int j = 0; j < b.length; j++){
           change b;
           solver(n+1,changed b); 
       }
    }
}

Правильно ли это?

(Обновление 2):

 solver8(board /* with queens presented in first 7 columns */){
    // place a queen in the 8th column;
    for(each possible placement of the queen in column 8 
        or in other words int i = 0; i < board.length; i++ ){
             place the queen and print the board
    }
}


 solver7(board /* with queens presented in first 6 columns */){
    // place a queen in the 7th column;
    for(each possible placement of the queen in column 7 
        or in other words int i = 0; i < board.length; i++ ){
             solver8(board with queens placed in first 7 columns);
    }
}


 solver6(board /* with queens presented in first 5 columns */ ){
    // place a queen in the 6th column;
    for(each possible placement of the queen in column 6 
        or in other words int i = 0; i < board.length; i++ ){
             solver7(board with queens presented in first 6 columns);
    }
}

и так далее, пока

 solver1(1, empty board){
     for(int i = 0; i < board.length; i++){
        place queen in row[i] of column 1;
        solver2(board with queen in row[i] of column 1);
      }
}

Обновление 3 (Отредактировано):

private int numberOfQueens = 8;
solver(int n, Board b){

        for(int r = 0; r < b.length; r++){

               place queen in row[r] of column[n];

               if(n == numberOfQueens){
                    print the board;
                    return;
                }
                else{
                    solver(n+1, board with queen in row[r] of column[n]);
                }
           }
     }
}

Ответ 1

Цель использования рекурсии для этих проблем заключается в том, что они позволяют вам думать в терминах "Я теперь разместил k queens, как разместить оставшиеся, если общее число ферзей n?" Таким образом, рекурсивная функция должна принимать два параметра: целевое число ферзей и количество ферзей, размещенных до сих пор. При написании функции ваша цель - прежде всего попробовать различные способы размещения k-й королевы. Но когда вы выбрали возможное размещение и считаете его действительным, вам нужно разместить оставшихся n - k - 1 ферзей. Как мы можем это сделать? Ответ: рекурсия! Вызовите функцию (изнутри самой) с параметром k - 1, чтобы указать, что вы хотите разместить оставшихся k - 1 королев. Всякий раз, когда вы исчерпываете все возможности (или обнаруживаете, что ни один из них невозможен), просто возвращайтесь к функции - вы вернетесь к предыдущему вызову функции (например, к тем, кто пытается разместить k-ю королеву).

Изменить: вам также необходимо создать двумерный массив для представления текущего состояния вашей доски; этот массив должен быть либо отправлен как дополнительный параметр для рекурсивной функции, либо быть сохранен как поле класса, содержащего этот метод.

Что касается обратного отслеживания, то это достигается просто за счет того, что функция, вызываемая с k + 1, удаляет k + 1-ю королеву с доски перед возвратом; это, по существу, говорит: "Мы теперь (безуспешно) пробовали все способы размещения оставшейся части королевы - основываясь на положениях k королев, которые уже были помещены. Ни одно из них не удалось, поэтому, пожалуйста, отрегулируйте позиции первого k (которые будут выполняться функцией, которая была вызвана с k, и функцией, которая вызвала эту функцию, и т.д.) и повторите попытку."

Ответ 2

В общем случае рекурсивный поиск обратного отслеживания выглядит примерно так:

// On input, s represents a valid State up to depth d-1
sub do_it(int d, State s)
    if (d == MAX_DEPTH+1)
        // State s represents an answer!  Print it and return.
    else
        (augment s to make it valid for depth d)
        for each augmented_s
            do_it(d+1, augmented_s)
        end for
    end if
end sub

// top level
do_it(0, empty_state)

Обратите внимание, что для данного s допустимого до глубины d-1 может быть несколько способов увеличить его до состояния, действительного до глубины d. Идея состоит в том, чтобы позвонить себе с каждым из них.

Для этой проблемы "состояние" - это плата. Глубина "d-1" может означать, что первые столбцы d-1 заполняются. Правовыми расширенными государствами будут те, у кого есть королева в столбце d, так что ее невозможно захватить.

[обновление]

Вот еще один способ взглянуть на него. Работайте с проблемой назад.

Предположим, я попрошу написать простую функцию под названием solver8(). Эта функция принимает в качестве входной платы плату с ферзями, уже присутствующими в первых 7 столбцах. Все, что нужно сделать, это взять эту доску, найти все способы добавить королеву в 8-й столбец и распечатать эти доски. Как вы думаете, вы могли бы написать эту функцию? Хорошо; напишите.

Теперь предположим, что я прошу вас написать почти-простую функцию под названием solver7(). Эта функция принимает в качестве входной платы плату с ферзями, уже присутствующими в первых 6 столбцах. Все, что нужно сделать, это взять эту доску, найти все способы добавить королеву в 7-й столбец и передать все эти доски в качестве аргумента для solver8(). Не могли бы вы написать эту функцию?

Теперь предположим, что я прошу вас написать еще одну функцию под названием solver6(). В качестве входных данных он берет плату с королевами, присутствующими в первых 5 столбцах. Все, что нужно сделать, это взять эту доску, найти все способы добавить королеву в 6-й столбец, а затем передать каждую из этих плат на solver7().

И так далее, пока мы не дойдем до solver1(). Он берет пустую доску, находит все способы разместить королеву в первом столбце и передает каждую из этих досок на solver2().

Вы только что написали 8 функций, которые вместе решают проблему 8 ферзей. Если это не имеет смысла, напишите его как 8 функций и посмотрите на него, пока не сделаете.

Теперь, если вы посмотрите на все эти функции, вы обнаружите, что они очень похожи. Поэтому вместо того, чтобы писать solver8, solver7, solver6,..., solver1, вы пишете одну функцию:

solver(int n, Board b)

..., так что решатель (1, b) совпадает с решателем 1 (b), решатель (2, b) совпадает с решателем 2 (b),... и решателем (8, b) является так же, как решатель8 (б). И вместо solver2 (...), вызывающего solver3 (...), например, у вас будет только решатель (2,...), вызывающий решатель (3,...). Одна функция вместо 8, но делает то же самое.

Вы довольно быстро обнаружите, что последний код чище, если вы начинаете с solver9(), который просто берет полностью заполненную доску и распечатывает ее, и имеет solver8() вызов.

Ответ 4

Поместите первую королеву в [0] [0], затем найдите пятно для второго. скажем, вы нашли один переход к следующему, так далее и так далее. Предположительно, ваша пятая королева может быть размещена в любом месте в пятом столбце или ряду (в зависимости от того, что вы последуете). Вернитесь к четвертому и найдите другое место. Затем переходите к 5-му снова. Предположим, вы на восьмом месте, и нет доступных мест. Отправляйся в 7-й и все еще ничего не возвращай. Вы будете kep, возвращаясь до 2-го и снова найдя место на втором, и идите к 3-му. Имеет ли смысл...

Ответ 5

Надеемся, что это решение поможет

Основные пункты

1. Рекурсия простая в

2. Позиция IsValid 2.1 крест Королева найдена в той же колонке, что и

*
*

2.2 крест Королева найдена по диагонали как

*--
---
--*

или

--*
---
*--

Код:

package queenproblem;

public class QueenProblem
    {
        int numQueens[];// hold columns postion
        int numQueen;

        QueenProblem(int noOfQueens) {
            this.numQueen = noOfQueens;
            numQueens = new int[noOfQueens];

        }

        public static void main(String[] args) {
            new QueenProblem(8).solveProblem();

        }

        public void solveProblem() {
            arrange(0);
        }

        // recursive Function
        void arrange(int rowIndex) {
            // 1.to check valid Postion of not.
            // 2. to check all Queens postion is found or not.
            for (int i = 0; i < numQueen; i++)
            {
                if (isValid(rowIndex, i))
                {
                    numQueens[rowIndex] = i;// save col index

                    if (rowIndex == numQueen - 1)
                    {
                        printsBoard();
                    } else
                    {
                        arrange(rowIndex + 1);

                    }

                }
            }

        }

        private void printsBoard() {
            for (int i = 0; i < numQueen; i++)
            {
                for (int j = 0; j < numQueen; j++)
                {
                    if (numQueens[i] == j)
                    {
                        System.out.print(" * ");
                    } else System.out.print(" - ");
                }
                System.out.println();
            }
            System.out.println();

        }

        boolean isValid(int rowIndex, int colIndex) {

            for (int i = 0; i < rowIndex; i++)
            {
                // on the save columns
                if (numQueens[i] == colIndex) return false;

                if ((i - rowIndex) == (numQueens[i] - colIndex)) return false;
                if ((i - rowIndex) == (colIndex - numQueens[i])) return false;

            }

            return true;
        }
    }

92 Возможные решения проблемы 8 Queens:

 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 

 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 

 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 

 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 

 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 

 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 

 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 

 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 

 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 

 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 

 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 

 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 

 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 

 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 

 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 

 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 

 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 

 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 

 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 

 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 

 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 

 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 

 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 

 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 

 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 

 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 

 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 

 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 

 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 

 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 

 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 

 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 

 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 

 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 

 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 

 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 

 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 

 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 

 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 

 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 

 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 

 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 

 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 

 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 

 -  -  -  -  -  -  *  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  -  -  -  *  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 

 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  *  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 

 -  -  -  -  -  -  *  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  *  -  -  -  - 

 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  -  * 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  -  * 
 -  -  -  -  -  *  -  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  *  -  -  - 

 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 

 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  -  -  -  -  * 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 
 -  -  -  -  -  *  -  - 

 -  -  -  -  -  -  -  * 
 -  -  *  -  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  *  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  *  -  -  -  - 

 -  -  -  -  -  -  -  * 
 -  -  -  *  -  -  -  - 
 *  -  -  -  -  -  -  - 
 -  -  *  -  -  -  -  - 
 -  -  -  -  -  *  -  - 
 -  *  -  -  -  -  -  - 
 -  -  -  -  -  -  *  - 
 -  -  -  -  *  -  -  -