N = int(input())
S = []; T = []; R = []
for i in range(N):
r, sx, sy, tx, ty = map(int, input().split())
S.append((sx, sy))
T.append((tx, ty))
R.append(r)
def dot(s, t, u):
sx, sy = s
tx, ty = t
ux, uy = u
return (tx - sx)*(ux - sx) + (ty - sy)*(uy - sy)
def cross(s, t, u):
sx, sy = s
tx, ty = t
ux, uy = u
return (tx - sx)*(uy - sy) - (ux - sx)*(ty - sy)
def dist2(s, t):
sx, sy = s
tx, ty = t
return (sx - tx)**2 + (sy - ty)**2
def check(r, s, t, r0, u):
if dist2(s, u) <= (r + r0)**2 or dist2(t, u) <= (r + r0)**2:
return 1
if not 0 <= dot(s, t, u) <= dist2(s, t):
return 0
if not 0 <= dot(t, s, u) <= dist2(s, t):
return 0
if not (cross(s, t, u))**2 <= dist2(s, t)*(r + r0)**2:
return 0
return 1
memo = {0: 0}
def dfs(state):
if state in memo:
return memo[state]
res = 0
for i in range(N):
if (state >> i) & 1 == 0:
continue
s = S[i]; t = T[i]; r = R[i]
for j in range(N):
if i == j:
continue
r0 = R[j]
if (state >> j) & 1:
u = S[j]
else:
u = T[j]
if check(r, s, t, r0, u):
break
else:
res = max(res, dfs(state ^ (1 << i)) + 1)
memo[state] = res
return res
print(dfs(2**N - 1))