# import heapq
# n, m, x = map(int, input().split())
# List = [[] for i in range(n+1)]
# for i in range(m):
# a, b, c = map(int, input().split())
# List[a].append((b, c))
#
#
# def dijkstra(s):
# q = []
# heapq.heappush(q, (0, s))
# di[s] = 0
# while q:
# dist, now = heapq.heappop(q)
# if di[now] < dist:
# continue
# for i in List[now]:
# co = dist + i[1]
# if co < di[i[0]]:
# di[i[0]] = co
# heapq.heappush(q, (co, i[0]))
# return di
#
#
# res = [[]]
# time = []
# for i in range(1, n+1):
# di = [int(1e9)] * (n+1)
# res.append(dijkstra(i))
# for i in range(1, n+1):
# time.append(res[i][x] + res[x][i])
#
# print(max(time))
n = int(input())
dp = 1
for i in range(n):
dp = list(str(dp))
for j in range(len(dp)):
if dp[j] == 0:
dp[j] = [1, 0]
else:
dp[j] = [0, 1]
//#include <stdio.h>
//int arr[4][2];
//float a, b;
//void line(int p1, int p2)
//{
// a = (float)(arr[p1][1] - arr[p2][1]) / (float)(arr[p1][0] - arr[p2][0]);
// b = (float)arr[p1][1] - a * (float)arr[p1][0];
//}
//int chk(int p1, int p2)
//{
// float t1, t2;
// t1 = a * (float)arr[p1][0] + b;
// t2 = a * (float)arr[p2][0] + b;
// if (t1 > (float)arr[p1][1] && t2 < (float)arr[p2][1])
// {
// return 1;
// }
// else if (t1 < (float)arr[p1][1] && t2 >(float)arr[p2][1])
// {
// return 1;
// }
// return 0;
//}
//int main()
//{
// int i;
// for(i=0;i<4;i++)
// {
// scanf("%d %d",&arr[i][0], &arr[i][1]);
// }
// line(0, 1);
// if (chk(2, 3) == 1)
// {
// line(2, 3);
// if (chk(0, 1) == 1)
// {
// printf("1");
// return 0;
// }
// }
// line(0, 2);
// if (chk(1, 3) == 1)
// {
// line(1, 3);
// if (chk(0, 2) == 1)
// {
// printf("1");
// return 0;
// }
// }
// line(0, 3);
// if (chk(1, 2) == 1)
// {
// line(1, 2);
// if (chk(0, 3) == 1)
// {
// printf("1");
// return 0;
// }
// }
// printf("0");
//}