# n = int(input())
# t = 1
# while n > 0:
# if n % 2 == 1:
# print(t)
# break
# n //= 2
# t += 1
# import sys
# limit_number = 2000000000
# sys.setrecursionlimit(limit_number)
#
#
# def f(n):
# global memo
# if n == 1:
# memo[1] = 2
# return 2
# if n == 2:
# memo[2] = 3
# return 3
# if memo[n] != 0:
# return memo[n]
# memo[n] = f(n - 1) + f(n - 2)
# return memo[n]
#
#
# n = int(input())
# memo = [0] * (n + 1)
# print(f(n))
# import sys
# limit_number = 2000000000
# sys.setrecursionlimit(limit_number)
#
#
# def f(a):
# x = len(a)
# t = 1
# s = 0
# for i in range(x - 1, -1, -1):
# if ord(a[i]) > 64:
# s += (ord(a[i]) - 55) * t
# else:
# s += int(a[i]) * t
# t *= 30
# return s
#
#
# def g(a):
# if a <= 0:
# return 1
# g(a // 30)
# if a % 30 < 10:
# print(a % 30, end='')
# else:
# print(chr(a % 30 + 55), end='')
#
#
# n = int(input())
# k = []
# for i in range(n):
# v = list(input())
# k.append(v)
# c = []
# for i in range(n):
# ch = f(k[i])
# c.append(ch)
# c.sort()
# for i in range(n - 1, -1, -1):
# g(int(c[i]))
# print(end=' ')
# import sys
# limit_number = 2000000000
# sys.setrecursionlimit(limit_number)
#
#
# def f(a):
# global d, k
# if d[a] != 0:
# return d[a]
# s = 0
# for i in range(k):
# s += f(a - i - 1)
# d[a] = s
# return s
#
#
# k, n = map(int, input().split())
# d = [0] * (n + 1)
# c = list(map(int, input().split()))
# for i in range(k):
# d[i + 1] = c[i]
#
# print(f(n))
# import sys
# limit_number = 2000000000
# sys.setrecursionlimit(limit_number)
#
#
# def f(a):
# global d, k
# if d[a] != 0:
# return d[a]
# d[a] = g(a)
# return d[a] % 100007
#
#
# def g(a):
# global d, k, p
# if p[a] != 0:
# return p[a]
# p[a] = g(a - 1) + f(a - 1) - f(a - k - 1)
# return p[a] % 100007
#
#
# k, n = map(int, input().split())
# d = [0] * (n + 1)
# p = [0] * (n + 1)
# c = list(map(int, input().split()))
# for i in range(k):
# d[i + 1] = c[i] % 100007
# if k < n:
# p[k + 1] += d[i + 1]
#
# print(f(n))
# 1 1 1 j
# 2 1 1
# 3 1 1 i
# n = int(input())
# d = []
# for i in range(n):
# v = list(map(int, input().split()))
# v.append(i + 1)
# d.append(v)
# d.sort()
# x = -1
# for i in range(n - 1):
# if i <= x:
# continue
# if d[i][0] == d[i + 1][0] and d[i][1] == d[i + 1][1]:
# j = i
# x = i
# while x + 1 < n and d[x][0] == d[x + 1][0] and d[x][1] == d[x + 1][1]:
# x = x + 1
# for h in range(j, x + 1, 1):
# if 2 * h >= x + j:
# break
# t = d[h]
# d[h] = d[x + j - h]
# d[x + j - h] = t
#
# for i in range(n - 1, -1, -1):
# print(d[i][2], d[i][0], d[i][1])
# n = int(input())
# t = 1
# s = 0
# while t * t <= n:
# if n % t == 0:
# s += t
# if t != n // t:
# s += n // t
# t = t + 1
# print(s)
# n = int(input())
# t = 5
# s = 5
# while t <= n:
# k = 0
# for i in range(2, t, 1):
# if t % i == 0:
# k = 1
# break
# if k == 0:
# s += t
# t = t + 2
# if n >= 3:
# print(s)
# elif n == 2:
# print('2')
# else:
# print('0')
# n = int(input())
# d = []
# for i in range(n + 1):
# v = [0] * (n + 1)
# d.append(v)
# n = int(input())
# d = list(map(int, input().split()))
# m = int(input())
# d.sort()
# p = d[-1]
# x = d[0]
# s = sum(d)
# if s <= m:
# print(d[-1])
# else:
# for i in range(n):
# q = sum(d[0:i + 1])
# if m < q + d[i] * (n - i - 1):
# j = i - 1
# break
# q = sum(d[0:j + 1])
# m = m - q
# we = m // (n - j - 1)
# print(we)
def f(a, b):
global d
d[a][b] = 1
for i in range(n):
d[i][b] = 1
d[a][i] = 1
d[i][(i + b - a) % n] = 1
n = int(input())
d = []
for i in range(n + 1):
v = [0] * (n + 1)
d.append(v)
for i in range(n):
f(1, i + 1)