""""
There are 8 prison cells in a row, and each cell is either occupied or vacant.

Each day, whether the cell is occupied or vacant changes according to the following rules:

If a cell has two adjacent neighbors that are both occupied or both vacant, then the cell becomes occupied.
Otherwise, it becomes vacant.
(Note that because the prison is a row, the first and the last cells in the row can't have two adjacent neighbors.)

We describe the current state of the prison in the following way: cells[i] == 1 if the i-th cell is occupied, else cells[i] == 0.

Given the initial state of the prison, return the state of the prison after N days (and N such changes described above.)



Example 1:

Output: [0,0,1,1,0,0,0,0]
Explanation:
The following table summarizes the state of the prison on each day:
Day 0: [0, 1, 0, 1, 1, 0, 0, 1]
Day 1: [0, 1, 1, 0, 0, 0, 0, 0]
Day 2: [0, 0, 0, 0, 1, 1, 1, 0]
Day 3: [0, 1, 1, 0, 0, 1, 0, 0]
Day 4: [0, 0, 0, 0, 0, 1, 0, 0]
Day 5: [0, 1, 1, 1, 0, 1, 0, 0]
Day 6: [0, 0, 1, 0, 1, 1, 0, 0]
Day 7: [0, 0, 1, 1, 0, 0, 0, 0]

Example 2:

Input: cells = [1,0,0,1,0,0,1,0], N = 1000000000
Output: [0,0,1,1,1,1,1,0]


Note:

cells.length == 8
cells[i] is in {0, 1}
1 <= N <= 10^9
"""

from typing import List


# [0,1,0,1,1,0,0,1], N = 7
# 1[0,1,1,0,0,0,0,0]
# 2[0,0,0,0,1,1,1,0]
# 3[0,1,1,0,0,1,0,0]
# 4[0,0,0,0,0,1,0,0]
# 5[0,1,1,1,0,1,0,0]
# 6[0,0,1,0,1,1,0,0]
# 7[0,0,1,1,0,0,0,0]
# output [0,0,1,1,0,0,0,0]

class PrisonCellAfterNDays:
    @staticmethod
    def prisonAfterNDays(cells: List[int], N: int) -> List[int]:
        length = len(cells)
        cells_copy = cells.copy()
        for i in range(N):
            # print("i ->{} ".format(i))

            for i in range(1, length - 1):
                if cells[i - 1] == cells[i + 1]:
                    cells_copy[i] = 1
                else:
                    cells_copy[i] = 0

                cells_copy[0] = 0
                cells_copy[length - 1] = 0
            cells = cells_copy.copy()
            # print("cell_copy ->{} ".format(cells_copy))

        return cells_copy


if __name__ == "__main__":
    # obj = PrisonCellAfterNDays()
    cells = [0, 1, 0, 1, 1, 0, 0, 1]
    N = 7

    res = PrisonCellAfterNDays.prisonAfterNDays(cells, N)
    print(res)
