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 % 1000000007
    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)
    Qs = Q
    # 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.zeros((100, 100), dtype=int)
    a[0, 0] = 26

    prefs = []
    ptoi = {"": 0}
    idx = 1
    for bad_w in Qs:
        # if len(bad_w) == 1:
        #     a[0, 0] = a[0, 0] - 1
        # else:
        for i in range(len(bad_w)-1, 0, -1):
            if bad_w[:i] not in prefs:
                prefs.append(bad_w[:i])
                ptoi[bad_w[:i]] = idx
                idx += 1

        a[0, ptoi[bad_w[:-1]]] = a[0, ptoi[bad_w[:-1]]] - 1
    
    for pref in prefs:
        a[ptoi[pref], ptoi[pref[:-1]]] = 1
    
    for pref in prefs:
        for bad_w in Qs:
            if bad_w.endswith(pref):
                a[ptoi[pref], ptoi[bad_w[:-1]]] = a[ptoi[pref], ptoi[bad_w[:-1]]]-1

    a = mpow(a, n)
    
    # print(a[:5, :5])
    sys.stdout.write(str(a[0, 0]) + "\n")



if __name__ == "__main__":
    main()
