This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/*
ID: antwand1
TASK: barn1
LANG: C++
*/
#include <bits/stdc++.h>
#define ll long long
#define int long long
#define du long double
#define F first
#define S second
using namespace std;
deque<int> v[10];
vector<int> vec;
int n;
bool bc(int i,int u)
{
    if(i==n){
        if(u%2)u=8;
        else u=7;
        if(v[u].size()){
            vec.push_back(v[u][0]);
            return 1;
        }
        else return 0;
    }
    bool ret=0;
    int r=1;
    if(u%2)r=3;
    if(v[r].empty()&&v[r+1].empty())return 0;
    if(v[r].empty()){
        int q=v[r+1].front();
        v[r+1].pop_front();
        ret=bc(i+1,0);
        v[r+1].push_front(q);
        if(ret)vec.push_back(q);
        return ret;
    }
    else if(v[r+1].empty()){
        int q=v[r].front();
        v[r].pop_front();
        ret=bc(i+1,1);
        v[r].push_front(q);
        if(ret)vec.push_back(q);
        return ret;
    }
    else{
        if(v[r][0]<v[r+1][0]){
            int q=v[r].front();
            v[r].pop_front();
            ret=bc(i+1,1);
            v[r].push_front(q);
            if(ret)vec.push_back(q);
            if(ret)return ret;
            q=v[r+1].front();
            v[r+1].pop_front();
            ret=bc(i+1,0);
            v[r+1].push_front(q);
            if(ret)vec.push_back(q);
            return ret;
        }
        else{
            int q=v[r+1].front();
            v[r+1].pop_front();
            ret=bc(i+1,0);
            v[r+1].push_front(q);
            if(ret)vec.push_back(q);
            if(ret)return ret;
            q=v[r].front();
            v[r].pop_front();
            ret=bc(i+1,1);
            v[r].push_front(q);
            if(ret)vec.push_back(q);
            return ret;
        }
    }
}
main()
{
    //freopen("barn1.in","r",stdin);freopen("barn1.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        int x,a;
        cin>>x>>a;
        v[x].push_back(a);
    }
    for(int i=1;i<=8;i++)sort(v[i].begin(),v[i].end());
    if(v[5].empty()==0){
        if(bc(2,1)){
            vec.push_back(v[5][0]);
            reverse(vec.begin(),vec.end());
            for(int i=0;i<n;i++){
                cout<<vec[i]<<" ";
            }
            cout<<endl;
        }
        else cout<<-1<<endl;
    }
    else if(v[6].empty()==0){
        if(bc(2,0)){
            vec.push_back(v[6][0]);
            reverse(vec.begin(),vec.end());
            for(int i=0;i<n;i++){
                cout<<vec[i]<<" ";
            }
            cout<<endl;
        }
        else cout<<-1<<endl;
    }
    else cout<<-1<<endl;
}
/*
bool bc(int i,int a)
{
    if(i==n){
        if(a==0){
            if(v[7].empty()==0){
                s+=v[7].front()+'0';
                return 1;
            }
            else return 0;
        }
        else{
            if(v[8].empty()==0){
                s+=v[8].front()+'0';
                return 1;
            }
            else return 0;
        }
    }
    bool ret=0;
    if(a==0){
        if(v[1].empty()&&v[2].empty())return 0;
        if(v[1].empty()){
            int q=v[2][0];
            v[2].pop_front();
            ret=bc(i+1,0);
            v[2].push_front(q);
            if(ret)s+=q+'0';
            return ret;
        }
        else{
            if(v[2].empty()){
                int q=v[1][0];
                v[1].pop_front();
                ret=bc(i+1,1);
                v[1].push_front(q);
                if(ret)s+=q+'0';
                return ret;
            }
            else{
                if(v[1][0]<v[2][0]){
                    int q=v[1][0];
                    v[1].pop_front();
                    ret=bc(i+1,1);
                    v[1].push_front(q);
                    if(ret)s+=q+'0';
                    if(ret)return ret;
                    q=v[2][0];
                    v[2].pop_front();
                    ret=bc(i+1,0);
                    v[2].push_front(q);
                    if(ret)s+=q+'0';
                    return ret;
                }
                else{
                    int q=v[2][0];
                    v[2].pop_front();
                    ret=bc(i+1,0);
                    v[2].push_front(q);
                    if(ret)s+=q+'0';
                    if(ret)return ret;
                    q=v[1][0];
                    v[1].pop_front();
                    ret=bc(i+1,1);
                    v[1].push_front(q);
                    if(ret)s+=q+'0';
                    return ret;
                }
            }
        }
    }
    else{
        if(v[3].empty()&&v[4].empty())return 0;
        if(v[3].empty()){
            int q=v[4][0];
            v[4].pop_front();
            ret=bc(i+1,0);
            v[4].push_front(q);
            if(ret)s+=q+'0';
            return ret;
        }
        else{
            if(v[3].empty()){
                int q=v[3][0];
                v[3].pop_front();
                ret=bc(i+1,1);
                v[3].push_front(q);
                if(ret)s+=q+'0';
                return ret;
            }
            else{
                if(v[3][0]<v[4][0]){
                    int q=v[1][0];
                    v[3].pop_front();
                    ret=bc(i+1,1);
                    v[3].push_front(q);
                    if(ret)s+=q+'0';
                    if(ret)return ret;
                    q=v[4][0];
                    v[4].pop_front();
                    ret=bc(i+1,0);
                    v[4].push_front(q);
                    if(ret)s+=q+'0';
                    return ret;
                }
                else{
                    int q=v[4][0];
                    v[4].pop_front();
                    ret=bc(i+1,0);
                    v[4].push_front(q);
                    if(ret)s+=q+'0';
                    if(ret)return ret;
                    q=v[3][0];
                    v[3].pop_front();
                    ret=bc(i+1,1);
                    v[3].push_front(q);
                    if(ret)s+=q+'0';
                    return ret;
                }
            }
        }
    }
}
*/
Compilation message (stderr)
slagalica.cpp:78:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   78 | main()
      |      ^| # | 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... |