#include <iostream>
#include <fstream>

using namespace std;

fstream korwin;
int pdpnkt2a[4][2];
string por[2];
int asuka[256]={0};

string usun(string a)
{
    string b;
    for(int i=0; i<a.length()-1; i++)
        b+=a[i];
    return b;
}

string zm(string a, string c)
{
    string b;
    for(int i=0; i<a.length()-1; i++)
        b+=a[i];
    b+=c;
    return b;
}

string dop(string a, string b)
{
    return a+=b;
}

char przesuwarka(char a)
{
    if(a=='Z')
        a='A';
    else
        a++;
    return a;
}

string prz(string a, string b)
{
    char aa=b[0];
    for(int i=0; i<a.length(); i++)
    {
        if(a[i]==aa)
            {a[i]=przesuwarka(a[i]);break;}
    }
    return a;
}

string przI_S(int a)
{
    if(a==0)
        return "USUN";
    else if(a==1)
        return "ZMIEN";
    else if(a==2)
        return "PRZESUN";
    return "DOPISZ";
}

void bosak(int a)
{
    if(por[2]==por[1])
    {
        pdpnkt2a[a][1]++;
    }
    else
    {
        if(pdpnkt2a[a][1]>pdpnkt2a[a][0])
            pdpnkt2a[a][0]=pdpnkt2a[a][1];
        pdpnkt2a[a][1]=0;
    }
}

int main()
{
    string haslo;
    korwin.open("../../excel/2021PR/Dane_2105/instrukcje.txt", ios::in);
    for(int i=0; i<2000; i++)
    {
        string dane[2];
        korwin>>dane[0];
        korwin>>dane[1];
        if(dane[0]=="USUN")
        {
            haslo=usun(haslo);
            por[2]=dane[0];
            bosak(0);
            //cout<<"u\n";
        }
        else if(dane[0]=="ZMIEN")
        {
            haslo=zm(haslo,dane[1]);
            por[2]=dane[0];
            bosak(1);
            //cout<<"z\n";
        }
        else if(dane[0]=="PRZESUN")
        {
            haslo=prz(haslo,dane[1]);
            por[2]=dane[0];
            bosak(2);
            //cout<<"p\n";
        }
        else if(dane[0]=="DOPISZ")
        {
            cout<<"\t"<<i<<"\t"<<dane[1][0]<<endl;
            asuka[dane[1][0]-65]++;
            haslo=dop(haslo,dane[1]);
            por[2]=dane[0];
            bosak(3);
            //cout<<"d\n";
        }
        por[1]=por[2];
    }

    int pdpnkt2liczba=0;
    string pdpnkt2nazwa;
    for(int i=0; i<4; i++)
    {
        if(pdpnkt2liczba<pdpnkt2a[i][0])
            {
                pdpnkt2liczba=pdpnkt2a[i][0];
                pdpnkt2nazwa=przI_S(i);
            }
    }
    pdpnkt2liczba++;

    int pdpnkt3liczba=0;
    char pdpnkt3char;
    for(int i=0; i<25; i++)
    {
        if(pdpnkt3liczba<asuka[i])
        {
            pdpnkt3liczba=asuka[i];
            pdpnkt3char=i+65;
        }
    }


    cout<<"1.\t"<<haslo.length()<<"\n2.\t"<<pdpnkt2nazwa<<"\t"<<pdpnkt2liczba<<"\n3.\t"<<pdpnkt3char<<"\t"<<pdpnkt3liczba<<"\n4.\t"<<haslo;
    return 0;
}
