import subprocess
import gzip, base64, os
import stat

gz = b'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'
bin = gzip.decompress(base64.b64decode(gz))
p = os.path.dirname(__file__)
pymain = os.path.join(p, "a.out")
with open(pymain, "wb") as f:
    f.write(bin)
os.chmod(pymain, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
if p == "":
    pymain = "./" + pymain
subprocess.call(pymain)


# compiled by pythran
'''
#pythran export main2()
import numpy as np
i8 = np.int64
i4 = np.int32


def solve(a, N):
    count = 0
    for x1 in range(10):
        for i1 in range(N):
            if a[i1] == x1:
                for x2 in range(10):
                    for i2 in range(i1 + 1, N):
                        if a[i2] == x2:
                            for x3 in range(10):
                                for i3 in range(i2 + 1, N):
                                    if a[i3] == x3:
                                        count += 1
                                        break
                            break
                break
    return count

def main2():
    stdin = open('/dev/stdin')
    N = int(stdin.readline())
    S = stdin.readline()
    a = np.empty(N, i8)
    for i in range(N):
        a[i] = int(S[i])
    print(solve(a, N))
'''

Measured memory_bytes: 4896