#include<bits/stdc++.h>
#define sync ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define pb(a) push_back(a);
#define ll long long int
using namespace std;
int main()
{
	sync

	string s;
	cin >> s;
	int i;
	reverse(s.begin(), s.end());
	for(i=0; i<s.size(); i++){
		if(s[i]=='6'){
			s[i]='9';
		}
		else if(s[i]=='9'){
			s[i]='6';
		}
	}
	cout << s << endl;
}
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("fast-math")

#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

#define deb(x) cout << #x << " is " << x << "\n"
#define int long long
#define MOD 1000000007LL
#define PI acos(-1)

template <typename T>
using min_heap = priority_queue<T, vector<T>, greater<T>>;

template <typename T>
using max_heap = priority_queue<T>;

template <class T>
using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;

template <typename... T>
void read(T &...args) {
	((cin >> args), ...);
}

template <typename... T>
void write(T &&...args) {
	((cout << args), ...);
}

template <typename T>
void readContainer(T &t) {
	for (auto &e : t) {
		read(e);
	}
}

template <typename T>
void writeContainer(T &t) {
	for (const auto &e : t) {
		write(e, " ");
	}
	write("\n");
}

void solve(int tc) {
	string s;
	read(s);
	map<char, char> mp;
	mp['0'] = '0';
	mp['6'] = '9';
	mp['9'] = '6';
	mp['8'] = '8';
	mp['1'] = '1';
	for (int i = s.size() - 1; i >= 0; --i) {
		write(mp[s[i]]);
	}
}

signed main() {
	// #ifndef ONLINE_JUDGE
	// 	freopen("input.txt", "r", stdin);
	// 	freopen("output.txt", "w", stdout);
	// #endif
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int tc = 1;
	// read(tc);
	for (int curr = 1; curr <= tc; ++curr) {
		solve(curr);
	}
	return 0;
}