# region template from typing import Generic, Iterable, Iterator, TypeVar, Union, List from bisect import bisect_left, bisect_right from bisect import bisect_left, bisect_right, insort from email.policy import default import re import typing import math import sys import copy import itertools import collections import bisect import heapq import decimal import random import gc def ni(): return int(sys.stdin.readline()) def ns(): return map(int, sys.stdin.readline().split()) def ns1(): return map(lambda x: int(x)-1, sys.stdin.readline().split()) def na(): return list(map(int, sys.stdin.readline().split())) def na1(): return list(map(lambda x: int(x)-1, sys.stdin.readline().split())) def nall(): return list(map(int, sys.stdin.read().split())) def flush(): return sys.stdout.flush() def nib(): return int(sys.stdin.buffer.readline()) def nsb(): return map(int, sys.stdin.buffer.readline().split()) def ns1b(): return map(lambda x: int(x)-1, sys.stdin.buffer.readline().split()) def nab(): return list(map(int, sys.stdin.buffer.readline().split())) def na1b(): return list(map(lambda x: int(x)-1, sys.stdin.buffer.readline().split())) def nallb(): return list(map(int, sys.stdin.buffer.read().split())) # limregion # sys.setrecursionlimit(10**7+1) inf = 10**20 # mod = 10**9+7 mod = 998244353 def main(): N = ni() A = na() cnt = collections.Counter(A) l = [[k, v] for k, v in cnt.items()] perm = [0,1] for i in range(2, 25): perm.append(perm[-1]*i) bunshi, bunbo = 1, perm[N] for k, v in l: bunshi *= perm[v] print((bunbo+bunshi-1)//bunshi) if __name__ == '__main__': main()