**PROBLEM:** Count the number of ways in which atomic operation(s) of **n** different processes can be interleaved. A process may crash mid way before completion.

Suppose there are a total of **n** different processes – P1, P2, P3 …. , Pn.

Each process can have a variable number of atomic operation(s) that constitutes that process, but it should have at least one operation.

**EXAMPLE**

Consider two processes, P1 and P2

- P1: 1o1; 1o2; 1o3; 1o4; 1o5; 1o6;
- P2: 2o1; 2o2; 2o3;
where 1o1 denotes first operation of process P1.

**Attempt**:

Fix position of all operations of process P1, then count the number of ways in which the operations of process P2 can be placed in empty positions( __ ) created between operations of process P1, as shown below:

`__ 1o1 __ 1o2 __ 1o3 __ 1o4 __ 1o5 __ 1o6 __`

There are seven empty positions numbered 1 to 7.

Counting: (*Note that the numbers below (like 1 2 3) denote the empty position number.*)

`> Case1: When all three operations of P2 are placed in consecutive empty positions. 1 2 3 2 3 4 3 4 5 4 5 6 5 6 7 We have a total of 5 ordering possible for empty positions. > Case2: When operations of P2 are placed in two consecutive empty positions taken together. 1 2 3 2 3 4 3 4 5 4 5 6 5 6 7 1 2 4 2 3 5 3 4 6 4 5 7 1 2 5 2 3 6 3 4 7 1 2 6 2 3 7 1 2 7 First cell in every column has already been counted in previous case. We have a total of (5 - 1) + (4 - 1) + (3 - 1) + (2 - 1) + (1 - 1) = 10 ordering possible for empty positions. A similar argument can be made for last two consecutive empty positions taken together, that gives us a total of another 10 ordering possible for empty positions. > Case3: These are those cases that do not have empty positions numbered 8 and 9 for them. 6 7 8 7 8 9 > Case4: When operations may crash mid way before completion. An 'x' denotes position where a crash is possible and process (here P2) terminates. 1x 2x 3 2x 3x 4 3x 4x 5 4x 5x 6 5x 6x 7 6x 7x 8 7x 8x 9 There is a total of 14 'x's possible. Note: I have not put a cross after last empty position number because I am assuming that a process will complete at this stage. You may correct my assumption if this is wrong and should not be assumed in the first place. `

Adding all 4 cases: `5 + 2*10 + 2 + 14 = 41`

. There are 41 possible ways to interleave operations processes P1 and P2.

As you can see, counting like this is cumbersome and error prone. I have missed cases.

**How can this counting problem be generalised?** *Please see the problem statement at the top of the question.*