예시
n = 125
print(n<<1) #125를 2배 한 값인 200 이 출력된다.
print(n>>1) #125를 2로 나눈 값에서 int로 감싼 62가 출력된다.
print(n/2) #125를 2로 나누면 62.5의 float값이 출력된다.
print(n<<2) #125를 4 곱한 값인 500이 출력된다.(int)
print(n>>2) #125를 4로 나눈 값에서 int로 감싼 31이 출력된다.
print(n/4) #125를 4로 나누면 31.25의 float값이 출력된다.
정수 10의 2진수 표현은 1010 이다.
10 << 1 을 계산하면 10100 이 된다 이 값은 10진수로 20이다.
10 >> 1 을 계산하면 101 이 된다. 이 값은 10진수로 5이다.
n = 0o10
print(n) #8
print(n<<1) #16
print(n/2) #4.0
n = 0o10 으로 작성해 넣으면 8진수(octal) 10으로 인식되어 10진수 8값이 저장되고
n = 0xf 나 n = 0XF 으로 작성해 넣으면 16진수(hexadecimal) F로 인식되어 10진수 15값으로 저장된다.
정수 2개(a, b)를 입력받아 a를 2b배 곱한 값으로 출력해보자.
a, b = input().split()
print(int(a)<<int(b))
두 정수(a, b)를 입력받아
a가 b보다 작으면 True 를, a가 b보다 크거나 같으면 False 를 출력하는 프로그램을 작성해보자.
#내 풀이
a, b = input().split()
a = int(a)
b = int(b)
if a < b:
print(True)
elif a >= b:
print(False)
#정리된 풀이
a, b = input().split()
a = int(a)
b = int(b)
print(int(a)<int(b)) #if가 굳이 필요없는데... 썼다
두 정수(a, b)를 입력받아
a와 b의 값이 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자.
a, b = input().split()
print(int(a)==int(b))
두 정수(a, b)를 입력받아
b의 값이 a의 값 보다 크거나 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자.
a, b = input().split()
print(int(a)<=int(b))
두 정수(a, b)를 입력받아
a의 값이 b의 값과 서로 다르면 True 를, 같으면 False 를 출력하는 프로그램을 작성해보자.
a, b = input().split()
print(int(a)!=int(b))
정수가 입력되었을 때, True/False 로 평가해주는 프로그램을 작성해보자.
print(bool(int(input())))
정수값이 입력될 때,
그 불 값을 반대로 출력하는 프로그램을 작성해보자.
print(not bool(int(input())))
2개의 정수값이 입력될 때,
그 불 값이 모두 True 일 때에만 True 를 출력하는 프로그램을 작성해보자.
a, b = input().split()
print(bool(int(a) and int(b)))
2개의 정수값이 입력될 때,
그 불 값이 하나라도 True 일 때에만 True 를 출력하는 프로그램을 작성해보자.
a, b = input().split()
print(bool(int(a) or int(b)))
2개의 정수값이 입력될 때,
그 불 값(True/False) 이 서로 다를 때에만 True 를 출력하는 프로그램을 작성해보자.
#내 풀이_if문을 사용했다.
a, b = input().split()
if int(a) != int(b):
print(True)
else:
print(False)
#if문 없이_1
2개의 정수값이 입력될 때,
그 불 값(True/False) 이 서로 같을 때에만 True 를 출력하는 프로그램을 작성해보자.
#내 풀이_if사용
a, b = input().split()
if int(a) == int(b):
print(True)
else:
print(False)
#if문 없이_1
a, b = input().split()
a = bool(int(a))
b = bool(int(b))
print(a==b)
#if문 없이_1
a, b = input().split()
a = bool(int(a))
b = bool(int(b))
print((a and b) or (not a and not b))
2개의 정수값이 입력될 때,
그 불 값(True/False) 이 모두 False 일 때에만 True 를 출력하는 프로그램을 작성해보자.
a, b = input().split()
print(not bool(int(a)) and not bool(int(b)))
입력 된 정수를 비트단위로 참/거짓을 바꾼 후 정수로 출력해보자.
비트단위(bitwise)연산자 ~ 를 붙이면 된다.(~ : tilde, 틸드라고 읽는다.)
a = 1
print(~a) #-2가 출력된다.
간단히 표현하면, 정수 n이라고 할 때,
~n = -n - 1
-n = ~n + 1 과 같은 관계로 표현할 수 있다.
print(~int(input())) #만약 2를 넣으면 -3이 나온다.
입력된 정수 두 개를 비트단위로 and 연산한 후 그 결과를 정수로 출력해보자.
a, b= input().split()
print(int(a)&int(b))
1) 과정
예를 들어 3과 5가 입력되었을 때를 살펴보면 아래와 같이 된다.
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 & 5 : 00000000 00000000 00000000 00000001
비트단위 and 연산은 두 비트열이 주어졌을 때,
둘 다 1인 부분의 자리만 1로 만들어주는 것과 같다.
2) 활용
A. 데이터를 주고 받기 위해 같은 네트워크인지 판단
B. 그래픽 처리에서 마스크연산(특정 부분을 가리고 출력한다.)
입력된 정수 두 개를 비트단위로 or 연산한 후 그 결과를 정수로 출력해보자.
a, b= input().split()
print(int(a)|int(b))
1) 과정
| 은 파이프(pipe)연산자라고도 불린다.
예를 들어 3과 5가 입력되었을 때를 살펴보면
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 | 5 : 00000000 00000000 00000000 00000111
입력된 정수 두 개를 비트단위로 xor 연산한 후 그 결과를 정수로 출력해보자.
a, b= input().split()
print(int(a)^int(b))
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 ^ 5 : 00000000 00000000 00000000 00000110
쉽게 설명하자면, 두 장의 이미지가 겹쳐졌을 때 색이 서로 다른 부분만 처리할 수 있다.
주의! ^은 수학식에서 거듭제곱(power)을 의미하지만, C언어에서는 전혀 다른 배타적 논리합(xor, 서로 다를 때 1)의 의미를 가진다.
입력된 두 정수(a, b) 중 큰 값을 출력하는 프로그램을 작성해보자.
단, 3항 연산을 사용한다.
a, b= input().split()
a = int(a)
b = int(b)
c = a if a>=b else b
print(c)
※ 3항 연산
3개의 요소로 이루어진 연산이다.
1) 형태 (x if C else y)
#3항연산
x if C else y
#조건문
if C:
x
else:
y
입력된 세 정수 a, b, c 중 가장 작은 값을 출력하는 프로그램을 작성해보자.
단, 3항 연산을 사용한다.
a, b, c = input().split()
a = int(a)
b = int(b)
c = int(c)
d = a if a<b else b
e = d if d<c else c
print(e)
#3항연산 안 쓰고 리스트활용 풀이
a, b, c= input().split()
d = [int(a), int(b), int(c)]
print(min(d))
3개의 정수(a, b, c)가 입력되었을 때, 짝수만 출력해보자.
a, b, c= input().split()
d = [a, b, c]
for i in d:
i = int(i)
if i % 2 == 0:
print(i)
3개의 정수(a, b, c)가 입력되었을 때, 짝수면 even을, 홀수면 odd를 출력해보자.
a, b, c= input().split()
d = [a, b, c]
for i in d:
i = int(i)
if i % 2 == 0:
print("even")
else:
print("odd")
0이 아닌 정수 1개가 입력되었을 때, 음(-)/양(+)과 짝(even)/홀(odd)을 구분해 분류해보자.
a = int(input())
if a < 0:
if a % 2 == 0:
print("A")
else:
print("B")
else:
if a % 2 == 0:
print("C")
else:
print("D")
점수(정수, 0 ~ 100)를 입력받아 평가를 출력해보자.
a = int(input())
if 90 <= a:
print("A")
elif 70 <= a:
print("B")
elif 40 <= a:
print("C")
else:
print("D")
평가를 문자(A, B, C, D, ...)로 입력받아 내용을 다르게 출력해보자.
a = input()
if a == "A":
print("best!!!")
elif a == "B":
print("good!!")
elif a == "C":
print("run!")
elif a == "D":
print("slowly~")
else:
print("what?")
월이 입력될 때 계절 이름이 출력되도록 해보자.
a = int(input())
if a == 12 or 0 < a < 3:
print("winter")
elif a < 6:
print("spring")
elif a < 9:
print("summer")
elif a < 12:
print("fall")
입력 예시: 출력예시
12, 1, 2 : winter
3, 4, 5 : spring
6, 7, 8 : summer
9, 10, 11 : fall
0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자.
while True:
a = int(input())
if a == 0:
break
else:
print(a)
#이거와 무슨 차이지?
a = 1
while a != 0:
a = int(input())
print(a)
정수(1 ~ 100) 1개가 입력되었을 때 1까지 카운트다운을 출력해보자.
a = int(input())
while a != 0:
print(a)
a -= 1
정수(1 ~ 100) 1개가 입력되었을 때 1까지 카운트다운을 출력해보자.
(단, 입력숫자 미포함)
a = int(input())
while a != 0:
a -= 1 #요 생각을 못했네
print(a)
영문 소문자(a ~ z) 1개가 입력되었을 때,
a부터 그 문자까지의 알파벳을 순서대로 출력해보자.
입력 예시: f
출력 예시: a b c d e f
a = ord(input())
b = ord("a")
while b <= a:
print(chr(b), end=' ')
b += 1
정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자.
a = int(input())
b = 0
while b <= a:
print(b)
b += 1
정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자.
단, for문과 range를 활용해라.
#내 풀이
a = int(input())
for i in range(101):
if i > a:
break
else:
print(i)
# 정리된 풀이
a = int(input())
for i in range(a+1):
print(i)
정수(1 ~ 100) 1개를 입력받아 1부터 그 수까지 짝수의 합을 구해보자.
a = int(input())
b = 0
for i in range(2, a+1, 2):
b += i
print(b)
영문 소문자 'q'가 입력될 때까지
입력한 문자를 계속 출력하는 프로그램을 작성해보자.
a = 0
while a != "q":
a = input()
print(a)
1, 2, 3 ... 을 계속 더해 나갈 때,
그 합이 입력한 정수(0 ~ 1000)보다 같거나 작을 때까지만
계속 더하는 프로그램을 작성해보자.
순서대로 계속 더해 합을 만들어가다가, 입력된 정수와 같거나 커졌을 때, 마지막에 더한 정수를 출력한다.
# for 풀이
a = int(input())
sum = 0
for i in range(1000):
sum += i
if sum >= a:
break
print(i)
# while 풀이
n = int(input())
s = 0
t = 0
while s<n :
t += 1
s += t
print(t)
1부터 n까지, 1부터 m까지 숫자가 적힌 서로 다른 주사위 2개를 던졌을 때,
나올 수 있는 모든 경우를 출력해보자.
a, b = input().split()
a= int(a)
b = int(b)
for i in range(1, a+1):
for j in range(1, b+1):
print(i, j)
16진수(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)를 배운
영일이는 16진수끼리 곱하는 16진수 구구단?에 대해서 궁금해졌다.
A, B, C, D, E, F 중 하나가 입력될 때,
1부터 F까지 곱한 16진수 구구단의 내용을 출력해보자.
(단, A ~ F 까지만 입력된다.)
B를 입력시 출력예시
B*1=B
B*2=16
B*3=21
B*4=2C
B*5=37
B*6=42
B*7=4D
B*8=58
B*9=63
B*A=6E
B*B=79
B*C=84
B*D=8F
B*E=9A
B*F=A5
n = int(input(), 16)
for i in range(1, 16):
print('%X'%n, '*%X'%i, '=%X'%(n*i), sep='')
print('%X'%n) #n에 10진수 숫자 입력
print('%X'%15) #F
print('%x'%15) #f x가 소문자면 출력도 소문자로
print(int("16진수", 16))
print(int("F", 16)) # 15
3 6 9 게임은?
여러 사람이 순서를 정한 후, 순서대로 수를 부르는 게임이다.
만약 3, 6, 9 가 들어간 수를 자신이 불러야 하는 상황이라면, 수를 부르는 대신 박수를 쳐야 한다.
33과 같이 3,6,9가 두 번 들어간 수 일때, "짝짝"과 같이 박수를 두 번 치는 형태도 있다.
입력 받은 숫자까지 마지막 숫자가 3, 6, 9인 숫자는 'X'로 표현되게 한다.
num1 = int(input())
for i in range(1, num1+1):
if i%10==3 or i%10==6 or i%10==9 :
i = "X"
print(i, end=" ")
빨강(red), 초록(green), 파랑(blue) 빛을 섞어 여러 가지 다른 색 빛을 만들어 내려고 한다. 빨강(r), 초록(g), 파랑(b) 각 빛의 가짓수가 주어질 때, 주어진 rgb 빛들을 섞어 만들 수 있는 모든 경우의 조합(r g b)과 만들 수 있는 색의 가짓 수를 계산해보자.
입력예시: 2 2 2
출력예시:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
8#풀이1 r, g, b = input().split() r = int(r) g = int(g) b = int(b) a = 0 for i in range(r): for j in range(g): for k in range(b): print(i,j,k) a += 1 print(a) # 혹은 a를 사용하지않고 print(r*g*b)으로도 가능하다. #풀이2 (메모리초과) r, g, b = input().split() r = int(r) g = int(g) b = int(b) list1 = [] for i in range(r): for j in range(g): for k in range(b): list1.append([i,j,k]) print(i,j,k) print(len(list1))
6084 소리 파일 저장용량 계산하기
소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다.
마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크하고,
한 번씩 체크할 때 마다 그 값을 정수값으로 바꾸어 저장하는 방식으로 소리를 파일로 저장할 수 있다.
값을 저장할 때에는 비트를 사용하는 정도에 따라 세세한 녹음 정도를 결정할 수 있고,
좌우(스테레오) 채널로 저장하면 2배… 5.1채널이면 6배의 저장공간이 필요하고,
녹음 시간이 길면 그 만큼 더 많은 저장공간이 필요하다.
1초 동안 마이크로 소리강약을 체크하는 횟수를 h
(헤르츠, Hz 는 1초에 몇 번? 체크하는가를 의미한다.)
한 번 체크한 값을 저장할 때 사용하는 비트수를 b
(2비트를 사용하면 0 또는 1 두 가지, 16비트를 사용하면 65536가지..)
좌우 등 소리를 저장할 트랙 개수인 채널 개수를 c
(모노는 1개, 스테레오는 2개의 트랙으로 저장함을 의미한다.)
녹음할 시간(초) s가 주어질 때,
필요한 저장 용량을 계산하는 프로그램을 작성해보자.
a, b, c, d=map(int, input().split())
e = a*b*c*d/8
print(round((e/1024)/1024, 1), "MB")
1) list와 활용
a = list(map(str, range(6))) #map(적용할 함수, 적용범위)
print(type(a[1])) # <class 'str'> 리스트 내에 일일히 함수를 적용한다.
2)input한 여러 변수들 한번에 int로 타입변환
#활용
a, b, c, d=map(int, input().split())
#a, b, c, d를 일일히 int 선언한 것과 같다
이미지가 컴퓨터에 저장될 때에도 디지털 데이터화 되어 저장된다.
가장 기본적인 방법으로는 그림을 구성하는 한 점(pixel, 픽셀)의 색상을
빨강(r), 초록(g), 파랑(b)의 3가지의 빛의 세기 값으로 따로 변환하여 저장하는 것인데,
예를 들어 r, g, b 각 색에 대해서 8비트(0~255, 256가지 가능)씩을 사용한다고 하면,
한 점의 색상은 3가지 r, g, b의 8비트+8비트+8비트로 총 24비트로 표현해서
총 2^24 가지의 서로 다른 빛의 색깔을 사용할 수 있는 것이다.
그렇게 저장하는 점을 모아 하나의 큰 이미지를 저장할 수 있게 되는데,
1024 * 768 사이즈에 각 점에 대해 24비트로 저장하면 그 이미지를 저장하기 위한
저장 용량을 계산할 수 있다.
이렇게 이미지의 원래(raw) 데이터를 압축하지 않고 그대로 저장하는 대표적인 이미지 파일이 *.bmp 파일이며, 비트로 그림을 구성한다고 하여 비트맵 방식 또는 래스터 방식이라고 한다.
이미지의 가로 해상도 w, 세로 해상도 h, 한 픽셀을 저장하기 위한 비트 b 가 주어질 때,
압축하지 않고 저장하기 위해 필요한 저장 용량을 계산하는 프로그램을 작성해 보자.
예를 들어
일반적인 1024 768 사이즈(해상도)의 각점에 대해
24비트(rgb 각각 8비트씩 3개)로 저장하려면
1024 768 * 24 bit의 저장공간이 필요한데,
1024*768*24/8/1024/1024 로 계산하면 약 2.25 MB 정도가 필요하다.
실제 그런지 확인하고 싶다면, 간단한 그림 편집/수정 프로그램을 통해 확인할 수 있다.
입력예시
w, h, b 가 공백을 두고 입력된다.
단, w, h는 모두 정수이고 1~1024 이다. b는 40이하의 4의 배수이다.
필요한 저장 공간을 MB 단위로 바꾸어 출력한다. 단, 소수점 셋째 자리에서 반올림하여 둘째 자리까지 출력한다.
a, b, c=map(int, input().split())
e = a*b*c/8
print("%.2f MB"%round((e/1024)/1024, 2))
1, 2, 3 ... 을 순서대로 계속 더해 합을 만드는데,
그 합이 입력한 정수보다 작을 동안만 계속 더하는 프로그램을 작성해보자.
즉, 1부터 n까지 정수를 하나씩 더해 합을 만드는데,
어디까지 더해야 입력한 수보다 같거나 커지는지 알아보고자 하는 문제이다.
하지만, 이번에는 그 때까지의 합을 출력해야 한다.
예를 들어, 57을 입력하면
1+2+3+...+8+9+10=55에서 그 다음 수인 11을 더해 66이 될 때,
그 값 66이 출력되어야 한다.
#풀이1_for문
a = int(input())
sum = 0
for i in range(1, a+1):
sum += i
if sum >= a:
break
print(sum)
#풀이2_while문
a=int(input())
s=0
c=0
while True:
s=s+c
c=c+1
if s>=a:
break
print(s)
1부터 입력한 정수까지 1씩 증가시켜 출력하는 프로그램을 작성하되,
3의 배수인 경우는 출력하지 않도록 만들어보자.
입력 예시: 10
출력예시: 1 2 4 5 7 8 10
a=int(input())
for i in range(1, a+1):
if i%3 != 0:
print(i, end=" ")
시작 값(a), 등차의 값(d), 몇 번째 수 인지를 의미하는 정수(n)가
공백을 두고 입력된다.(모두 0 ~ 100) 즉, a d n을 입력하면 n번째 수를 출력해보자.
a, d, n= map(int , input().split())
for i in range(1, n): #왜 n+1이 아닌지 생각해보자.
a += d
print(a)
시작 값(a), 등비의 값(r), 몇 번째 인지를 나타내는 정수(n)가
공백을 두고 입력된다.(모두 0 ~ 10) 즉, a r n을 입력하면 n번째 수를 출력해보자.
a, d, n= map(int , input().split())
for i in range(1, n):
a *= d
print(a)
시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째 인지를 나타내는 정수(n)가
공백을 두고 입력된다.(a, m, d는 -50 ~ +50, n은 10이하의 자연수) 즉, a m d n을 입력하면 n번째 수를 출력해보자.
a, m, d, n= map(int , input().split())
for i in range(1, n):
a = a*m+d
print(a)
함께 문제 푸는 날(설명)
같은 날 동시에 가입한 인원 3명이 규칙적으로 방문하는,
방문 주기가 공백을 두고 입력된다. (단, 입력값은 100이하의 자연수이다.) 3명이 다시 모두 함께 방문해 문제를 풀어보는 날(동시 가입/등업 후 며칠 후?)을 출력한다.
#풀이1(for문)
a, b, c = map(int, input().split())
for i in range(1, (a*b*c)+1):
if i%a == 0 and i%b == 0 and i%c == 0:
print(i)
break
#풀이2(while문)
a, b, c = map(int, input().split())
d = 1
while d%a!=0 or d%b!=0 or d%c!=0 :
d += 1
print(d)
1 ~ 23번 학생의 출석을 부르는데 순서대로 부르는 게 아닌 선생님이 무작의로 n번 부른다. 중복되게 부를 수도 있다. 그럴 때 중복되게 불린 번호의 개수를 일일이 출력해보자.
첫 번째 줄에 출석 번호를 부른 횟수인 정수 n이 입력된다. (1 ~ 10000) # 예시 10
두 번째 줄에는 무작위로 부른 n개의 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다. # 1 3 2 2 5 6 7 4 5 9
출력예시
1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n = int(input()) #개수를 입력받아 n에 정수로 저장
a = list(map(int, input().split())) #공백을 기준으로 잘라 a에 순서대로 저장
# d를 0값이 24개인 리스트로 만든다.
d = []
for i in range(24) :
d.append(0)
#입력한 숫자를 매칭하여 개수를 센다.
for i in range(n) : #번호를 부를 때마다, 그 번호에 대한 카운트 1씩 증가
d[a[i]] += 1
print(*d[1:])
출석 번호를 n번 무작위로 부르는데 부른 번호들을 거꾸로 출력해보자.
번호를 부른 횟수(n, 1 ~ 10000)가 첫 줄에 입력된다. #입력예시 10
n개의 랜덤 번호(k, 1 ~ 23)가 두 번째 줄에 공백을 사이에 두고 순서대로 입력된다. #입력예시 10 4 2 3 6 6 7 9 8 5
출력예시
5 8 9 7 6 6 3 2 4 10
n = int(input()) #개수를 입력받아 n에 정수로 저장
a = list(map(int, input().split())) #공백을 기준으로 잘라 a에 순서대로 저장
print(*a[::-1])
map함수를 이용하면 굳이 n 값을 따로 넣을 필요 없다.
출석번호를 n번 부르는데 부른 출석번호 중 가장 작은 번호를 출력해보자. 입력예시는 6093과 별반 다르지 않다.
n = int(input()) #개수를 입력받아 n에 정수로 저장
a = list(map(int, input().split())) #공백을 기준으로 잘라 a에 순서대로 저장
print(min(a))
바둑판(19 * 19) 바둑판을 만들고 n개의 흰 돌을 놓는다. n개의 흰 돌이 놓인 위치를 구별하여 바둑판을 출력해보자. 바둑판에 놓을 흰돌의 개수를 첫 번째 줄에 입력한다. 두 번째 줄부터 n+1줄까지 흰돌을 놓을 위치를 x y 띄어쓰기 없이 입력한다.
출력예시
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#먼저 2차원리스트로 바둑판을 만든다.
z = []
for i in range(19): #19개 돌을 놓는다. 20이 아닌 이유를 생각해보자.
z.append([])
for j in range(19):
z[i].append(0)
#입력받을 값과 그 값에 따라 흰돌을 놓는다.
n = int(input())
for i in range(n) :
a,b = map(int, input().split())
z[a-1][b-1] = 1
#바둑판을 언패킹해서 출력한다.
for j in z:
print(*j)
z = []
d = 30
for i in range(19):
c = list(map(int, input().split()))
z.append(c)
n = int(input())
for i in range(n):
a,b = map(int, input().split())
a -= 1
b -= 1
for j in range(19):
if d != j:
if a != j:
if z[a][j] == 1:
z[a][j] = 0
if b != j:
if z[j][b] == 1:
z[j][b] = 0
if z[j][b] == z[b][b]:
break
for j in z:
print(*j)