Problem C
Git Good
Languages
en
sv
Doris yngre bror Boris har nyligen börjat som programmerare på E-Max (en hamburgerkedja online). Precis som många större företag använder E-Max versionshanteringsprogrammet git för att spara ändringar i kodbasen. Tyvärr har Boris inte lärt sig git och behöver hjälp!
När man ska spara en ändring med git behöver man göra tre saker:
-
Lägga till alla ändringar till en fil genom att använda kommandot git add <fil> där <fil> motsvarar den fil man ska lägga till.
-
Spara ändringarna genom att skapa en “commit” med kommandot git commit, vilket öppnar ett fönster där man beskriver ändringarna.
-
Skicka vidare alla ändringarna till servern med kommandot git push.
Boris jobbar alltid i terminalen, och har även sin utvecklarmiljö, nano, där. I en terminal har man en nuvarande “working directory”, ens nuvarande mapp, och kan enkelt referera till alla filer och mappar i den med hjälp av deras namn.
De kommandon Boris använder är:
-
cd <mapp> - Byter ens nuvarande mapp till <mapp> (som är i ens nuvarande mapp).
-
cd .. - Byter ens nuvarande mapp till den ovanför ens nuvarande mapp (går tillbaka en mapp).
-
nano <fil> - Öppnar filen <fil> (som är i ens nuvarande mapp).
Boris kommer att börja och avsluta i samma mapp, och han kommer aldrig gå upp till en mapp ovanför den. Ni får en lista med alla kommandon Boris skrivit sedan han började sin nya ändring, denna består av kommandon av typ cd <mapp>, cd .. och nano <fil>. Han vill att ni skriver ut en lista av kommandon han ska använda för att spara denna ändring i git. Det kommer alltså vara genom att först lägga till alla filer han öppnat i nano med hjälp av git add <fil>, och sedan spara ändringen med git commit och skicka upp sin ändring online med git push.
Notera att för att referera till en fil inuti andra mappar måste man skriva <mapp 1>/<mapp 2>/<mapp 3>/<...>/<fil>, där <mapp 1> är den i din nuvarande mapp, <mapp 2> är i <mapp 1> och så vidare. TIPS! Allt detta motsvarar en faktisk terminal, och om man är osäker på vad som menas kan man experimentera i en terminal själv (i Windows används däremot \ istället för /).
Indata
Första raden innehåller heltalet $N$ ($1 \leq N \leq 10^4$).
Sedan följer $N$ rader som vardera innehåller ett kommando (cd <mapp>, cd .., eller nano <fil>). Varje fil och map består av stora och små bokstäver från A-Z, och är som mest 31 bokstäver lång. Dessutom kommer inga filvägar vara längre än 256 karaktärer. Namnen är unika inom en mapp, men inte, mellan mappar. Filnamn innehåller dessutom exakt en punkt (men aldrig som första eller sista karaktär).
Utdata
För varje ändrad fil, de Boris öppnat med Nano, skriv git add <fil> där <fil> är den kortaste vägen till filen. Raderna av git add <fil> ska skrivas ut i alfabetisk ordning av vägen <fil>.
Efter alla git add <fil> kommandon ska kommandona git commit och git push skrivas på varsin rad.
Poängsättning
Grupp |
Poäng |
Gränser |
$1$ |
$20$ |
Alla filer är i samma mapp. |
$2$ |
$20$ |
Alla filer och mappar besöks enbart en gång (förutom genom cd ..). |
$3$ |
$20$ |
Namn är unika även mellan mappar. |
$4$ |
$40$ |
Inga ytterligare begränsningar. |
Sample Input 1 | Sample Output 1 |
---|---|
5 nano supersecret.secret nano programmering.olympiad nano supersecret.secret nano temp.t nano temp.t |
git add programmering.olympiad git add supersecret.secret git add temp.t git commit git push |
Sample Input 2 | Sample Output 2 |
---|---|
5 cd folders nano temp.t cd downloads cd .. cd .. |
git add folders/temp.t git commit git push |
Sample Input 3 | Sample Output 3 |
---|---|
6 cd folders nano familyphoto.jpeg nano crazy.no cd .. cd problemlists cd .. |
git add folders/crazy.no git add folders/familyphoto.jpeg git commit git push |