This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
int cnt[9] = {};
vector<int> v[9], G[9];
bool check()
{
  bool ans = true;
  ans &= (cnt[1] <= cnt[4] + cnt[3] + cnt[8]);
  ans &= (cnt[4] <= cnt[1] + cnt[2] + cnt[7]);
  if(cnt[2])
    ans &= (cnt[1] + cnt[7] >= 1);
  if(cnt[3])
    ans &= (cnt[4] + cnt[8] >= 1);
  ans &= (cnt[7] + cnt[8] == 1);
  ans &= *min_element(cnt, cnt + 9) >= 0; 
  return ans;
}
int main()
{
  int n;
  cin >> n;
  G[1] = {3, 4, 8};
  G[2] = {1, 2, 7};
  G[3] = {8, 3, 4};
  G[4] = {1, 2, 7};
  G[5] = {3, 4, 8};
  G[6] = {1, 2, 7};
  
  
  for(int i = 0; i < n; i ++)
    {
      int x, a;
      cin >> x >> a;
      v[x].push_back(a);
      cnt[x]++;
    }
  
  for(int i = 1; i <= 8; i ++)
    sort(v[i].rbegin(), v[i].rend());
  if(v[5].size() + v[6].size() != 1)
    {
      cout << -1 << endl;
      return 0;
    }
  if(!check())
    {
      cout << -1 << endl;
      return 0;
    }
  int cur;
  vector<int> ans;
  if(v[5].size() == 1)
    cur = 5, ans.push_back(v[5][0]);
  else
    cur = 6, ans.push_back(v[6][0]);
  cnt[5] = cnt[6] = 0;
  // cerr << "done\n";
  for(int i = 1; i + 1 < n; i ++)
    {
      
      int nxt = -1;
      for(int k : G[cur])
	{
	  // cerr << "k = " << k << endl;
	  cnt[k]--;
	  if(check())
	    nxt = (nxt == -1 || v[nxt].back() > v[k].back()) ? k : nxt;
	  cnt[k]++;
	}
      // cerr << nxt << endl;
      if(nxt == -1)
	{
	  cout << nxt << endl;
	  return 0;
	}
      cnt[nxt]--;
      ans.push_back(v[nxt].back());
      v[nxt].pop_back();
      cur = nxt;
    }
  for(int i : G[cur])
    if(i == 7 || i == 8)
      ans.push_back(v[i][0]);
  if(ans.size() != n)
    cout << -1;
  else
    for(int i : ans)
      cout << i << ' ';
  cout << endl;
  return 0;
}
Compilation message (stderr)
slagalica.cpp: In function 'int main()':
slagalica.cpp:97:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   97 |   if(ans.size() != n)
      |      ~~~~~~~~~~~^~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |