만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

아이리스 (비밀번호)

면접 대비

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

요약
대소문자를 구분하지 않고 중복 문자가 없는 단어가 텍스트에 부분 수열로 나타나는 횟수를 정해진 탐욕 스캔으로 세고 각 일치가 끝나는 위치를 출력합니다.
난이도

쉬움10점 중 3점

유형
그리디, 시뮬레이션, 문자열
정답자
아직 제출이 없습니다

문제

전 세계에 걸쳐 첩보 조직망을 운영하는 아이리스의 정체는 베일에 싸여 있다. 조직원들은 평범한 학생부터 학계, 금융계, 정치계의 주요 인물까지 널리 퍼져 있으며, 겉보기에는 평범한 글(영업 사원의 감사 편지, 뉴스 머리기사, 입사 시험 문제지 등) 속에 조직의 암호를 숨겨 서로에게 전달한다.

조직원 '백산'은 텍스트에서 비밀번호를 뽑아내는 방법을 전달받았다. 주어진 단어(word)가 텍스트(text) 안에 몇 번 나타나는지, 그리고 각 등장이 어느 자리에서 끝나는지가 비밀번호가 된다. 비밀번호의 첫 번째 수는 등장 횟수이고, 이어지는 수들은 각 등장의 위치이다.

등장의 정의

  • 단어의 문자들이 텍스트 안에서 왼쪽에서 오른쪽 순서대로 나타나면 한 번 등장한 것으로 센다. 문자들이 서로 붙어 있을 필요는 없고(중간에 다른 문자가 있어도 된다), 순서만 지키면 된다.
  • 대소문자는 구분하지 않는다.
  • 한 등장의 위치는 그 등장에서 단어의 마지막 문자가 놓인 자리로 나타낸다. 자리는 텍스트의 첫 문자를 1로 두고 세며, 공백도 한 자리로 센다.
  • 서로 다른 등장은 텍스트의 같은 문자를 두 번 쓸 수 없다. 즉 각 등장은 서로 겹치지 않는 문자들로 이루어진다. 이런 등장을 최대한 많이 만들 때의 개수가 등장 횟수이다.

판정 방법 (그리디)

텍스트를 왼쪽에서 오른쪽으로 한 번 훑는다. 여러 개의 단어를 동시에 만들어 갈 수 있다. 각 문자를 볼 때:

  • 그 문자가 단어의 첫 글자와 같으면, 새 단어 만들기를 하나 시작한다.
  • 그 문자가 단어의 어떤 글자 c와 같고, 바로 앞 글자까지 이미 채워 c를 기다리는 미완성 단어가 있으면, 그중 하나를 이 문자로 한 칸 진행시킨다. 그런 미완성 단어가 없으면 이 문자는 버린다.
  • 어떤 미완성 단어가 마지막 글자까지 채워지면 등장을 한 번 세고, 방금 그 문자의 위치를 그 등장의 위치로 기록한다.

단어 안에서는 (대소문자를 무시했을 때) 같은 글자가 두 번 나오지 않으므로, 텍스트의 각 문자는 많아야 한 종류의 글자에만 대응한다. 이 규칙에 따라, 마지막 문자로 쓸 수 있는 자리가 여러 개면 항상 가장 앞의 자리가 그 등장의 위치가 된다.

입력

입력은 표준 입력으로 받는다. 첫 줄에 테스트 케이스의 개수 TT (1≤T≤201 \le T \le 20)가 주어진다.

각 테스트 케이스는 두 줄로 이루어진다.

  • 첫 줄: 단어. 영문자와 숫자만 포함한다.
  • 둘째 줄: 텍스트. 영문자, 숫자, 공백을 포함할 수 있으며 첫 문자는 공백이 아니다.

단어의 길이는 최대 10, 텍스트의 길이는 최대 200,000이다. 하나의 단어는 텍스트에서 최대 40,000번까지 등장할 수 있다. 대소문자를 구분하지 않았을 때, 같은 문자는 한 단어 안에서 두 번 이상 나오지 않는다.

출력

각 테스트 케이스마다 한 줄을 표준 출력으로 내보낸다. 그 줄의 첫 번째 정수는 단어의 등장 횟수이고, 이어지는 정수들은 각 등장의 위치(그 등장에서 단어의 마지막 문자가 놓인 자리)이다. 위치는 텍스트의 첫 문자를 1로 두고 센다.

등장 횟수가 3회 이상이면 위치는 앞의 3개만 출력한다. 따라서 등장 횟수가 3 이상인 경우 한 줄에 정수 4개가 출력된다. 등장 횟수가 0이면 그 줄에는 0만 출력한다.

예제2

  1. 예제 1

    입력
    6
    Cat
    At a car
    B
    Def abc
    key
    yeey kkk yey yeyy
    Al
    Qaeda No 2 speaks on flotilla incident
    R
    Rrrrrrr
    ac
    aaaaaabbbbbbcccccc
    
    예상 출력
    0
    1 6
    2 12 16
    3 23 27 28
    7 1 2 3
    6 13 14 15
    
  2. 예제 2

    입력
    6
    sample
    elpmas
    ca
    cab
    Bi
    ibbie
    bo
    bboo
    Abc
    aabccbcc
    Boy
    bbboooyyy
    
    예상 출력
    0
    1 2
    1 4
    2 3 4
    2 4 7
    3 7 8 9