function s2row = stirling2_row ( n, m )

%*****************************************************************************80
%
%% stirling2_row(): N-th row of Stirling numbers of the second kind.
%
%  Discussion:
%
%    S2(I,J) represents the number of distinct partitions of I elements
%    into J nonempty sets.  For a fixed I, the sum of the Stirling
%    numbers S2(I,M) is represented by B(I), called "Bell's number",
%    and represents the number of distinct partitions of I elements.
%
%    For example, with I = 4 objects, there are:
%
%    1 partition into 1 set:
%
%      (A,B,C,D)
%
%    7 partitions into 2 sets:
%
%      (A,B,C) (D)
%      (A,B,D) (C)
%      (A,C,D) (B)
%      (A) (B,C,D)
%      (A,B) (C,D)
%      (A,C) (B,D)
%      (A,D) (B,C)
%
%    6 partitions into 3 sets:
%
%      (A,B) (C) (D)
%      (A) (B,C) (D)
%      (A) (B) (C,D)
%      (A,C) (B) (D)
%      (A,D) (B) (C)
%      (A) (B,D) (C)
%
%    1 partition into 4 sets:
%
%      (A) (B) (C) (D)
%
%    So S2(4,1) = 1, S2(4,2) = 7, S2(4,3) = 6, S2(4,4) = 1, and B(4) = 15.
%
%  First terms:
%
%      J: 1    2    3    4    5    6    7    8
%    I:
%    1    1    0    0    0    0    0    0    0
%    2    1    1    0    0    0    0    0    0
%    3    1    3    1    0    0    0    0    0
%    4    1    7    6    1    0    0    0    0
%    5    1   15   25   10    1    0    0    0
%    6    1   31   90   65   15    1    0    0
%    7    1   63  301  350  140   21    1    0
%    8    1  127  966 1701 1050  266   28    1
%
%  Recursion:
%
%    S2(I,1) = 1 for all I.
%    S2(I,I) = 1 for all I.
%    S2(I,J) = 0 if I < J.
%
%    S2(I,M) = S2(I-1,J-1) + J * S2(I-1,J)
%
%  Properties:
%
%    sum ( 1 <= K <= M ) S2(I,K) * S1(K,J) = Delta(I,J)
%
%    X^N = sum ( 0 <= K <= N ) S2(N,K) X_K
%    where X_K is the falling factorial function.
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    14 May 2022
%
%  Author:
%
%    John Burkardt
%
%  Input:
%
%    integer N, the number of rows of the table.
%
%  Output:
%
%    integer S2ROW(N), the N-th row of the table of the Stirling numbers of the 
%    second kind.
%
  s2row = zeros ( n, 1 );

  s2row(1) = 1;

  for row = 2 : n
    for j = row : -1 : 2
      s2row(j) = s2row(j-1) + j * s2row(j);
    end
  end

  return
end
