| ps | |
|---|---|
| 링크 | acmicpc.net/… | 
| 출처 | BOJ | 
| 문제 번호 | 1960 | 
| 문제명 | 행렬만들기 | 
| 레벨 | 골드 3 | 
| 분류 | 
 그리디  | 
	
| 시간복잡도 | O(n^2) | 
| 인풋사이즈 | n<=500 | 
| 사용한 언어 | Python | 
| 제출기록 | 30864KB / 72ms | 
| 최고기록 | 72ms | 
| 해결날짜 | 2022/02/05 | 
"""Solution code for "BOJ 1960. 행렬만들기".
- Problem link: https://www.acmicpc.net/problem/1960
- Solution link: http://www.teferi.net/ps/problems/boj/1960
Tags: [Greedy]
"""
def main():
    n = int(input())
    count_by_row = [int(x) for x in input().split()]
    count_by_col = [int(x) for x in input().split()]
    answer = []
    sorted_cols = list(range(n))
    for count in count_by_row:
        answer_row = ['0'] * n
        sorted_cols.sort(reverse=True, key=count_by_col.__getitem__)
        for col in sorted_cols[:count]:
            count_by_col[col] -= 1
            answer_row[col] = '1'
        answer.append(''.join(answer_row))
    if all(x == 0 for x in count_by_col):
        print('1')
        print('\n'.join(answer))
    else:
        print('-1')
if __name__ == '__main__':
    main()