#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <sstream>
#include <climits>
#include <cmath>
#include <functional>
#include <map>
#include <stack>
using namespace std;
#define M_PI 3.141592
#define FOR(i,n) for(int i=0;i<(int)n;i++)
#define FORI(i,k,n) for(int i=k;i<(int)n;i++)
#define toRad 2.0*M_PI/360.0
#define inin(x) int x;cin>>x;
#define all(x) x.begin(),x.end()
#define debug(x) cout<<#x<<" "<<x<<endl;
#define rep(i,n) for(int i=0;i<(int)n;i++)
#define EPS 1e-12
#define pri_max 60000
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };

/*
bool memo[pri_max] = {};
vector<int> pri;
void calc()
{
	for (int i = 2; i < pri_max; i++)
	{
		if (memo[i] == false)
		{
			pri.push_back(i);
			for (int l = i; l < pri_max; l += i)
			{
				memo[l] = true;
			}
		}
	}
}*/
double len(pdd a, pdd b)
{
	return sqrt((b.first - a.first)*(b.first - a.first) + (b.second - a.second)*(b.second - a.second));
}

int main()
{
	int p[8];
	while (cin >> p[0] >> p[1] >> p[2] >> p[3] >> p[4] >> p[5] >> p[6] >> p[7])
	{
		int c[8] = { 1,2,1,2,1,4,1,4 };
		int l = -1, m = -1;
		long long v = LLONG_MAX;
		FOR(i, 8)
		{
			int s = 0;
			FOR(k, 8)
			{
				s += min(p[k], c[k]);
			}
			if (s > m)
			{
				long long t = 0;
				FOR(j, 8)
				{
					t += c[j] * pow(10, 7 - j);
				}

				m = s;
				l = i;
				v = t;
			}
			else if (s == m)
			{
				long long t = 0;
				FOR(j, 8)
				{
					t += c[j] * pow(10, 7 - j);
				}
				if (t < v)
				{
					m = s;
					l = i;
					v = t;
				}
			}

			FOR(k, 8 - 1)
			{
				swap(c[k], c[k + 1]);
			}
		}
		FOR(i, l)
		{
			FOR(k, 8 - 1)
			{
				swap(c[k], c[k + 1]);
			}
		}
		FOR(i, 8)
		{
			cout << c[i] << " ";
		}
		cout << endl;
	}
}