Problem: Manao has invented a new mathematical term — a beautiful set of points. He calls a set of points on a plane beautiful if it meets the following conditions:

  1. The coordinates of each point in the set are integers. 
  2. For any two points from the set, the distance between them is a non-integer. 



Consider all points (x, y) which satisfy the inequations: 0 ≤ x ≤ n; 0 ≤ y ≤ m; x + y > 0. Choose their subset of maximum size such that it is also a beautiful set of points.

Input

The single line contains two space-separated integers n and m (1 ≤ n, m ≤ 100).

Output

In the first line print a single integer — the size k of the found beautiful set. In each of the next k lines print a pair of space-separated integers — the x- and y- coordinates, respectively, of a point from the set.

If there are several optimal solutions, you may print any of them.

Examples

Input

2 2


Output

3
0 1
1 2
2 0


Input

4 3


Output

4
0 3
2 1
3 0
4 2

Note

Consider the first sample. The distance between points (0, 1) and (1, 2) equals <image>, between (0, 1) and (2, 0) — <image>, between (1, 2) and (2, 0) — <image>. Thus, these points form a beautiful set. You cannot form a beautiful set with more than three points out of the given points. Note that this is not the only solution.

Solution (in JAVA):

Solution:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class EdA {

	public static void main(String[] args) {
		MyScanner in = new MyScanner();
		// long n = in.nextLong();
		// long m = in.nextLong();
		// long l = 0, r = (long) 2e9;
		// if (n <= m) {
		// System.out.println(n);
		// } else {
		// n -= m;
		// while (l < r) {
		// long mid = (l + r) / 2;
		// long val = mid * (mid + 1) / 2;
		// if (val >= n) {
		// r = mid;
		// } else {
		// l = mid + 1;
		// }
		// }
		// System.out.println(l + m);
		// }
		// int n = in.nextInt();
		// int l = in.nextInt();
		// int[] arr = new int[n];
		// for (int i = 0; i < n; i++) {
		// arr[i] = in.nextInt();
		// }
		// Arrays.sort(arr);
		// List<Double> dists = new ArrayList<>();
		// dists.add((double) arr[0]);
		// dists.add((double) (l - arr[arr.length - 1]));
		// for (int i = 1; i < n; i++) {
		// dists.add((arr[i] - arr[i - 1]) / 2d);
		// }
		// System.out.println(Collections.max(dists));
		// n = in.nextLong();
		// m = in.nextLong();
		// long k = in.nextLong();
		// long l = 1, r = n * m + 1;
		// while (l < r) {
		// long mid = (l + r) / 2;
		// if (numUnder(mid) >= k) {
		// r = mid;
		// } else {
		// l = mid + 1;
		// }
		// }
		//
		// System.out.println(l - 1);
		// String s = in.next();
		// String t = in.next();
		// String longer = s.length() > t.length() ? s : t;
		// String shorter = s.length() < t.length() ? s : t;
		// boolean sub = false;
		// int j = 0;
		// for (int i = 0; i < longer.length(); i++) {
		// if (j >= shorter.length()) {
		// break;
		// }
		// if (longer.charAt(i) == shorter.charAt(j)) {
		// j++;
		// }
		// }
		// sub = j == shorter.length();
		// if (s.length() < t.length()) {
		// System.out.println("need tree");
		// } else {
		// if (s.length() == t.length()) {
		// if (ana(s, t)) {
		// System.out.println("array");
		// } else {
		// System.out.println("need tree");
		// }
		// } else {
		// if (sub) {
		// System.out.println("automaton");
		// } else {
		// boolean tree = false;
		// int[] map = new int[255];
		// for (int i = 0; i < longer.length(); i++) {
		// map[s.charAt(i)]++;
		// }
		// for (int i = 0; i < shorter.length(); i++) {
		// if (--map[t.charAt(i)] < 0) {
		// tree = true;
		// }
		// }
		// if (tree) {
		// System.out.println("need tree");
		// } else {
		// System.out.println("both");
		// }
		// }
		// }
		// }
		// int n = in.nextInt();
		// int a = in.nextInt();
		// int b = in.nextInt();
		// int c = in.nextInt();
		// int max = 0;
		// for (int i = 0; i <= n / a; i++) {
		// int x = i * a;
		// for (int j = 0; j <= (n - x) / b; j++) {
		// int y = j * b;
		// int z = (n - x - y);
		// if (z % c == 0) {
		// max = Math.max(max, z / c + i + j);
		// }
		// }
		// }
		// System.out.println(max);
		// int n = in.nextInt();
		// int m = in.nextInt();
		// int[] arr = new int[n];
		// int[] dp = new int[n];
		// PrintWriter out = new PrintWriter(System.out);
		// Set<Integer> set = new HashSet<>();
		// for (int i = 0; i < n; i++) {
		// arr[i] = in.nextInt();
		// }
		// int[] queries = new int[m];
		// for (int i = 0; i < m; i++) {
		// queries[i] = in.nextInt();
		// }
		// for (int i = arr.length - 1; i >= 0; i--) {
		// set.add(arr[i]);
		// dp[i] = set.size();
		// }
		// for (int i = 0; i < m; i++) {
		// out.println(dp[queries[i] - 1]);
		// }
		// out.close();
		// int n = in.nextInt();
		// int m = in.nextInt();
		// int[] p = new int[n + 1];
		// for (int i = 1; i <= n; i++) {
		// p[i] = in.nextInt();
		// }
		// int[] l = new int[m + 1];
		// int[] r = new int[m + 1];
		// int[] x = new int[m + 1];
		// for (int i = 0; i < m; i++) {
		// l[i] = in.nextInt();
		// r[i] = in.nextInt();
		// x[i] = in.nextInt();
		// }
		// for (int i = 0; i < m; i++) {
		// int left = l[i];
		// int right = r[i];
		// int idx = x[i];
		// int less = 0;
		// for (int j = left; j <= right; j++) {
		// if (j != idx) {
		// if (p[j] < p[idx]) {
		// less++;
		// }
		// }
		// }
		// if (less == x[i] - left) {
		// System.out.println("Yes");
		// } else {
		// System.out.println("No");
		// }
		// }
		// int n = in.nextInt();
		// if (isPrime(n)) {
		// System.out.println(1);
		// } else if (isPrime(n - 2)) {
		// System.out.println(2);
		// } else if (n % 2 == 0) {
		// System.out.println(2);
		// } else {
		// System.out.println(3);
		// }
		// int n = in.nextInt();
		// long sum = 0, bigSum = 0;
		// int[] arr = new int[n];
		// for (int i = 0; i < n; i++) {
		// arr[i] = in.nextInt();
		// sum += arr[i];
		// }
		// bigSum = sum;
		// Arrays.sort(arr);
		// for (int i = 0; i < arr.length; i++) {
		// sum -= arr[i];
		// bigSum += sum + arr[i];
		// }
		// bigSum -= arr[arr.length - 1];
		// System.out.println(bigSum);
		// int n = in.nextInt();
		// int k = in.nextInt();
		// String s = in.next();
		// int[] map = new int[26];
		// for (char c : s.toCharArray()) {
		// map[c - 'A']++;
		// }
		// int sum = 0;
		// Arrays.sort(map);
		// int j = 25;
		// while (k != 0) {
		// int count = 0;
		// while (k != 0 && map[j] != 0) {
		// count++;
		// map[j]--;
		// k--;
		// }
		// sum += count * count;
		// j--;
		// }
		// System.out.println(sum);
		// int m = in.nextInt();
		// int s = in.nextInt();
		// if (s == 0) {
		// if (m == 1) {
		// System.out.println("0 0");
		// } else {
		// System.out.println("-1 -1");
		// }
		// } else if (s > m * 9) {
		// System.out.println("-1 -1");
		// } else {
		// int sum = s;
		// char[] max = new char[m];
		// char[] min = new char[m];
		// Arrays.fill(max, '0');
		// Arrays.fill(min, '0');
		// for (int i = 0; sum != 0 && i < max.length; i++) {
		// if (sum >= 9) {
		// max[i] += 9;
		// sum -= 9;
		// } else {
		// max[i] += sum;
		// sum = 0;
		// }
		// }
		// min[0] = '1';
		// sum = s - 1;
		// for (int i = min.length - 1; sum != 0 && i >= 0; i--) {
		// if (sum >= 9) {
		// min[i] += 9;
		// sum -= 9;
		// } else {
		// min[i] += (char) (sum);
		// sum = 0;
		// }
		// }
		// System.out.println(new String(min));
		// System.out.println(new String(max));
		// }
		// int n = in.nextInt();
		// int arr[] = new int[n];
		// long[] dp = new long[n];
		//
		// arr[0] = in.nextInt();
		// dp[0] = arr[0];
		// for (int i = 1; i < n; i++) {
		// arr[i] = in.nextInt();
		// dp[i] = arr[i] + dp[i - 1];
		// }
		// long sum = dp[n - 1];
		// long count = 0, total = 0;
		// if (Math.abs(sum % 3) != 0) {
		// System.out.println(0);
		// } else {
		// for (int i = 0; i < n - 1; i++) {
		// if (dp[i] == 2 * sum / 3) {
		// total += count;
		// }
		// if (dp[i] == sum / 3) {
		// count++;
		// }
		// }
		// System.out.println(total);
		// }
		// int n = in.nextInt();
		// int m = in.nextInt();
		// char[] arr = new char[n + m];
		// if (2 * n + 2 < m || n - m > 1) {
		// System.out.println(-1);
		// } else {
		// if (n == m + 1) {
		// arr[0] = '0';
		// n--;
		// } else {
		// arr[0] = '1';
		// m--;
		// }
		// for (int i = 1; i < arr.length; i++) {
		// // System.out.println("idx" + i);
		// // System.out.println("count" + m);
		// // System.out.println("count" + n);
		// if (arr[i - 1] == '0') {
		// arr[i] = '1';
		// m--;
		// } else {
		// if (m - n >= 1 && i >= 2 && arr[i - 2] != '1') {
		// arr[i] = '1';
		// m--;
		// } else if (i == 1 && 2 * n + 1 == m) {
		// arr[i] = '1';
		// } else {
		// arr[i] = '0';
		// n--;
		// }
		// }
		// }
		// System.out.println(new String(arr));
		// }
		// int n = in.nextInt();
		// Pair[] arr = new Pair[n];
		// for (int i = 0; i < n; i++) {
		// arr[i] = new Pair(in.nextInt(), in.nextInt());
		// }
		// Arrays.sort(arr);
		// arr[0].a = arr[0].b;
		// for (int i = 1; i < arr.length; i++) {
		// if (arr[i].b >= arr[i - 1].a) {
		// arr[i].a = arr[i].b;
		// }
		// }
		// System.out.println(arr[arr.length - 1].a);
		// int n = in.nextInt();
		// int[] arr = new int[100005];
		// long[] dp = new long[100005];
		// long[] cnt = new long[100005];
		// for (int i = 0; i < n; i++) {
		// arr[i] = in.nextInt();
		// cnt[arr[i]]++;
		// }
		// dp[1] = cnt[1];
		// for (int i = 2; i < dp.length; i++) {
		// dp[i] = Math.max(dp[i - 1], dp[i - 2] + cnt[i] * i);
		// }
		// System.out.println(dp[dp.length - 1]);
		// long[] colors = new long[3];
		// for (int i = 0; i < 3; i++) {
		// colors[i] = in.nextInt();
		// }
		// Arrays.sort(colors);
		// long sum = (colors[0] + colors[1]);
		// if (sum * 2 <= colors[2]) {
		// System.out.println(sum);
		// } else {
		// System.out.println((sum + colors[2]) / 3);
		// }
		int n = in.nextInt();
		int m = in.nextInt();
		System.out.println(Math.min(m, n) + 1);
		for (int i = 0; i <= Math.min(m, n); i++) {
			System.out.println(i + " " + (Math.min(m, n) - i));
		}
	}

	static class Pair implements Comparable<Pair> {
		int a;
		int b;

		Pair(int a, int b) {
			this.a = a;
			this.b = b;
		}

		@Override
		public int compareTo(Pair p) {
			if (a != p.a) {
				return a - p.a;
			} else {
				return b - p.b;
			}
		}
	}

	static boolean isPrime(int n) {
		for (int i = 2; i <= Math.sqrt(n); i++) {
			if (n % i == 0) {
				return false;
			}
		}
		return true;
	}

	static boolean isPalindrome(String s) {
		return s.equals(new StringBuilder(s).reverse().toString());
	}

	static boolean ana(String s1, String s2) {
		char[] a1 = s1.toCharArray();
		char[] a2 = s2.toCharArray();
		Arrays.sort(a1);
		Arrays.sort(a2);
		return Arrays.equals(a1, a2);
	}

	// 20
	public static class MyScanner {
		BufferedReader br;
		StringTokenizer st;

		public MyScanner() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next() {
			while (st == null || !st.hasMoreElements()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}

		String nextLine() {
			String str = "";
			try {
				str = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return str;
		}
	}
}