만드는 중입니다

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

지루한 Dreamoon

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

요약
병사들의 키와 '오른쪽 앞' 관계 행렬이 주어질 때, 조건을 만족하는 배치가 있으면 첫 번째 줄의 최소 인원을 구합니다. 없으면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
정렬, 구현, 그리디
정답자
아직 제출이 없습니다

문제

Dreamoon은 올해 군 복무 중이다. 군대의 모든 것은 지루하다. 군 생활을 더 재미있게 만들려고 Dreamoon은 군에서 겪은 일 일부를 프로그래밍 대회 문제로 바꾸기로 했다.

지휘관은 보통 병사들을 키 순서대로 여러 줄에 세운다. 병사 배치 규칙은 다음과 같다.

  • 병사 AA와 BB가 서로 다른 줄에 서 있고 AA의 줄이 BB의 줄보다 앞에 있으면, AA는 BB보다 키가 작다.
  • 병사 AA와 BB가 같은 줄에 서 있고 AA가 BB보다 오른쪽에 있으면, AA는 BB보다 키가 작다.
  • 어떤 두 줄을 고르더라도 두 줄의 병사 수 차이는 최대 11이다.
  • 어떤 두 줄을 고르더라도 앞줄의 병사 수는 뒷줄의 병사 수와 같거나 많다.

Dreamoon은 이 성질들을 알아챈 뒤 다음 문제를 떠올렸다.

서로 다른 두 병사 AA와 BB에 대해, AA의 줄이 BB의 줄보다 앞에 있지 않고, BB의 줄에서 BB보다 오른쪽에 있는 병사 수가 AA의 줄에서 AA보다 오른쪽에 있는 병사 수보다 많지 않으면, BB를 AA의 right front라고 한다.

전체 병사 수도, 줄이 몇 개인지도 모른다. 번호가 11부터 NN까지인 NN명 병사의 키는 알고 있다. 서로 다른 두 번호 ii와 jj에 대해, 병사 jj가 병사 ii의 right front인지도 알고 있다. 주어진 정보를 모두 만족하는 배치가 하나라도 있는지 확인하라. 있다면 가장 앞줄(다른 모든 줄보다 앞에 있는 줄)에 서는 병사 수의 최솟값을 구하라.

입력

첫 줄에 병사의 수 NN이 주어진다. 둘째 줄에는 NN개의 정수 h1,h2,…,hNh_1, h_2, \ldots, h_N이 주어지며, hih_i는 ii번 병사의 키다. 이어지는 NN개 줄에는 각각 NN개의 문자가 주어진다. ii번째 줄의 jj번째 문자는 병사 jj가 병사 ii의 right front이면 '1', 아니면 '0'이다.

출력

가능한 배치 중 첫 줄에 서는 병사 수의 최솟값을 한 개의 수로 출력한다. 주어진 정보를 만족하는 배치가 없으면 −1-1을 출력한다.

제한

  • 2≤N≤1032 \le N \le 10^3
  • 1≤hi≤1091 \le h_i \le 10^9
  • 모든 hih_i는 서로 다르다.
  • sijs_{ij}는 '0' 또는 '1'이다.
  • 모든 ii(1,2,…,N1, 2, \ldots, N)에 대해 siis_{ii}는 '0'이다.

예제2

  1. 예제 1

    입력
    3
    1 2 3
    000
    000
    000
    
    예상 출력
    3
    
  2. 예제 2

    입력
    3
    1 2 3
    000
    100
    110
    
    예상 출력
    1