채팅방 기록 복원


답안 제출

Points: 8
시간 제한: 2.0s
메모리 제한: 1G

문제 유형

채팅방에서 사용하는 닉네임과 입장, 퇴장, 닉네임 변경 기록이 주어진다.

명령은 다음 세 종류이다.

  • enter name: 닉네임 name을 사용하는 새로운 사용자가 입장한다.
  • leave name: 현재 닉네임이 name인 사용자가 퇴장한다.
  • change old new: 현재 닉네임이 old인 사용자가 닉네임을 new로 변경하려고 한다.

change old new에서 new가 현재 다른 사용자가 사용 중인 닉네임이면 변경 요청을 거절한다. 이때 사용자의 닉네임은 old로 유지되며 아무 상태도 바뀌지 않는다. oldnew가 같아도 아무 상태도 바뀌지 않는다.

퇴장한 사용자의 닉네임은 다른 사용자가 다시 사용할 수 있다. 퇴장한 뒤 같은 닉네임으로 다시 입장한 사용자는 새로운 사용자로 취급한다.

모든 명령을 처리한 뒤, 입장과 퇴장 기록을 처음 주어진 순서대로 출력하시오. 각 기록에는 해당 사용자가 마지막으로 사용한 닉네임을 사용한다. 닉네임 변경 명령은 출력하지 않는다.

입력

첫째 줄에 명령의 수 \(N\)이 주어진다.

다음 \(N\)개의 줄에 명령이 하나씩 주어진다.

출력

입장 기록은 name entered, 퇴장 기록은 name left 형식으로 출력한다.

각 기록의 name에는 해당 사용자가 마지막으로 사용한 닉네임을 사용한다.

제한 사항

  • \(1 \le N \le 1,000\)
  • 닉네임은 알파벳 소문자 또는 숫자로 이루어져 있으며 길이는 \(1\) 이상 \(20\) 이하이다.
  • enter name에서 name은 현재 사용 중이지 않은 닉네임이다.
  • leave name에서 name은 현재 채팅방에 있는 사용자의 닉네임이다.
  • change old new에서 old는 현재 채팅방에 있는 사용자의 닉네임이다.
  • 입장 명령은 한 번 이상 주어진다.
  • 위 조건에 어긋나는 입력은 주어지지 않는다.

예제 입력 1

8
enter gold
enter silver
change gold bronze
leave bronze
enter gold
change gold silver
leave gold
leave silver

예제 출력 1

bronze entered
silver entered
bronze left
gold entered
gold left
silver left

예제 설명 1

각 명령까지 처리한 뒤, 그때까지의 입장과 퇴장 기록에 현재까지 결정된 마지막 닉네임을 적용하면 다음과 같다.

명령 1: enter gold

gold entered

명령 2: enter silver

gold entered
silver entered

명령 3: change gold bronze

bronze는 현재 사용 중이지 않으므로 닉네임을 변경한다. 이전 입장 기록에도 변경된 닉네임이 적용된다.

bronze entered
silver entered

명령 4: leave bronze

bronze entered
silver entered
bronze left

명령 5: enter gold

gold는 현재 사용 중이지 않으므로 입장할 수 있다.

bronze entered
silver entered
bronze left
gold entered

명령 6: change gold silver

silver는 현재 사용 중이므로 변경 요청을 거절한다. 닉네임과 기록은 변하지 않는다.

bronze entered
silver entered
bronze left
gold entered

명령 7: leave gold

bronze entered
silver entered
bronze left
gold entered
gold left

명령 8: leave silver

bronze entered
silver entered
bronze left
gold entered
gold left
silver left

모든 명령을 처리한 뒤의 기록이 예제 출력과 같다.


코멘트

현재 작성된 코멘트가 없습니다.