= middle + 1) { PreOrder(middle + 1, end); } } int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; for (int i = 0; i < n; i++) { int temp; cin >> temp; InOrder.push_back(temp); } for (int i = 0; i < n; i++) { int temp; cin >> temp; PostOrder.push_back(temp); } PreOrder(0, n-1); return 0; }"> = middle + 1) { PreOrder(middle + 1, end); } } int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; for (int i = 0; i < n; i++) { int temp; cin >> temp; InOrder.push_back(temp); } for (int i = 0; i < n; i++) { int temp; cin >> temp; PostOrder.push_back(temp); } PreOrder(0, n-1); return 0; }"> = middle + 1) { PreOrder(middle + 1, end); } } int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; for (int i = 0; i < n; i++) { int temp; cin >> temp; InOrder.push_back(temp); } for (int i = 0; i < n; i++) { int temp; cin >> temp; PostOrder.push_back(temp); } PreOrder(0, n-1); return 0; }">
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

vector<int> InOrder;
vector<int> PostOrder;

void PreOrder(int start, int end)
{
	int root;
	if (start == end)
	{
		cout << PostOrder[0] << " ";
		root = PostOrder[0];
		PostOrder.erase(PostOrder.begin());
	}
	else
	{
		int temp = end - start;
		cout << PostOrder[temp] << " ";
		root = PostOrder[temp];
		PostOrder.erase(PostOrder.begin() + temp);
	}
	int middle = find(InOrder.begin(), InOrder.end(), root) - InOrder.begin();

	if (start <= middle - 1)
	{
		PreOrder(start, middle - 1);
	}
	if (end >= middle + 1)
	{
		PreOrder(middle + 1, end);
	}
}

int main()
{
	ios::sync_with_stdio(false); cin.tie(0);

	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		int temp;
		cin >> temp;
		InOrder.push_back(temp);
	}
	for (int i = 0; i < n; i++)
	{
		int temp;
		cin >> temp;
		PostOrder.push_back(temp);
	}

	PreOrder(0, n-1);

	return 0;
}