만드는 중입니다

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

막대 분류

면접 대비

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

요약
N×N 이진 격자가 주어지면, 최대 N개의 칸이 뒤집힌 1로 채워진 행이나 열이 세로 막대인지 가로 막대인지, 아니면 둘 다 가능한지 판별합니다.
난이도

보통10점 중 5점

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

문제

머신러닝 수업의 과제로 이미지 속 세로 막대와 가로 막대를 구별하는 프로그램을 작성해야 한다. 학습 데이터를 만들기 위해 다음 방법을 사용한다. 먼저 N×NN \times N 격자를 0으로 채운다. 다음으로 한 행 또는 한 열을 골라 1로 채운다. 마지막으로 임의의 칸을 최대 NN개 골라 뒤집는다. 칸을 뒤집는다는 것은 0은 1로, 1은 0으로 바꾸는 것이다.

이 방식으로 데이터를 만드는 것은 쉽다. 하지만 정답은 어떻게 만들까? 학습 데이터를 사람이 일일이 검사하면 몇 시간이 걸린다. 모든 정답을 자동으로 찾아 주는 프로그램이 있으면 좋겠다.

주어진 N×NN \times N 행렬은 위 설명대로 생성된 것이다. 1로 채워진 것이 열인지 행인지, 아니면 판단할 수 없는지 찾는 프로그램을 작성하라.

입력

첫 줄에 격자의 크기 NN (2≤N≤10002 \leq N \leq 1000)이 주어진다. 다음 NN개의 줄에는 0과 1로 이루어진 길이 NN의 문자열이 주어진다. 각 문자열이 격자의 행이다.

입력은 0으로 채운 격자에 1을 행이나 열에 놓은 뒤 최대 NN개의 칸을 뒤집는 방식으로 생성되었음이 보장된다.

출력

세로 막대(열)였다면 |를, 가로 막대(행)였다면 -를 출력한다. 두 경우 모두 가능해서 판단할 수 없다면 +를 출력한다.

예제3

  1. 예제 1

    입력
    5
    01100
    01000
    01001
    00000
    01000
    
    예상 출력
    |
    
  2. 예제 2

    입력
    3
    111
    000
    111
    
    예상 출력
    -
    
  3. 예제 3

    입력
    3
    010
    101
    010
    
    예상 출력
    +