로봇 게임
시간 제한10초메모리 제한1024 MB
모든 로봇이 폭발하지 않고 목표 출력을 만드는 시작 칸이 하나라도 있는 입력과 출력 조합의 개수를 구합니다.
문제
(참고: 대회 제한 시간은 3초였습니다. 더 많은 풀이가 통과할 수 있도록 여기서는 더 큰 제한 시간을 설정했습니다.)
대 ()의 로봇과 개의 테이프가 있습니다. 번째 로봇 ()은 테이프 를 다룹니다. 각 테이프는 왼쪽에서 오른쪽으로 개 ()의 칸으로 나뉘며, 칸에는 번호가 붙어 있습니다. 각 칸은 다음 세 가지 상태 중 하나입니다. (1) 숫자 0이 적혀 있다, (2) 숫자 1이 적혀 있다, (3) 비어 있다.
로봇은 언제나 테이프의 어느 한 칸 위에 있어야 합니다. 로봇을 테이프의 초기 위치에 놓은 뒤, 번째 로봇은 정해진 연산열 를 실행합니다. 연산은 R, 0, 1, * 문자로 이루어집니다.
R은 로봇을 한 칸 오른쪽으로 이동시킵니다. 오른쪽에 칸이 없으면 로봇은 폭발합니다.0은 현재 칸이 비어 있지 않으면 그 칸의 숫자를 0으로 바꿉니다. 비어 있으면 칸을 바꾸지 않습니다.1은 현재 칸이 비어 있지 않으면 그 칸의 숫자를 1로 바꿉니다. 비어 있으면 칸을 바꾸지 않습니다.*는 현재 칸이 비어 있지 않으면 숫자 를 로 뒤집습니다. 비어 있으면 칸을 바꾸지 않습니다.
번째 테이프의 상태는 길이 의 문자열로 나타냅니다. 각 문자는 0, 1, - (빈 칸) 중 하나입니다. 테이프 의 초기 상태가 입력 이고, 연산 후의 상태가 출력 입니다. 로봇이 폭발하면 출력은 없습니다.
로봇은 빈 칸을 바꾸지 않습니다. 따라서 테이프 의 모든 칸이 비어 있으면 로봇은 아무것도 하지 않으며, 출력도 모든 칸이 비어 있는 상태입니다.
입력 와 목표 출력 가 주어졌을 때, 모든 로봇이 번째 칸을 시작 위치로 사용해 폭발 없이 모든 연산을 마치고, 각자 출력 를 얻을 수 있는 위치 () 를 찾고자 합니다.
입력 과 출력 의 조합 중, 그러한 위치 가 적어도 하나 존재하는 조합의 개수를 구하세요. 답은 로 나눈 나머지를 출력합니다. 두 조합이 다르다는 것은 어떤 로봇의 입력이나 출력이 다르다는 뜻입니다.
입력
첫째 줄에 각 테이프의 칸 수 과 테이프의 개수 이 주어집니다. 이어지는 개의 줄에는 로봇 의 연산열 가 R, 0, 1, * 문자로 이루어진 문자열로 주어집니다.
출력
답을 로 나눈 나머지를 정수 하나로 출력합니다.
제한
모든 테스트 케이스에 대해 , , 입니다.