import sys
import numpy as np

Q = []

def check(i, j):
    for k in range(min(len(Q[i]), len(Q[j]))):
        if Q[i][len(Q[i])-1-k] != Q[j][len(Q[j])-1-k]:
            return False
    return True

def k(a):
    return np.dot(a, a) % 1000000007

def mpow(a, b):
    if b == 1:
        return a
    elif b == 0:
        return np.identity(100)
    else:
        if b & 1:
            return np.dot(a, k(mpow(a, b // 2))) % 1000000007
        else:
            return k(mpow(a, b // 2)) % 1000000007

def main():
    [n, q] = map(int, sys.stdin.readline().strip().split(' '))
    Qs = []
    for i in range(q):
        [_, qq] = sys.stdin.readline().strip().split()
        ok = True
        for i in range(len(Q)):
            if Q[i] == qq:
                ok = False
        if ok:
            Q.append(qq)
    q = len(Q)
    bad = np.zeros(q)
    for i in range(q):
        for j in range(i+1, q):
            if check(i, j):
                if len(Q[i]) > len(Q[j]):
                    bad[i] = 1
                else:
                    bad[j] = 1
    for i in range(q):
        if not bad[i]:
            Qs.append(Q[i])

    # print(Qs)
    a = np.diag(np.ones(99), -1).astype(int)
    a[0, 0] = 26
    for i in range(len(Qs)):
        a[0, len(Qs[i])-1] = a[0, len(Qs[i]) - 1] - 1
    a = mpow(a, n)

    sys.stdout.write(str(a[0, 0]) + "\n")



if __name__ == "__main__":
    main()
