#!/bin/python3 import sys n = int(input().strip()) m = list(map(int, input().strip().split(' '))) sol = set() def convert(vett): dic = {} ret = [] count = 0 for i in range(len(vett)): if(vett[i] in dic ): ret.append(dic[vett[i]]) else: dic[vett[i]] = count ret.append(count) count+=1 return ret def addSolution(solution,m): global sol if(reverse(solution,m)): s = str(solution) sol.add(s) def reverse(sol,vett): #print('sol vett',sol,vett) dic = {} for i in range(len(sol)): if sol[i] not in dic: dic[sol[i]] = list() dic[sol[i]].append(vett[i]) cmpare = list() tmp = list() while(len(cmpare)0): tmp.append(dic[k].pop(0)) tmp = sorted(tmp) cmpare = cmpare+ tmp tmp = list() #print('sol, vett,cmp',sol,vett,cmpare) if(str(vett)==str(cmpare)): return True else: return False def powerset(pos,vett,m): if(pos==len(vett)): sol = convert(vett) addSolution(sol,m) return vett[pos] = 1 powerset(pos+1,vett,m) vett[pos] = 2 powerset(pos+1,vett,m) vett[pos] = 3 powerset(pos+1,vett,m) return vett = list(m) powerset(0,vett,m) #print(sol) print(len(sol))