Problem: Let s(x) be sum of digits in decimal representation of positive integer x. Given two integers n and m, find some positive integers a and b such that 

  * s(a) ≥ n, 
  * s(b) ≥ n, 
  * s(a + b) ≤ m. 

Input

The only line of input contain two integers n and m (1 ≤ n, m ≤ 1129).

Output

Print two lines, one for decimal representation of a and one for decimal representation of b. Both numbers must not contain leading zeros and must have length no more than 2230.

Examples

Input

6 5


Output

6 
7


Input

8 16


Output

35 
53

Note

In the first sample, we have n = 6 and m = 5. One valid solution is a = 6, b = 7. Indeed, we have s(a) = 6 ≥ n and s(b) = 7 ≥ n, and also s(a + b) = s(13) = 4 ≤ m.

Solution (in JAVA):

Solution:

/*
 * Author Ayub Subhaniya
 * Institute DA-IICT
 */

import java.io.*;
import java.math.*;
import java.util.*;

public class B {

	InputStream in;
	PrintWriter out;

	long mod = (long) 1e9 + 7;
	int MAX = (int) 1e2 + 7;
	String high = "";

	void solve() {
		int n=ni();
		int m=ni();
		StringBuilder s1 = new StringBuilder();
		StringBuilder s2 = new StringBuilder();
		int sum1,sum2;
		sum1=sum2=0;
		
		s1.append('9');
		s2.append('1');
		sum1+=9;
		sum2+=1;
		
		while(sum1<=n || sum2<=n){
			s1.append("09");
			sum1+=9;
			s2.append("90");
			sum2+=9;
		}
		
		out.println(getString(s1.reverse()));
		out.println(getString(s2.reverse()));
	}
	
	String getString(StringBuilder sb){
		while (sb.charAt(0)=='0'){
			sb.deleteCharAt(0);
		}
		return sb.toString();
	}

	class Pair implements Comparable<Pair> {
		int x;
		int y;

		Pair(int a, int b) {
			x = a;
			y = b;
		}

		@Override
		public boolean equals(Object o) {
			Pair other = (Pair) o;
			return x == other.x && y == other.y;
		}

		public String toString() {
			return x + " " + y;
		}

		@Override
		public int compareTo(Pair o) {
			if (x == o.x)
				return Integer.compare(y, o.y);
			else
				return Integer.compare(x, o.x);
		}

		@Override
		public int hashCode() {
			return Objects.hash(x, y);
		}
	}

	long pow(long x, long n, long M) {
		x %= M;
		long result = 1;
		while (n > 0) {
			if (n % 2 == 1)
				result = (result * x) % M;
			x = (x * x) % M;
			n = n / 2;
		}
		return result;
	}

	long modInverse(long A, long M) {
		extendedEuclid(A, M);
		return (EEx % M + M) % M;
	}

	long EEd, EEx, EEy;

	void extendedEuclid(long A, long B) {
		if (B == 0) {
			EEd = A;
			EEx = 1;
			EEy = 0;
		} else {
			extendedEuclid(B, A % B);
			long temp = EEx;
			EEx = EEy;
			EEy = temp - (A / B) * EEy;
		}
	}

	int max(int a, int b) {
		if (a > b)
			return a;
		else
			return b;
	}

	int min(int a, int b) {
		if (a > b)
			return b;
		else
			return a;
	}

	long max(long a, long b) {
		if (a > b)
			return a;
		else
			return b;

	}

	long min(long a, long b) {
		if (a > b)
			return b;
		else
			return a;

	}

	long add(long a, long b) {
		long x = (a + b);
		while (x >= mod)
			x -= mod;
		return x;

	}

	long sub(long a, long b) {
		long x = (a - b);
		while (x < 0)
			x += mod;
		return x;

	}

	long mul(long a, long b) {
		a %= mod;
		b %= mod;
		long x = (a * b);
		return x % mod;

	}

	void run() throws Exception {
		String INPUT = "C:/Users/ayubs/Desktop/input.txt";
		oj = high.length() == 0;
		in = oj ? System.in : new FileInputStream(INPUT);
		out = new PrintWriter(System.out);

		long s = System.currentTimeMillis();
		solve();
		out.flush();
		tr(System.currentTimeMillis() - s + "ms");

	}

	public static void main(String[] args) throws Exception {
		new B().run();
	}

	private byte[] inbuf = new byte[1024];
	public int lenbuf = 0, ptrbuf = 0;

	private int readByte() {
		if (lenbuf == -1)
			throw new InputMismatchException();
		if (ptrbuf >= lenbuf) {
			ptrbuf = 0;
			try {
				lenbuf = in.read(inbuf);
			} catch (IOException e) {
				throw new InputMismatchException();
			}
			if (lenbuf <= 0)
				return -1;
		}
		return inbuf[ptrbuf++];
	}

	private boolean inSpaceChar(int c) {
		return !(c >= 33 && c <= 126);
	}

	private int skip() {
		int b;
		while ((b = readByte()) != -1 && inSpaceChar(b))
			;
		return b;
	}

	private double nd() {
		return Double.parseDouble(ns());
	}

	private char nc() {
		return (char) skip();
	}

	private String ns() {
		int b = skip();
		StringBuilder sb = new StringBuilder();
		while (!(inSpaceChar(b))) { // when nextLine, (inSpaceChar(b) && b != '
									// ')
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}

	private char[] ns(int n) {
		char[] buf = new char[n];
		int b = skip(), p = 0;
		while (p < n && !(inSpaceChar(b))) {
			buf[p++] = (char) b;
			b = readByte();
		}
		return n == p ? buf : Arrays.copyOf(buf, p);
	}

	private char[][] nm(int n, int m) {
		char[][] map = new char[n][];
		for (int i = 0; i < n; i++)
			map[i] = ns(m);
		return map;
	}

	private int[] na(int n) {
		int[] a = new int[n];
		for (int i = 0; i < n; i++)
			a[i] = ni();
		return a;
	}

	private int ni() {
		int num = 0, b;
		boolean minus = false;
		while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'))
			;
		if (b == '-') {
			minus = true;
			b = readByte();
		}

		while (true) {
			if (b >= '0' && b <= '9') {
				num = num * 10 + (b - '0');
			} else {
				return minus ? -num : num;
			}
			b = readByte();
		}
	}

	private long nl() {
		long num = 0;
		int b;
		boolean minus = false;
		while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'))
			;
		if (b == '-') {
			minus = true;
			b = readByte();
		}

		while (true) {
			if (b >= '0' && b <= '9') {
				num = num * 10 + (b - '0');
			} else {
				return minus ? -num : num;
			}
			b = readByte();
		}
	}

	private boolean oj = System.getProperty("ONLINE_JUDGE") != null;

	private void tr(Object... o) {
		if (!oj)
			System.out.println(Arrays.deepToString(o));
	}

}