n, m, r = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(n)]
k = min(n, m) // 2
b = [[] for _ in range(k)]
c = [[] for _ in range(k)]
for t in range(k):
for j in range(t, m-1-t):
b[t].append(a[t][j])
for i in range(t, n-1-t):
b[t].append(a[i][m-1-t])
for j in range(m-1-t, t, -1):
b[t].append(a[n-1-t][j])
for j in range(n-1-t, t, -1):
b[t].append(a[j][t])
for t in range(k):
l = len(b[t])
for i in range(l):
c[t].append(b[t][(i+r)%l])
ans = [[0] * m for _ in range(n)]
for t in range(k):
cnt = 0
for j in range(t, m-1-t):
ans[t][j] = c[t][cnt]
cnt += 1
for i in range(t, n-1-t):
ans[i][m-1-t] = c[t][cnt]
cnt += 1
for j in range(m-1-t, t, -1):
ans[n-1-t][j] = c[t][cnt]
cnt += 1
for j in range(n-1-t, t, -1):
ans[j][t] = c[t][cnt]
cnt += 1
for row in ans:
print(' '.join(map(str, row)))
배열 돌리기 아이디어 :
1. 이차원 리스트를 그룹을 만들어 일차원 리스트로 만듬
2. 나머지 연산을 통해 일차원 리스트의 순서를 바꿈
3. 순서 바꾼 일차원 리스트를 다시 이차원 리스트로 만듬