/*
TASK:n23
LANG:C++
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

#define MAX		10010

char a[MAX], b[MAX], c[MAX];
int l, cl = 100000;

int sol = 0;
int n;
clock_t s;

void check(int p)
{
	// pyrvite n ostatyka trqbwa da sa 0
	int i, j, old, pren;

	for (i = 0; i <= p; i++)
		b[i] = a[i];

	// delim n-pyti na 2
	for (i = 0; i < n; i++) {
		pren = 0;
		for (j = p; j >= 0; j--) {
			old = b[j] + pren;
			b[j] = old >> 1;
			pren = (old & 1) * 10;
		}
		if (pren) return;
	}
	if (!sol || (sol && cl > p+1)) {
		sol = 1;
		cl = p+1;
		for (i = 0; i <= p; i++)
			c[i] = a[i];
	}
}

void gen(int p)
{
	if (p == n) return;
	check(p-1);
	if (clock() - s > 2300) return;
	a[p] = 2; gen(p+1);
	if (clock() - s > 2300) return;
	a[p] = 3; gen(p+1);
}

void writef()
{
	if (sol) {
		for (int i = cl-1; i >= 0; i--)
			printf("%d", c[i]);
		printf("\n");
	}
	else
		printf("NO\n");
}

void solve()
{
	//freopen("a.in", "r", stdin);	// TO REMOVE
	scanf("%d", &n);
	s = clock();

	if (n == 0) return;
	if (n == 1) { sol = 1; cl = 1; c[0] = 2; return; }
	if (n == 2) { sol = 1; cl = 2; c[0] = 2; c[1] = 3; return; }

	//if (n < 20) {
		a[0] = 2;
		gen(1);
	//}
}

int main()
{
	solve();
	writef();

	return 0;
}