// Autor: Karol Kopczyński (KarixD)

#include <iostream>

using namespace std;

void mrowki(int ilosc, string kierunek)
{
    // Zadeklarowanie tablicy z pozycjami mrówek i ich ustawienie
    // (Długość dwóch pozycji jest równa jednej jednostce na osi liczbowej z zadania)
    int pozycja[ilosc];
    for(int i=0; i<ilosc; i++)
    {
        pozycja[i]=i*2;
    }

    // Zadeklarowanie tablicy z odbiciami mrówek i jej wyzerowanie
    int odbicia[ilosc];
    for(int i=0; i<ilosc; i++)
    {
        odbicia[i]=0;
    }

    // Algorytm iteracyjny wykoujący się do czasu, aż wszystkie mrówki zostaną odbite
    bool czy_wszystkie_odbite = false;
    while (!czy_wszystkie_odbite)
    {
        // Na wejściu zakładamy że są wszystkie odbite, dopóki nie natrafimy na przypadek, gdzie jakaś para mrówek nie znajduje się naprzeciwko siebie
        czy_wszystkie_odbite=true;

        // Iteracja po wszystkich mrówkach
        for(int i=0; i<ilosc; i++)
        {
            if(kierunek[i] == 'P') //Dla i-tej mrówki skierowanej w prawo
            {
                if(i!=ilosc-1) // Nie sprawdzamy czy mrówka ma parę po prawej, jeśli jest ostatnia
                {
                    if(kierunek[i+1] == 'L') // Sprawdzamy czy kolejna mrówka jest skierowana w stronę i-tej
                    {
                        czy_wszystkie_odbite=false;
                    }
                    if(pozycja[i]+1 == pozycja[i+1])
                    {
                        // Odbijanie i-tej mrówki i mrówki od której sie ona odbiła
                        kierunek[i]='L';
                        kierunek[i+1]='P';
                        odbicia[i]++;
                        odbicia[i+1]++;
                    }
                    else
                    {
                        // Kontynuowanie ruchu mrówki
                        pozycja[i]++;
                    }
                }
                else
                {
                    pozycja[i]++;
                }
            }
            else //Dla i-tej mrówki skierowanej w lewo
            {
                if(i!=0) // Nie sprawdzamy czy mrówka ma parę po lewej, jeśli jest pierwsza
                {
                    if(kierunek[i-1] == 'P') // Sprawdzamy czy wcześniejsza mrówka jest skierowana w stronę i-tej
                    {
                        czy_wszystkie_odbite=false;
                    }
                    if(pozycja[i]-1 == pozycja[i-1])
                    {
                        // Odbijanie i-tej mrówki i mrówki od której sie ona odbiła
                        kierunek[i]='P';
                        kierunek[i-1]='L';
                        odbicia[i]++;
                        odbicia[i-1]++;
                    }
                    else
                    {
                        // Kontynuowanie ruchu mrówki
                        pozycja[i]--;
                    }
                }
                else
                {
                    pozycja[i]--;
                }
            }
        }
    }

    // Wypisanie ilości odbić dla wszystkich mrówek po wykonaniu algorytmu
    for(int i=0; i<ilosc; i++)
    {
        cout << odbicia[i] << " ";
    }
}

int main()
{
    // Wprowadzenie ilości mrówek
    int ilosc;
    cin >> ilosc;

    // Wprowadzenie kierunku mrówek
    string kierunek;
    cin >> kierunek;

    mrowki(ilosc, kierunek);

    return 0;
}
