Совершенные латинские квадраты

В статье [1] приводится доказательство существования совершенного латинского квадрата порядка n2 для любого n . Определение совершенного квадрата приведено там-же: совершенным латинским квадратом порядка n2 называют диагональный латинский квадрат, такой, что элементы во всех его основных субквадратах встречаются ровно один раз. Субквадрат (subsquare) Sij латинского квадрата порядка n2 - это квадрат порядка n , ячейки которого определены как: {(i+t,j+s): 0≤i,j≤n2-n, 0≤t,s≤n-1} . Когда i = 0 (mod n) и j = 0 (mod n), субквадрат Sij называют основным (main subsquare).

Пример совершенного латинского квадрата 9-го порядка:

0 2 1
5 4 3
7 6 8
8 7 6
1 2 0
3 5 4
4 3 5
6 8 7
2 0 1
1 0 2
3 5 4
8 7 6
6 8 7
0 1 2
4 3 5
5 4 3
7 6 8
1 2 0
2 1 0
4 3 5
6 8 7
7 6 8
2 0 1
5 4 3
3 5 4
8 7 6
0 1 2

Доказательство существования совершенного латинского квадрата одновременно является и алгоритмом его построения.

Чтобы построить совершенный квадрат, нужны n2 латинских квадратов Ai,j, для которых выполняется два условия: ячейка (j,i) содержит элемент i и ячейка (n-1-j, n-1-i) содержит элемент j. В разделе 4 статьи приведен алгоритм построения таких квадратов.

Начинаем с квадрата A=(ar,s), ar,s=(r-s) mod n. Каждый из квадратов Ai,j строится из этого квадрата. В статье приводится серия условий и действия для каждого из квадратов в зависимости от элементов (i, j) и (n-1-j, n-1-i) исходного квадрата A:

 Для каждого i и j берем один и тот-же исходный квадрат A

 Если i = j:
     - если i <> 0, меняем местами элементы 0 и i 
     Квадрат A становится квадратом Aij

 Если i <> j:
     Берем два элемента исходного квадрата A: x = A[i,j], y = A[n-1-j,n-1-i] 

     - если x = y, меняем колонку i с любой другой, не равной n-1-i

     Теперь x <> y и возможен один из следующих ниже вариантов

     - (x = i) and (y = j) - 

     - (x = i) and (y <> i) and (y <> j) - меняем элементы y, j 

     - (x <> i) and (x <> j) and (y = j) - меняем элементы x, i 

     - (x = j) and (y = i) - меняем элементы i, j 

     - (x = j) and (y <> i) and (y <> j) - меняем j на i, y на j, i на y

     - (x <> i) and (x <> j) and (y = i) - меняем i на j, x на i, j на x

     - (x <> i) and (x <> j) and (y <> i) and (y <> j) and (y <> x) - меняем элементы (x и i) и (y и j)

Посмотрим на примере для n=6, что у нас получается. Исходный квадрат A:

0 5 4 3 2 1
1 0 5 4 3 2
2 1 0 5 4 3
3 2 1 0 5 4
4 3 2 1 0 5
5 4 3 2 1 0

Построенные из него 36 квадратов Ai,j:

Серия квадратов A(i,j)
0 5 4 3 2 1 |5 1 4 3 2 0 |4 5 2 3 0 1 |5 2 4 3 0 1 |2 5 0 3 4 1 |1 0 4 3 2 5 |
1 0 5 4 3 2 |0 5 1 4 3 2 |1 4 5 2 3 0 |2 1 5 4 3 0 |1 2 5 0 3 4 |5 1 0 4 3 2 |
2 1 0 5 4 3 |2 0 5 1 4 3 |0 1 4 5 2 3 |1 0 2 5 4 3 |4 1 2 5 0 3 |2 5 1 0 4 3 |
3 2 1 0 5 4 |3 2 0 5 1 4 |3 0 1 4 5 2 |0 3 1 2 5 4 |3 4 1 2 5 0 |3 2 5 1 0 4 |
4 3 2 1 0 5 |4 3 2 0 5 1 |2 3 0 1 4 5 |3 4 0 1 2 5 |0 3 4 1 2 5 |4 3 2 5 1 0 |
5 4 3 2 1 0 |1 4 3 2 0 5 |5 2 3 0 1 4 |4 5 3 0 1 2 |5 0 3 4 1 2 |0 4 3 2 5 1 |
------------------------------------------------------------------------------
5 1 4 3 2 0 |1 5 4 3 2 0 |0 2 4 3 5 1 |0 5 3 4 1 2 |0 3 5 4 1 2 |0 2 1 3 5 4 |
0 5 1 4 3 2 |0 1 5 4 3 2 |1 0 2 4 3 5 |2 0 5 3 4 1 |2 5 0 3 4 1 |4 0 2 1 3 5 |
2 0 5 1 4 3 |2 0 1 5 4 3 |5 1 0 2 4 3 |1 2 0 5 3 4 |1 0 2 5 3 4 |5 4 0 2 1 3 |
3 2 0 5 1 4 |3 2 0 1 5 4 |3 5 1 0 2 4 |4 1 2 0 5 3 |4 2 1 0 5 3 |3 5 4 0 2 1 |
4 3 2 0 5 1 |4 3 2 0 1 5 |4 3 5 1 0 2 |3 4 1 2 0 5 |3 1 4 2 0 5 |1 3 5 4 0 2 |
1 4 3 2 0 5 |5 4 3 2 0 1 |2 4 3 5 1 0 |5 3 4 1 2 0 |5 4 3 1 2 0 |2 1 3 5 4 0 |
------------------------------------------------------------------------------
4 5 2 3 0 1 |0 2 4 3 5 1 |2 5 4 3 0 1 |0 3 4 5 1 2 |0 5 4 3 2 1 |0 3 1 5 4 2 |
1 4 5 2 3 0 |1 0 2 4 3 5 |1 2 5 4 3 0 |2 0 3 4 5 1 |1 0 5 4 3 2 |2 0 5 4 3 1 |
0 1 4 5 2 3 |5 1 0 2 4 3 |0 1 2 5 4 3 |1 2 0 3 4 5 |2 1 0 5 4 3 |1 2 4 3 0 5 |
3 0 1 4 5 2 |3 5 1 0 2 4 |3 0 1 2 5 4 |5 1 2 0 3 4 |3 2 1 0 5 4 |5 1 3 0 2 4 |
2 3 0 1 4 5 |4 3 5 1 0 2 |4 3 0 1 2 5 |4 5 1 2 0 3 |4 3 2 1 0 5 |4 5 0 2 1 3 |
5 2 3 0 1 4 |2 4 3 5 1 0 |5 4 3 0 1 2 |3 4 5 1 2 0 |5 4 3 2 1 0 |3 4 2 1 5 0 |
------------------------------------------------------------------------------
2 5 4 3 0 1 |0 5 3 4 1 2 |0 3 4 5 1 2 |3 5 4 0 2 1 |0 4 5 1 2 3 |0 4 5 2 3 1 |
1 2 5 0 4 3 |2 0 5 3 4 1 |2 0 3 4 5 1 |1 3 5 4 0 2 |3 0 4 5 1 2 |1 0 4 5 2 3 |
3 1 2 4 5 0 |1 2 0 5 3 4 |1 2 0 3 4 5 |2 1 3 5 4 0 |2 3 0 4 5 1 |3 1 0 4 5 2 |
0 3 1 5 2 4 |4 1 2 0 5 3 |5 1 2 0 3 4 |0 2 1 3 5 4 |1 2 3 0 4 5 |2 3 1 0 4 5 |
4 0 3 2 1 5 |3 4 1 2 0 5 |4 5 1 2 0 3 |4 0 2 1 3 5 |5 1 2 3 0 4 |5 2 3 1 0 4 |
5 4 0 1 3 2 |5 3 4 1 2 0 |3 4 5 1 2 0 |5 4 0 2 1 3 |4 5 1 2 3 0 |4 5 2 3 1 0 |
------------------------------------------------------------------------------
2 5 0 3 4 1 |0 5 2 1 3 4 |0 5 4 3 2 1 |0 4 5 1 2 3 |4 5 0 3 2 1 |0 5 1 3 2 4 |
1 2 5 0 3 4 |3 0 5 2 4 1 |1 0 5 4 3 2 |3 0 4 5 1 2 |1 4 5 0 3 2 |4 0 5 1 3 2 |
4 1 2 5 0 3 |4 3 0 5 1 2 |2 1 0 5 4 3 |2 3 0 4 5 1 |2 1 4 5 0 3 |2 4 0 5 1 3 |
3 4 1 2 5 0 |1 4 3 0 2 5 |3 2 1 0 5 4 |1 2 3 0 4 5 |3 2 1 4 5 0 |3 2 4 0 5 1 |
0 3 4 1 2 5 |2 1 4 3 5 0 |4 3 2 1 0 5 |5 1 2 3 0 4 |0 3 2 1 4 5 |1 3 2 4 0 5 |
5 0 3 4 1 2 |5 2 1 4 0 3 |5 4 3 2 1 0 |4 5 1 2 3 0 |5 0 3 2 1 4 |5 1 3 2 4 0 |
------------------------------------------------------------------------------
1 0 4 3 2 5 |0 2 1 3 5 4 |0 5 4 2 3 1 |0 4 5 2 3 1 |0 5 1 3 2 4 |5 0 4 3 2 1 |
5 1 0 4 3 2 |4 0 2 1 3 5 |5 3 1 4 2 0 |1 0 4 5 2 3 |4 0 5 1 3 2 |1 5 0 4 3 2 |
2 5 1 0 4 3 |5 4 0 2 1 3 |3 2 0 1 4 5 |3 1 0 4 5 2 |2 4 0 5 1 3 |2 1 5 0 4 3 |
3 2 5 1 0 4 |3 5 4 0 2 1 |2 4 5 0 1 3 |2 3 1 0 4 5 |3 2 4 0 5 1 |3 2 1 5 0 4 |
4 3 2 5 1 0 |1 3 5 4 0 2 |4 1 3 5 0 2 |5 2 3 1 0 4 |1 3 2 4 0 5 |4 3 2 1 5 0 |
0 4 3 2 5 1 |2 1 3 5 4 0 |1 0 2 3 5 4 |4 5 2 3 1 0 |5 1 3 2 4 0 |0 4 3 2 1 5 |

Возьмем еще один произвольный латинский квадрат B=(bi,j) порядка n (Например, возьмем тот-же квадрат A) и выполним преобразование:

  C = n*bi,j J + Ai,j 

Здесь J - матрица n x n из единиц. Другими словами каждый элемент матрицы B (bi,j) заменяем матрицей Ai,j, к каждому элементу которой прибавляем n*bi,j.

pascal
   // C - матрица порядка n*n, составленная из элементов матриц A(i,j)
   for i := 0 to n*n - 1 do begin
      for j := 0 to n*n - 1 do begin
         C[i,j] := n*A[0,0][i div n,j div n]+C[i][j];
      end;
   end;

Получим такую матрицу

Промежуточная матрица C
0 5 4 3 2 1 35 31 34 33 32 30 28 29 26 27 24 25 23 20 22 21 18 19 14 17 12 15 16 13 7 6 10 9 8 11 
1 0 5 4 3 2 30 35 31 34 33 32 25 28 29 26 27 24 20 19 23 22 21 18 13 14 17 12 15 16 11 7 6 10 9 8 
2 1 0 5 4 3 32 30 35 31 34 33 24 25 28 29 26 27 19 18 20 23 22 21 16 13 14 17 12 15 8 11 7 6 10 9 
3 2 1 0 5 4 33 32 30 35 31 34 27 24 25 28 29 26 18 21 19 20 23 22 15 16 13 14 17 12 9 8 11 7 6 10 
4 3 2 1 0 5 34 33 32 30 35 31 26 27 24 25 28 29 21 22 18 19 20 23 12 15 16 13 14 17 10 9 8 11 7 6 
5 4 3 2 1 0 31 34 33 32 30 35 29 26 27 24 25 28 22 23 21 18 19 20 17 12 15 16 13 14 6 10 9 8 11 7 
11 7 10 9 8 6 1 5 4 3 2 0 30 32 34 33 35 31 24 29 27 28 25 26 18 21 23 22 19 20 12 14 13 15 17 16 
6 11 7 10 9 8 0 1 5 4 3 2 31 30 32 34 33 35 26 24 29 27 28 25 20 23 18 21 22 19 16 12 14 13 15 17 
8 6 11 7 10 9 2 0 1 5 4 3 35 31 30 32 34 33 25 26 24 29 27 28 19 18 20 23 21 22 17 16 12 14 13 15 
9 8 6 11 7 10 3 2 0 1 5 4 33 35 31 30 32 34 28 25 26 24 29 27 22 20 19 18 23 21 15 17 16 12 14 13 
10 9 8 6 11 7 4 3 2 0 1 5 34 33 35 31 30 32 27 28 25 26 24 29 21 19 22 20 18 23 13 15 17 16 12 14 
7 10 9 8 6 11 5 4 3 2 0 1 32 34 33 35 31 30 29 27 28 25 26 24 23 22 21 19 20 18 14 13 15 17 16 12 
16 17 14 15 12 13 6 8 10 9 11 7 2 5 4 3 0 1 30 33 34 35 31 32 24 29 28 27 26 25 18 21 19 23 22 20 
13 16 17 14 15 12 7 6 8 10 9 11 1 2 5 4 3 0 32 30 33 34 35 31 25 24 29 28 27 26 20 18 23 22 21 19 
12 13 16 17 14 15 11 7 6 8 10 9 0 1 2 5 4 3 31 32 30 33 34 35 26 25 24 29 28 27 19 20 22 21 18 23 
15 12 13 16 17 14 9 11 7 6 8 10 3 0 1 2 5 4 35 31 32 30 33 34 27 26 25 24 29 28 23 19 21 18 20 22 
14 15 12 13 16 17 10 9 11 7 6 8 4 3 0 1 2 5 34 35 31 32 30 33 28 27 26 25 24 29 22 23 18 20 19 21 
17 14 15 12 13 16 8 10 9 11 7 6 5 4 3 0 1 2 33 34 35 31 32 30 29 28 27 26 25 24 21 22 20 19 23 18 
20 23 22 21 18 19 12 17 15 16 13 14 6 9 10 11 7 8 3 5 4 0 2 1 30 34 35 31 32 33 24 28 29 26 27 25 
19 20 23 18 22 21 14 12 17 15 16 13 8 6 9 10 11 7 1 3 5 4 0 2 33 30 34 35 31 32 25 24 28 29 26 27 
21 19 20 22 23 18 13 14 12 17 15 16 7 8 6 9 10 11 2 1 3 5 4 0 32 33 30 34 35 31 27 25 24 28 29 26 
18 21 19 23 20 22 16 13 14 12 17 15 11 7 8 6 9 10 0 2 1 3 5 4 31 32 33 30 34 35 26 27 25 24 28 29 
22 18 21 20 19 23 15 16 13 14 12 17 10 11 7 8 6 9 4 0 2 1 3 5 35 31 32 33 30 34 29 26 27 25 24 28 
23 22 18 19 21 20 17 15 16 13 14 12 9 10 11 7 8 6 5 4 0 2 1 3 34 35 31 32 33 30 28 29 26 27 25 24 
26 29 24 27 28 25 18 23 20 19 21 22 12 17 16 15 14 13 6 10 11 7 8 9 4 5 0 3 2 1 30 35 31 33 32 34 
25 26 29 24 27 28 21 18 23 20 22 19 13 12 17 16 15 14 9 6 10 11 7 8 1 4 5 0 3 2 34 30 35 31 33 32 
28 25 26 29 24 27 22 21 18 23 19 20 14 13 12 17 16 15 8 9 6 10 11 7 2 1 4 5 0 3 32 34 30 35 31 33 
27 28 25 26 29 24 19 22 21 18 20 23 15 14 13 12 17 16 7 8 9 6 10 11 3 2 1 4 5 0 33 32 34 30 35 31 
24 27 28 25 26 29 20 19 22 21 23 18 16 15 14 13 12 17 11 7 8 9 6 10 0 3 2 1 4 5 31 33 32 34 30 35 
29 24 27 28 25 26 23 20 19 22 18 21 17 16 15 14 13 12 10 11 7 8 9 6 5 0 3 2 1 4 35 31 33 32 34 30 
31 30 34 33 32 35 24 26 25 27 29 28 18 23 22 20 21 19 12 16 17 14 15 13 6 11 7 9 8 10 5 0 4 3 2 1 
35 31 30 34 33 32 28 24 26 25 27 29 23 21 19 22 20 18 13 12 16 17 14 15 10 6 11 7 9 8 1 5 0 4 3 2 
32 35 31 30 34 33 29 28 24 26 25 27 21 20 18 19 22 23 15 13 12 16 17 14 8 10 6 11 7 9 2 1 5 0 4 3 
33 32 35 31 30 34 27 29 28 24 26 25 20 22 23 18 19 21 14 15 13 12 16 17 9 8 10 6 11 7 3 2 1 5 0 4 
34 33 32 35 31 30 25 27 29 28 24 26 22 19 21 23 18 20 17 14 15 13 12 16 7 9 8 10 6 11 4 3 2 1 5 0 
30 34 33 32 35 31 26 25 27 29 28 24 19 18 20 21 23 22 16 17 14 15 13 12 11 7 9 8 10 6 0 4 3 2 1 5 

Далее получаем матрицу P

  P = (pi,j),  pni+j,k = cnj+i,k 

pascal
   for i := 0 to n - 1 do begin
      for j := 0 to n - 1 do begin
         for k := 0 to n*n - 1 do begin
             P[n*i+j, k] := C[n*j+i, k];
         end;
      end;
   end;

Эта матрица будет совершенным латинским квадратом:

Совершенный латинский квадрат 36-го порядка
  0  5  4  3  2  1
 11  7 10  9  8  6
 16 17 14 15 12 13
 20 23 22 21 18 19
 26 29 24 27 28 25
 31 30 34 33 32 35
 35 31 34 33 32 30
  1  5  4  3  2  0
  6  8 10  9 11  7
 12 17 15 16 13 14
 18 23 20 19 21 22
 24 26 25 27 29 28
 28 29 26 27 24 25
 30 32 34 33 35 31
  2  5  4  3  0  1
  6  9 10 11  7  8
 12 17 16 15 14 13
 18 23 22 20 21 19
 23 20 22 21 18 19
 24 29 27 28 25 26
 30 33 34 35 31 32
  3  5  4  0  2  1
  6 10 11  7  8  9
 12 16 17 14 15 13
 14 17 12 15 16 13
 18 21 23 22 19 20
 24 29 28 27 26 25
 30 34 35 31 32 33
  4  5  0  3  2  1
  6 11  7  9  8 10
  7  6 10  9  8 11
 12 14 13 15 17 16
 18 21 19 23 22 20
 24 28 29 26 27 25
 30 35 31 33 32 34
  5  0  4  3  2  1
  1  0  5  4  3  2
  6 11  7 10  9  8
 13 16 17 14 15 12
 19 20 23 18 22 21
 25 26 29 24 27 28
 35 31 30 34 33 32
 30 35 31 34 33 32
  0  1  5  4  3  2
  7  6  8 10  9 11
 14 12 17 15 16 13
 21 18 23 20 22 19
 28 24 26 25 27 29
 25 28 29 26 27 24
 31 30 32 34 33 35
  1  2  5  4  3  0
  8  6  9 10 11  7
 13 12 17 16 15 14
 23 21 19 22 20 18
 20 19 23 22 21 18
 26 24 29 27 28 25
 32 30 33 34 35 31
  1  3  5  4  0  2
  9  6 10 11  7  8
 13 12 16 17 14 15
 13 14 17 12 15 16
 20 23 18 21 22 19
 25 24 29 28 27 26
 33 30 34 35 31 32
  1  4  5  0  3  2
 10  6 11  7  9  8
 11  7  6 10  9  8
 16 12 14 13 15 17
 20 18 23 22 21 19
 25 24 28 29 26 27
 34 30 35 31 33 32
  1  5  0  4  3  2
  2  1  0  5  4  3
  8  6 11  7 10  9
 12 13 16 17 14 15
 21 19 20 22 23 18
 28 25 26 29 24 27
 32 35 31 30 34 33
 32 30 35 31 34 33
  2  0  1  5  4  3
 11  7  6  8 10  9
 13 14 12 17 15 16
 22 21 18 23 19 20
 29 28 24 26 25 27
 24 25 28 29 26 27
 35 31 30 32 34 33
  0  1  2  5  4  3
  7  8  6  9 10 11
 14 13 12 17 16 15
 21 20 18 19 22 23
 19 18 20 23 22 21
 25 26 24 29 27 28
 31 32 30 33 34 35
  2  1  3  5  4  0
  8  9  6 10 11  7
 15 13 12 16 17 14
 16 13 14 17 12 15
 19 18 20 23 21 22
 26 25 24 29 28 27
 32 33 30 34 35 31
  2  1  4  5  0  3
  8 10  6 11  7  9
  8 11  7  6 10  9
 17 16 12 14 13 15
 19 20 22 21 18 23
 27 25 24 28 29 26
 32 34 30 35 31 33
  2  1  5  0  4  3
  3  2  1  0  5  4
  9  8  6 11  7 10
 15 12 13 16 17 14
 18 21 19 23 20 22
 27 28 25 26 29 24
 33 32 35 31 30 34
 33 32 30 35 31 34
  3  2  0  1  5  4
  9 11  7  6  8 10
 16 13 14 12 17 15
 19 22 21 18 20 23
 27 29 28 24 26 25
 27 24 25 28 29 26
 33 35 31 30 32 34
  3  0  1  2  5  4
 11  7  8  6  9 10
 15 14 13 12 17 16
 20 22 23 18 19 21
 18 21 19 20 23 22
 28 25 26 24 29 27
 35 31 32 30 33 34
  0  2  1  3  5  4
  7  8  9  6 10 11
 14 15 13 12 16 17
 15 16 13 14 17 12
 22 20 19 18 23 21
 27 26 25 24 29 28
 31 32 33 30 34 35
  3  2  1  4  5  0
  9  8 10  6 11  7
  9  8 11  7  6 10
 15 17 16 12 14 13
 23 19 21 18 20 22
 26 27 25 24 28 29
 33 32 34 30 35 31
  3  2  1  5  0  4
  4  3  2  1  0  5
 10  9  8  6 11  7
 14 15 12 13 16 17
 22 18 21 20 19 23
 24 27 28 25 26 29
 34 33 32 35 31 30
 34 33 32 30 35 31
  4  3  2  0  1  5
 10  9 11  7  6  8
 15 16 13 14 12 17
 20 19 22 21 23 18
 25 27 29 28 24 26
 26 27 24 25 28 29
 34 33 35 31 30 32
  4  3  0  1  2  5
 10 11  7  8  6  9
 16 15 14 13 12 17
 22 19 21 23 18 20
 21 22 18 19 20 23
 27 28 25 26 24 29
 34 35 31 32 30 33
  4  0  2  1  3  5
 11  7  8  9  6 10
 17 14 15 13 12 16
 12 15 16 13 14 17
 21 19 22 20 18 23
 28 27 26 25 24 29
 35 31 32 33 30 34
  0  3  2  1  4  5
  7  9  8 10  6 11
 10  9  8 11  7  6
 13 15 17 16 12 14
 22 23 18 20 19 21
 29 26 27 25 24 28
 31 33 32 34 30 35
  4  3  2  1  5  0
  5  4  3  2  1  0
  7 10  9  8  6 11
 17 14 15 12 13 16
 23 22 18 19 21 20
 29 24 27 28 25 26
 30 34 33 32 35 31
 31 34 33 32 30 35
  5  4  3  2  0  1
  8 10  9 11  7  6
 17 15 16 13 14 12
 23 20 19 22 18 21
 26 25 27 29 28 24
 29 26 27 24 25 28
 32 34 33 35 31 30
  5  4  3  0  1  2
  9 10 11  7  8  6
 17 16 15 14 13 12
 19 18 20 21 23 22
 22 23 21 18 19 20
 29 27 28 25 26 24
 33 34 35 31 32 30
  5  4  0  2  1  3
 10 11  7  8  9  6
 16 17 14 15 13 12
 17 12 15 16 13 14
 23 22 21 19 20 18
 29 28 27 26 25 24
 34 35 31 32 33 30
  5  0  3  2  1  4
 11  7  9  8 10  6
  6 10  9  8 11  7
 14 13 15 17 16 12
 21 22 20 19 23 18
 28 29 26 27 25 24
 35 31 33 32 34 30
  0  4  3  2  1  5

В приложении исходники описанного алгоритма и приложение для построения совершенного латинского квадрата. Задайте параметр n и получите квадрат порядка n2.

1K.Heinrich, K.Kim and V.K.Prasanna Kumar, Perfect latin squares, Discrete Applied Mathematics 37138 (1992) 281-286.

Downloads
Исходники и приложение (Windows/Delphi) для получения Perfect DLS (pdlk.zip) (29.9 Кб, просмотров: 1332 )

No comments
Вы можете оставить комментарий или задать вопрос
Ваше имя:

Текст сообщения:


Copyright © 2009-2014 by