아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

대화 잇기

시간 제한2초메모리 제한128 MB

요약
각 메시지가 바로 앞 메시지의 작성자를 언급하는 가장 긴 시간순 대화를 찾고 동률이면 번호가 가장 작은 경우를 출력합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 해시맵, 문자열
정답자
아직 제출이 없습니다

문제

Abstract Communication Mastership(ACM)은 tWinter라는 소셜 네트워크를 운영하는 소프트웨어 회사다.

tWinter 사용자는 모두 골뱅이(@)로 시작하는 핸들을 하나씩 쓴다. 사용자는 짧은 메시지를 네트워크에 올린다.

어떤 핸들이 메시지 안에서 공백으로 끊긴 하나의 낱말로 나타나면, 즉 앞이 공백이거나 메시지의 시작이고 뒤가 공백이거나 메시지의 끝이면, 그 메시지는 그 핸들을 언급한다. 언급으로 인정하는 핸들은 글쓴이가 아닌 다른 사용자의 핸들뿐이다. 그래서 자기 핸들을 그대로 적은 메시지는 그 핸들을 언급하지 않는다.

메시지를 늘어놓은 열에서 첫 메시지를 뺀 모든 메시지가 바로 앞 메시지의 글쓴이를 언급하면, 이 열을 대화라고 한다. 대화를 이루는 메시지는 기록에 실린 시간 순서를 그대로 지킨다.

시간 순으로 쌓인 메시지 기록에서 가장 긴 대화를 찾아라.

입력

첫째 줄에 기록에 실린 메시지의 개수 nn이 주어진다. (1≤n≤50 0001 \le n \le 50\,000)

다음 nn개 줄에 메시지가 한 개씩 주어진다. 각 줄은 글쓴이의 핸들, 콜론(:), 공백 한 개로 시작하고, 그 뒤에 메시지가 이어진다.

메시지의 길이는 139자 이하다. 핸들의 길이는 20자 이하이고 콜론과 공백을 포함하지 않는다.

입력에는 ASCII 코드가 32 이상 126 이하인 문자와 줄바꿈만 나온다.

출력

첫째 줄에 가장 긴 대화의 길이를 출력한다.

둘째 줄에 그 대화를 이루는 메시지의 번호를 1부터 세는 번호로, 증가하는 순서로, 공백 한 개로 구분해 출력한다.

길이가 가장 긴 대화가 여럿일 수 있다. 그중 번호 열이 사전순으로 가장 앞서는 것을 출력한다. 즉 첫 번호를 될 수 있는 대로 작게 잡고, 첫 번호가 같으면 둘째 번호를 될 수 있는 대로 작게 잡고, 그 뒤 번호도 같은 규칙을 따른다.

예제2

  1. 예제 1

    입력
    6
    @Petr: Leaving for #NEERC tomorrow!
    @Roman: This #NEERC is going to be awesome!
    @Stone_in_forest: Nothing happened today.
    @NEERCNews: @Petr Don't forget an umbrella :)
    @Lydia: @NEERCNews cares about @Petr - so cute ^_^
    @Lydia: @Lydia @NEERCNews @Petr it won't be raining though!
    
    예상 출력
    3
    1 4 5
    
  2. 예제 2

    입력
    4
    @ann: good morning
    @bob: @ann coffee?
    @cid: @ann tea?
    @dan: @bob @cid whatever
    
    예상 출력
    3
    1 2 4