0%
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
def dfs(values,nums): path,result,used = [],[],[False for _ in range(nums)] def dfs_inner(values): if len(path)==nums: if illegal(path.copy()): result.append(path.copy()) for i in range(nums): if used[i]==True: continue used[i] = True path.append(values[i]) dfs_inner(values) path.pop() used[i] = False dfs_inner(values) return result def illegal(result)->bool: stack_ = [] for i in values: stack_.append(i) while stack_!=[] and stack_[-1]==result[0]: stack_.pop() result.pop(0) if stack_==[]: return True else: return False
if __name__=='__main__': nums = int(input()) values = input().split(' ')
result_all = sorted(dfs(values,nums)) for i in result_all: print(' '.join(i))
|