import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static List<List<Integer>> result = new ArrayList<>(); public static List<Integer> list = new ArrayList<>(); public static HashSet<Integer> set = new HashSet<>(); public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int n = in.nextInt(); int []trains = new int[n]; for (int i = 0; i < n; i++) { trains[i] = in.nextInt(); } dfs(0, trains); List<String> ans = new ArrayList<>(); for (int i = 0; i < result.size(); i++) { List<Integer> list1 = result.get(i); //筛选出合法的出栈排列 if (validateStackSequences(trains, list1)) { StringBuilder st = new StringBuilder(); for (int j = 0; j < list1.size(); j++) { st.append(list1.get(j)); } //转变成字符串方便字典序排序 ans.add(st.toString()); } } Collections.sort(ans); for (int i = 0; i < ans.size(); i++) { String s = ans.get(i); for (int j = 0; j < s.length(); j++) { int num = s.charAt(j) - '0'; if (j == s.length() - 1) { System.out.println(num); } else { System.out.print(num); System.out.print(" "); } } } } } //得出N个元素的全排列(*******) public static void dfs(int i, int[] nums) { if (i == nums.length) return; for (int j = 0; j < nums.length; j++) { if (!set.contains(nums[j])) { list.add(nums[j]); set.add(nums[j]); dfs(i + 1, nums); if (list.size() == nums.length) { result.add(new ArrayList<>(list)); } list.remove(i); set.remove(nums[j]); } } } //判断一个排列是否是合法的出栈顺序(*****) public static boolean validateStackSequences(int[] pushed, List<Integer> popped) { LinkedList<Integer> stack = new LinkedList<>(); int top = 0; for (int i = 0; i < pushed.length; i++) { stack.push(pushed[i]); while (!stack.isEmpty() && top < popped.size() && popped.get(top) == stack.peek()) { stack.pop(); top++; } } return stack.isEmpty(); } }