#!/usr/bin/env python3

MLET = 3
n = int(input())

words = [input() for _ in range(n)]

cidx = 0
dc = {}
def to_num(c):
    global dc, cidx
    if c not in dc:
        dc[c] = cidx
        cidx += 1
    return dc[c]

def rotate(a):
    return ((a&1)<<2) | (a>>1)

dp = {}
def win_cycle(pos, loops, stay):
    key = (pos, loops, stay)
    if key in dp:
        return dp[key]
    if pos == -1:
        return win_cycle(2, loops-1, stay)
    ret = False
    if stay&1 == 1 and not win_cycle(pos, loops, stay^1):
        ret = True
    if loops > 0 and not win_cycle(pos-1, loops, rotate(stay)):
        ret = True
    dp[key] = ret
    return ret

def win(idx):
    start = to_num(words[idx][-1])
    edges = [[0 for _ in range(MLET)] for __ in range(MLET)]
    for i in range(n):
        if i == idx:
            continue
        edges[to_num(words[i][0])][to_num(words[i][-1])] += 1
    for i in range(MLET):
        edges[i][i] %= 2
        for j in range(i+1,MLET):
            sub = min(edges[i][j], edges[j][i])
            edges[i][j] -= sub
            edges[j][i] -= sub

    can_win = False
    found = False
    for ia in [-1,1]:
        ecyc = []
        stay = 0
        for j in range(3):
            ecyc.append(edges[(start+j*ia)%3][(start+j*ia+ia)%3])
            if edges[(start+j*ia)%3][(start+j*ia)%3] > 0:
                stay |= 1 << j

        mn = min(ecyc)
        pos = -1 if ecyc[0] == mn else 0 if ecyc[1] == mn else 1
        if ecyc[0] > 0:
            can_win |= win_cycle(pos, mn + 1, stay)
            found = True
    if not found:
        can_win |= edges[start][start] > 0
    return can_win

print(sum(not win(i) for i in range(n)))
