1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def count_reflections(n, directions):
    reflections = [0] * n  # Inicjalizacja listy przechowującej liczbę odbić dla każdej mrówki

    # Funkcja symulująca ruch mrówki i zliczająca odbicia
    def simulate_movement(pos, direction):
        nonlocal reflections  # Umożliwienie dostępu do listy reflections wewnątrz funkcji

        while True:
            # Sprawdzenie, czy mrówka wyjdzie poza granice osi
            if pos < 0 or pos >= n:
                break
            
            # Sprawdzenie, czy mrówka napotka inną mrówkę patrzącą w przeciwnym kierunku
            if (direction == 'P' and directions[pos] == 'L') or (direction == 'L' and directions[pos] == 'P'):
                reflections[pos] += 1
                reflections[pos - 1] += 1  # Zwiększenie liczby odbić dla drugiej mrówki
                break
            
            # Przesunięcie mrówki w zależności od kierunku
            if direction == 'P':
                pos += 1
            else:
                pos -= 1

    # Symulacja ruchu dla każdej mrówki
    for i in range(n):
        simulate_movement(i, directions[i])

    return reflections

def main():
    # Wczytywanie danych wejściowych
    n = int(input())  # Liczba mrówek
    directions = input()  # Kierunki patrzenia mrówek

    # Obliczanie liczby odbić dla każdej mrówki
    reflections = count_reflections(n, directions)

    # Wyświetlanie wyników
    print(*reflections)

if __name__ == "__main__":
    main()