DNA 시퀀싱
시간 제한1초메모리 제한128 MB
소와 황소의 각 짝에 대해, 두 부모 중 한쪽의 문자와 모든 위치에서 일치하는 다른 소의 수를 센다.
문제
Farmer John이 자기 소 떼의 혈통을 연구하고 있다. 농장에는 수소 마리()와 암소 마리()가 있지만, 어떤 소가 어떤 소의 자손이 될 수 있는지는 알지 못한다.
다만 농장에 있는 모든 소의 DNA 서열은 알고 있다. 각 DNA 서열의 길이는 25이고, 대문자 A, C, G, T로만 이루어져 있다. Farmer John은 각 (수소, 암소) 쌍에 대해 어떤 소들이 그 둘의 자식이 될 수 있는지 알아내려고 한다.
어떤 소가 특정 수소와 암소의 자식이 되려면 다음 두 조건을 모두 만족해야 한다.
- 그 소가 두 부모 중 어느 쪽도 아니다(어떤 소도 자기 자신의 부모가 될 수 없다).
- 모든 위치에서 그 소의 DNA 문자가 같은 위치에 있는 두 부모의 문자 중 적어도 하나와 일치한다.
예를 들어 abc는 쌍 (axx, xbc)의 자식이 될 수 있지만, 쌍 (aaa, bbb)의 자식은 될 수 없다.
개념을 설명하기 위한 예로 수소 3마리와 암소 2마리를 생각해 보자.
수소 1: GTTTTTTTTTTTTTTTTTTTTTTTT
수소 2: AATTTTTTTTTTTTTTTTTTTTTTT
수소 3: GATTTTTTTTTTTTTTTTTTTTTTT
암소 1: TTTTTTTTTTTTTTTTTTTTTTTTT
암소 2: ATTTTTTTTTTTTTTTTTTTTTTTT
수소 2와 암소 1은 암소 2의 부모가 될 수 있다. 암소 2의 첫 글자 A는 수소 2에서, 둘째 글자 T는 암소 1에서 올 수 있고, 나머지 글자는 두 부모 어느 쪽에서든 올 수 있기 때문이다.
각 (수소, 암소) 쌍에 대해, Farmer John의 다른 소들 중 그 둘의 자식이 될 수 있는 소가 몇 마리인지 구하라.
입력
- 첫째 줄: 공백으로 구분된 두 정수 과 .
- 둘째 줄부터 번째 줄까지: 번째 줄에 수소 의 DNA 서열이 주어진다.
- 번째 줄부터 번째 줄까지: 번째 줄에 암소 의 DNA 서열이 주어진다.
출력
개의 줄을 출력한다. 번째 줄에는 공백으로 구분된 개의 정수를 출력하며, 번째 정수는 수소 와 암소 의 자식이 될 수 있는 소의 수이다.
힌트
예제의 수소 1(TGA...)과 암소 1(ATA...)을 살펴보자. 두 부모 DNA의 핵심은 첫 위치가 {T|A}, 둘째 위치가 {G|T}이고 나머지는 모두 A라는 점이다. 다른 모든 소를 확인해 보면 다음과 같다.
TGA... -- 부모이므로 자식이 될 수 없음
AGA... -- 자식! [TA][GT]에 부합
ATA... -- 부모이므로 자식이 될 수 없음
AAA... -- 둘째 글자 'A'는 'G'나 'T'여야 하므로 자식 아님
TTA... -- 자식! [TA][GT]에 부합
두 마리가 조건을 만족하므로 답 행렬의 첫 원소는 2이다. 나머지 원소도 같은 방식으로 계산한다.