fortran66のブログ

fortran について書きます。

Kostka数の変換行列を出力

Kostka数計算プログラムを Schur関数と単項対称式間の変換行列を出力する様に改造しました。

出力結果

λ  = 6 までは文献によってチェック済み。
|λ| = 1
  1  [  1  ]
   1
|λ| = 2
  1  [  2  ]
  2  [  1  1  ]
   1   1
   0   1
|λ| = 3
  1  [  3  ]
  2  [  2  1  ]
  3  [  1  1  1  ]
   1   1   1
   0   1   2
   0   0   1
|λ| = 4
  1  [  4  ]
  2  [  3  1  ]
  3  [  2  2  ]
  4  [  2  1  1  ]
  5  [  1  1  1  1  ]
   1   1   1   1   1
   0   1   1   2   3
   0   0   1   1   2
   0   0   0   1   3
   0   0   0   0   1
|λ| = 5
  1  [  5  ]
  2  [  4  1  ]
  3  [  3  2  ]
  4  [  3  1  1  ]
  5  [  2  2  1  ]
  6  [  2  1  1  1  ]
  7  [  1  1  1  1  1  ]
   1   1   1   1   1   1   1
   0   1   1   2   2   3   4
   0   0   1   1   2   3   5
   0   0   0   1   1   3   6
   0   0   0   0   1   2   5
   0   0   0   0   0   1   4
   0   0   0   0   0   0   1
|λ| = 6
  1  [  6  ]
  2  [  5  1  ]
  3  [  4  2  ]
  4  [  4  1  1  ]
  5  [  3  3  ]
  6  [  3  2  1  ]
  7  [  3  1  1  1  ]
  8  [  2  2  2  ]
  9  [  2  2  1  1  ]
 10  [  2  1  1  1  1  ]
 11  [  1  1  1  1  1  1  ]
   1   1   1   1   1   1   1   1   1   1   1
   0   1   1   2   1   2   3   2   3   4   5
   0   0   1   1   1   2   3   3   4   6   9
   0   0   0   1   0   1   3   1   3   6  10
   0   0   0   0   1   1   1   1   2   3   5
   0   0   0   0   0   1   2   2   4   8  16
   0   0   0   0   0   0   1   0   1   4  10
   0   0   0   0   0   0   0   1   1   2   5
   0   0   0   0   0   0   0   0   1   3   9
   0   0   0   0   0   0   0   0   0   1   5
   0   0   0   0   0   0   0   0   0   0   1


ソース・プログラム

中間チェック出力を残したままで、綺麗にしてないw

module m_kostka
  implicit none
  type :: t_box
    integer :: k, ix, iy  
  end type t_box
contains
  recursive subroutine ssyt(n, nd, table, list)
    integer, intent(in) :: n, nd
    integer, intent(in out) :: table(0:, 0:)
    type(t_box), intent(in) :: list(:)
    integer :: ix, iy, k
    if (size(list) == n) then
      write(9, *) list
    else
      do iy = 1, ubound(table, 2)
        if ( any( table(:, iy - 1) == 0 ) ) exit
        do ix = 1, ubound(table, 1)
          do k = 1, nd
            if ( is_ok(ix, iy) ) then
              table(ix, iy) = k
              call ssyt(n, nd, table, [list, t_box(k, ix, iy)])
              table(ix, iy) = 0
            end if
          end do
        end do
      end do
    end if
    return
  contains 
    logical function is_ok(ix, iy)
      integer, intent(in) :: ix, iy
      if (table(ix, iy) == 0 .and. &
          table(ix - 1, iy) <= k .and. table(ix - 1, iy) /= 0 .and. &
          table(ix, iy - 1) <  k .and. table(ix, iy - 1) /= 0 ) then
        is_ok = .true.
      else
        is_ok = .false.
      end if  
      return
    end function is_ok
  end subroutine ssyt

  subroutine kostka_number(n, mu)
    implicit none
    integer, intent(in) :: n, mu(:)
    type(t_box) :: list(n)
    integer :: tableau(n, n)
    integer :: i, k
    k = 0
main:do 
      read(9, *, end = 999) list
      tableau = 0
      do i = 1, size(list)
        tableau(list(i)%ix, list(i)%iy) = list(i)%k
      end do
      do i = 1, size(mu)
        if (count(tableau == i) /= mu(i)) cycle main
      end do
        print *
      do i = 1, n
        if ( all(tableau(:, i) == 0) ) exit
        write(*, '(*(i2))') pack(tableau(:, i), tableau(:, i) /= 0)
      end do
      k = k + 1
    end do main    
999 write(*, *) 'total number of tableaux =', k
    write(10, *) k
    return
  end subroutine kostka_number
end module m_kostka

module m_partition
    implicit none
contains
    recursive subroutine partition(list, n, n0)
      integer, intent(in) :: list(:), n, n0
      integer :: i
      if (n == 0) then
        write(8) size(list), list
      else 
        do i = n - n0, n - 1
          call partition([list, n - i], i, min(i, n - i))
        end do
      end if
      return
    end subroutine partition
end module m_partition

program Kostka
  use m_kostka
  use m_partition
  implicit none
  character(80) :: fmt
  integer, allocatable :: lambda(:), table(:, :), mu(:), yt(:, :), tmp(:), KostkaMat(:)
  type(t_box), allocatable :: list(:)
  integer :: i, j, k, m, n
  n = 10
  call partition([integer::], n, n)
  rewind(8)
  k = 0
  do 
    read(8, end = 99) 
    k = k + 1
  end do
99 continue
  allocate( tmp(n), yt(n, k) )
  yt = 0
  rewind(8)
  do i = 1, k
    tmp = 0
    read(8) m, tmp(1:m)
    yt(:, i) = tmp
    print *, 'tmp', i, ' :', tmp
  end do
  allocate( list(0) )
  do i = 1, size(yt, 2)
    lambda = pack(yt(:, i), yt(:, i) /= 0)
    n = sum(lambda)
    do j = 1, size(yt, 2)
      mu = pack(yt(:, j), yt(:, j) /= 0)
      print *, 'lambda [', lambda, ']'
      print *, 'mu     [', mu,    ']'
      call init_table(lambda)
      call ssyt(n, n, table, list)
      rewind(9)
      call kostka_number(n, mu)
      deallocate( table ) 
      rewind(9)
      print *, '------------------------------'
    end do
    print *, '===================================='
  end do
  
  do i = 1, size(yt, 2)
    lambda = pack(yt(:, i), yt(:, i) /= 0)
    print '(*(g3.0))', i, '[', lambda, ']'
  end do
  allocate(KostkaMat(k*k))
  rewind(10)
  read(10, *) KostkaMat
  write(fmt, '(3g)') '(', k, 'g4.0)' 
  print fmt, KostkaMat
  stop
contains 
  subroutine init_table(lambda)
    integer, intent(in) :: lambda(:)
    integer, parameter :: NG = huge(0)
    integer :: i
    allocate( table(0:maxval(lambda, 1), 0:size(lambda)) )
    table = NG
    table(0, :) = -1
    table(:, 0) = -1
    do i = 1, size(lambda)
      table(1:lambda(i), i) = 0  
    end do
    return
  end subroutine init_table
end program Kostka

出力結果 補足

結果のチェックしてないw

|λ| = 7
  1  [  7  ]
  2  [  6  1  ]
  3  [  5  2  ]
  4  [  5  1  1  ]
  5  [  4  3  ]
  6  [  4  2  1  ]
  7  [  4  1  1  1  ]
  8  [  3  3  1  ]
  9  [  3  2  2  ]
 10  [  3  2  1  1  ]
 11  [  3  1  1  1  1  ]
 12  [  2  2  2  1  ]
 13  [  2  2  1  1  1  ]
 14  [  2  1  1  1  1  1  ]
 15  [  1  1  1  1  1  1  1  ]
   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
   0   1   1   2   1   2   3   2   2   3   4   3   4   5   6
   0   0   1   1   1   2   3   2   3   4   6   5   7  10  14
   0   0   0   1   0   1   3   1   1   3   6   3   6  10  15
   0   0   0   0   1   1   1   2   2   3   4   4   6   9  14
   0   0   0   0   0   1   2   1   2   4   8   6  11  20  35
   0   0   0   0   0   0   1   0   0   1   4   1   4  10  20
   0   0   0   0   0   0   0   1   1   2   3   3   6  11  21
   0   0   0   0   0   0   0   0   1   1   2   3   5  10  21
   0   0   0   0   0   0   0   0   0   1   3   2   6  15  35
   0   0   0   0   0   0   0   0   0   0   1   0   1   5  15
   0   0   0   0   0   0   0   0   0   0   0   1   2   5  14
   0   0   0   0   0   0   0   0   0   0   0   0   1   4  14
   0   0   0   0   0   0   0   0   0   0   0   0   0   1   6
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
|λ| = 8
  1  [  8  ]
  2  [  7  1  ]
  3  [  6  2  ]
  4  [  6  1  1  ]
  5  [  5  3  ]
  6  [  5  2  1  ]
  7  [  5  1  1  1  ]
  8  [  4  4  ]
  9  [  4  3  1  ]
 10  [  4  2  2  ]
 11  [  4  2  1  1  ]
 12  [  4  1  1  1  1  ]
 13  [  3  3  2  ]
 14  [  3  3  1  1  ]
 15  [  3  2  2  1  ]
 16  [  3  2  1  1  1  ]
 17  [  3  1  1  1  1  1  ]
 18  [  2  2  2  2  ]
 19  [  2  2  2  1  1  ]
 20  [  2  2  1  1  1  1  ]
 21  [  2  1  1  1  1  1  1  ]
 22  [  1  1  1  1  1  1  1  1  ]
   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
   0   1   1   2   1   2   3   1   2   2   3   4   2   3   3   4   5   3   4   5   6   7
   0   0   1   1   1   2   3   1   2   3   4   6   3   4   5   7  10   6   8  11  15  20
   0   0   0   1   0   1   3   0   1   1   3   6   1   3   3   6  10   3   6  10  15  21
   0   0   0   0   1   1   1   1   2   2   3   4   3   4   5   7  10   6   9  13  19  28
   0   0   0   0   0   1   2   0   1   2   4   8   2   4   6  11  20   8  14  24  40  64
   0   0   0   0   0   0   1   0   0   0   1   4   0   1   1   4  10   1   4  10  20  35
   0   0   0   0   0   0   0   1   1   1   1   1   1   2   2   3   4   3   4   6   9  14
   0   0   0   0   0   0   0   0   1   1   2   3   2   4   5   9  15   7  13  23  40  70
   0   0   0   0   0   0   0   0   0   1   1   2   1   1   3   5  10   6   9  16  30  56
   0   0   0   0   0   0   0   0   0   0   1   3   0   1   2   6  15   3   9  21  45  90
   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   1   5   0   1   5  15  35
   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   3   5   3   6  11  21  42
   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   3   6   2   5  12  26  56
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   2   5   3   6  13  30  70
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   4   0   2   8  24  64
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   1   6  21
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   5  14
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   3   9  28
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   5  20
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   7
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
|λ| = 9
  1  [  9  ]
  2  [  8  1  ]
  3  [  7  2  ]
  4  [  7  1  1  ]
  5  [  6  3  ]
  6  [  6  2  1  ]
  7  [  6  1  1  1  ]
  8  [  5  4  ]
  9  [  5  3  1  ]
 10  [  5  2  2  ]
 11  [  5  2  1  1  ]
 12  [  5  1  1  1  1  ]
 13  [  4  4  1  ]
 14  [  4  3  2  ]
 15  [  4  3  1  1  ]
 16  [  4  2  2  1  ]
 17  [  4  2  1  1  1  ]
 18  [  4  1  1  1  1  1  ]
 19  [  3  3  3  ]
 20  [  3  3  2  1  ]
 21  [  3  3  1  1  1  ]
 22  [  3  2  2  2  ]
 23  [  3  2  2  1  1  ]
 24  [  3  2  1  1  1  1  ]
 25  [  3  1  1  1  1  1  1  ]
 26  [  2  2  2  2  1  ]
 27  [  2  2  2  1  1  1  ]
 28  [  2  2  1  1  1  1  1  ]
 29  [  2  1  1  1  1  1  1  1  ]
 30  [  1  1  1  1  1  1  1  1  1  ]
   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
   0   1   1   2   1   2   3   1   2   2   3   4   2   2   3   3   4   5   2   3   4   3   4   5   6   4   5   6   7   8
   0   0   1   1   1   2   3   1   2   3   4   6   2   3   4   5   7  10   3   5   7   6   8  11  15   9  12  16  21  27
   0   0   0   1   0   1   3   0   1   1   3   6   1   1   3   3   6  10   1   3   6   3   6  10  15   6  10  15  21  28
   0   0   0   0   1   1   1   1   2   2   3   4   2   3   4   5   7  10   4   6   8   7  10  14  20  12  17  24  34  48
   0   0   0   0   0   1   2   0   1   2   4   8   1   2   4   6  11  20   2   6  11   8  14  24  40  17  28  45  70 105
   0   0   0   0   0   0   1   0   0   0   1   4   0   0   1   1   4  10   0   1   4   1   4  10  20   4  10  20  35  56
   0   0   0   0   0   0   0   1   1   1   1   1   2   2   3   3   4   5   2   4   6   5   7  10  14   9  13  19  28  42
   0   0   0   0   0   0   0   0   1   1   2   3   1   2   4   5   9  15   3   7  12   9  16  27  45  21  36  60  99 162
   0   0   0   0   0   0   0   0   0   1   1   2   0   1   1   3   5  10   1   3   5   6   9  16  30  14  23  40  70 120
   0   0   0   0   0   0   0   0   0   0   1   3   0   0   1   2   6  15   0   2   6   3   9  21  45  12  27  55 105 189
   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   1   5   0   0   1   0   1   5  15   1   5  15  35  70
   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   2   3   4   1   3   6   4   7  12  19  10  17  29  49  84
   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   3   5   2   4   6   6  10  17  30  16  28  50  91 168
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   3   6   0   2   6   3   8  18  36  12  27  56 111 216
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   2   5   0   1   2   3   6  13  30  12  24  50 105 216
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   4   0   0   1   0   2   8  24   3  12  34  84 189
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   1   6   0   1   6  21  56
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   2   3   5   3   6  11  21  42
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   2   2   4   8  16   8  17  36  77 168
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   1   4  10   2   7  20  50 120
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   5   4   7  15  35  84
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   3   9   3   9  24  63 162
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   5   0   2  10  35 105
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   1   7  28
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   2   5  14  42
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   4  14  48
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   6  27
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   8
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
|λ| = 10
  1  [ 10  ]
  2  [  9  1  ]
  3  [  8  2  ]
  4  [  8  1  1  ]
  5  [  7  3  ]
  6  [  7  2  1  ]
  7  [  7  1  1  1  ]
  8  [  6  4  ]
  9  [  6  3  1  ]
 10  [  6  2  2  ]
 11  [  6  2  1  1  ]
 12  [  6  1  1  1  1  ]
 13  [  5  5  ]
 14  [  5  4  1  ]
 15  [  5  3  2  ]
 16  [  5  3  1  1  ]
 17  [  5  2  2  1  ]
 18  [  5  2  1  1  1  ]
 19  [  5  1  1  1  1  1  ]
 20  [  4  4  2  ]
 21  [  4  4  1  1  ]
 22  [  4  3  3  ]
 23  [  4  3  2  1  ]
 24  [  4  3  1  1  1  ]
 25  [  4  2  2  2  ]
 26  [  4  2  2  1  1  ]
 27  [  4  2  1  1  1  1  ]
 28  [  4  1  1  1  1  1  1  ]
 29  [  3  3  3  1  ]
 30  [  3  3  2  2  ]
 31  [  3  3  2  1  1  ]
 32  [  3  3  1  1  1  1  ]
 33  [  3  2  2  2  1  ]
 34  [  3  2  2  1  1  1  ]
 35  [  3  2  1  1  1  1  1  ]
 36  [  3  1  1  1  1  1  1  1  ]
 37  [  2  2  2  2  2  ]
 38  [  2  2  2  2  1  1  ]
 39  [  2  2  2  1  1  1  1  ]
 40  [  2  2  1  1  1  1  1  1  ]
 41  [  2  1  1  1  1  1  1  1  1  ]
 42  [  1  1  1  1  1  1  1  1  1  1  ]
   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
   0   1   1   2   1   2   3   1   2   2   3   4   1   2   2   3   3   4   5   2   3   2   3   4   3   4   5   6   3   3   4   5   4   5   6   7   4   5   6   7   8   9
   0   0   1   1   1   2   3   1   2   3   4   6   1   2   3   4   5   7  10   3   4   3   5   7   6   8  11  15   5   6   8  11   9  12  16  21  10  13  17  22  28  35
   0   0   0   1   0   1   3   0   1   1   3   6   0   1   1   3   3   6  10   1   3   1   3   6   3   6  10  15   3   3   6  10   6  10  15  21   6  10  15  21  28  36
   0   0   0   0   1   1   1   1   2   2   3   4   1   2   3   4   5   7  10   3   4   4   6   8   7  10  14  20   7   8  11  15  13  18  25  35  15  21  29  40  55  75
   0   0   0   0   0   1   2   0   1   2   4   8   0   1   2   4   6  11  20   2   4   2   6  11   8  14  24  40   6   8  14  24  17  28  45  70  20  32  50  76 112 160
   0   0   0   0   0   0   1   0   0   0   1   4   0   0   0   1   1   4  10   0   1   0   1   4   1   4  10  20   1   1   4  10   4  10  20  35   4  10  20  35  56  84
   0   0   0   0   0   0   0   1   1   1   1   1   1   2   2   3   3   4   5   3   4   3   5   7   6   8  11  15   6   7  10  14  12  17  24  34  15  21  30  43  62  90
   0   0   0   0   0   0   0   0   1   1   2   3   0   1   2   4   5   9  15   2   4   3   7  12   9  16  27  45   9  11  19  31  24  40  65 105  30  50  81 129 203 315
   0   0   0   0   0   0   0   0   0   1   1   2   0   0   1   1   3   5  10   1   1   1   3   5   6   9  16  30   3   6   9  16  14  23  40  70  20  31  51  85 140 225
   0   0   0   0   0   0   0   0   0   0   1   3   0   0   0   1   2   6  15   0   1   0   2   6   3   9  21  45   2   3   9  21  12  27  55 105  15  33  65 120 210 350
   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   1   5   0   0   0   0   1   0   1   5  15   0   0   1   5   1   5  15  35   1   5  15  35  70 126
   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   1   1   1   2   1   2   3   2   3   4   5   2   3   4   6   5   7  10  14   6   9  13  19  28  42
   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   2   3   4   2   4   2   5   9   6  10  16  24   6   8  14  24  18  30  49  78  24  40  66 108 176 288
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   3   5   1   1   2   4   6   6  10  17  30   6   9  14  23  21  35  60 105  30  51  87 150 260 450
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   3   6   0   1   0   2   6   3   8  18  36   3   4  11  24  15  33  66 126  21  45  90 171 315 567
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   2   5   0   0   0   1   2   3   6  13  30   1   3   6  13  12  24  50 105  20  38  74 145 280 525
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   4   0   0   0   0   1   0   2   8  24   0   0   2   8   3  12  34  84   4  16  44 104 224 448
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   1   6   0   0   0   1   0   1   6  21   0   1   6  21  56 126
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   2   3   3   4   6   9   3   4   7  12  10  17  29  49  16  26  45  79 140 252
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   1   3   1   3   6  10   1   2   5  12   7  15  30  55  10  22  44  85 160 300
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   2   3   5   3   3   5   7   7  12  20  35  10  19  34  61 112 210
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   2   2   4   8  16   2   4   8  16  14  28  56 112  24  48  96 192 384 768
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   1   4  10   0   0   2   8   3  11  30  70   5  17  46 110 245 525
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   5   0   1   1   2   4   7  15  35  10  16  31  65 140 300
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   3   9   0   0   1   3   3   9  24  63   6  18  45 108 252 567
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   5   0   0   0   1   0   2  10  35   0   3  15  50 140 350
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   1   7   0   0   1   7  28  84
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   3   3   6  11  21   5  11  23  47  98 210
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   3   5  10  21   6  12  24  51 112 252
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   3   2   6  15  35   5  13  33  80 190 450
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   1   5  15   0   2   9  30  85 225
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   2   5  14   4   8  18  44 112 288
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   4  14   0   3  12  38 112 315
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   6   0   0   2  12  48 160
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   1   8  36
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   2   5  14  42
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   3   9  28  90
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   5  20  75
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   7  35
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   9
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1