Problem: Important: All possible tests are in the pretest, so you shouldn't hack on this problem. So, if you passed pretests, you will also pass the system test.

You are an adventurer currently journeying inside an evil temple. After defeating a couple of weak monsters, you arrived at a square room consisting of tiles forming an n × n grid, surrounded entirely by walls. At the end of the room lies a door locked with evil magical forces. The following inscriptions are written on the door:

The sound of clashing rocks will awaken the door!

Being a very senior adventurer, you immediately realize what this means. In the room next door lies an infinite number of magical rocks. There are four types of rocks: 

  * '^': this rock moves upwards; 
  * '<': this rock moves leftwards; 
  * '>': this rock moves rightwards; 
  * 'v': this rock moves downwards. 



To open the door, you first need to place the rocks on some of the tiles (one tile can be occupied by at most one rock). Then, you select a single rock that you have placed and activate it. The activated rock will then move in its direction until it hits another rock or hits the walls of the room (the rock will not move if something already blocks it in its chosen direction). The rock then deactivates. If it hits the walls, or if there have been already 107 events of rock becoming activated, the movements end. Otherwise, the rock that was hit becomes activated and this procedure is repeated.

If a rock moves at least one cell before hitting either the wall or another rock, the hit produces a sound. The door will open once the number of produced sounds is at least x. It is okay for the rocks to continue moving after producing x sounds.

The following picture illustrates the four possible scenarios of moving rocks.

  * Moves at least one cell, then hits another rock. A sound is produced, the hit rock becomes activated. <image>
  * Moves at least one cell, then hits the wall (i.e., the side of the room). A sound is produced, the movements end. <image>
  * Does not move because a rock is already standing in the path. The blocking rock becomes activated, but no sounds are produced. <image>
  * Does not move because the wall is in the way. No sounds are produced and the movements end. <image>



Assume there's an infinite number of rocks of each type in the neighboring room. You know what to do: place the rocks and open the door!

Input

The first line will consists of two integers n and x, denoting the size of the room and the number of sounds required to open the door. There will be exactly three test cases for this problem:

  * n = 5, x = 5; 
  * n = 3, x = 2; 
  * n = 100, x = 105. 



All of these testcases are in pretest.

Output

Output n lines. Each line consists of n characters — the j-th character of the i-th line represents the content of the tile at the i-th row and the j-th column, and should be one of these:

  * '^', '<', '>', or 'v': a rock as described in the problem statement. 
  * '.': an empty tile. 



Then, output two integers r and c (1 ≤ r, c ≤ n) on the next line — this means that the rock you activate first is located at the r-th row from above and c-th column from the left. There must be a rock in this cell.

If there are multiple solutions, you may output any of them.

Examples

Input

5 5


Output

&gt;...v
v.&lt;..
..^..
&gt;....
..^.&lt;
1 1


Input

3 2


Output

&gt;vv
^&lt;.
^.&lt;
1 3

Note

Here's a simulation of the first example, accompanied with the number of sounds produced so far.

<image> 0 sound  <image> 1 sound  <image> 2 sounds  <image> 3 sounds  <image> 4 sounds  <image> still 4 sounds 

In the picture above, the activated rock switches between the '^' rock and the '<' rock. However, no sound is produced since the '^' rock didn't move even a single tile. So, still 4 sound.

<image> 5 sounds 

At this point, 5 sound are already produced, so this solution is already correct. However, for the sake of example, we will continue simulating what happens.

<image> 6 sounds  <image> 7 sounds  <image> still 7 sounds  <image> 8 sounds 

And the movement stops. In total, it produces 8 sounds. Notice that the last move produced sound.

Here's a simulation of the second example:

<image> 0 sound  <image> 1 sound  <image> 2 sounds 

Now, the activated stone will switch continuously from one to another without producing a sound until it reaches the 107 limit, after which the movement will cease.

<image>

In total, it produced exactly 2 sounds, so the solution is correct.

Solution (in JAVA):

Solution:
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.io.PrintStream;
import java.io.BufferedReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 * @author Niyaz Nigmatullin
 */
public class Main {
	public static void main(String[] args) {
		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		FastScanner in = new FastScanner(inputStream);
		FastPrinter out = new FastPrinter(outputStream);
		TaskD solver = new TaskD();
		solver.solve(1, in, out);
		out.close();
	}
}

class TaskD {
    public void solve(int testNumber, FastScanner in, FastPrinter out) {
        int n = in.nextInt();
        if (n == 5) {
            out.println(">...v\nv.<..\n..^..\n>....\n..^.<\n1 1");
            return;
        }
        if (n == 3) {
            out.println(">vv\n" +
                    "^<.\n" +
                    "^.<\n" +
                    "1 3");
            return;
        }
//        int n = in.nextInt();
//        char[][] c = in.readCharacterFieldTokens(n, n);
        char[][] c = new char[100][100];
        for (char[] e : c) {
            Arrays.fill(e, '.');
        }
        for (int i = 0; i < 99; i++) {
            c[0][i] = '>';
        }
        c[0][99] = 'v';
        for (int i = 1; i < 100; i += 2) {
            for (int j = 0; j < 48; j++) {
                c[i][99 - j] = '<';
            }
            for (int j = 0; j < 50; j++) {
                c[i][99 - 48 - j] = (j & 1) == 0 ? '.' : '<';
            }
            if (i + 1 < 100) {
                c[i][1] = 'v';
                for (int j = 0; j < 48; j++) {
                    c[i + 1][1 + j] = '>';
                }
                for (int j = 0; j < 50; j++) {
                    c[i + 1][1 + 48 + j] = (j & 1) == 0 ? '.' : '>';
                }
                c[i + 1][99] = 'v';
            }
        }
        for (int i = 0; i < 50; i++) {
            c[99 - i][0] = '^';
        }
//        int x = 0;
//        int y = 0;
//        for (int n = 100; n > 0; n -= 2) {
//            for (int dir = 0; dir < 4; dir++) {
//                for (int e = 0; e < n - 1; e++) {
//                    c[x][y] = DIRS.charAt(dir);
//                    x += DX[dir];
//                    y += DY[dir];
//                }
//            }
//            x -= DX[3];
//            y -= DY[3];
//            c[x][y] = DIRS.charAt(0);
//            x += DX[0];
//            y += DY[0];
//        }
//        x -= DX[0];
//        y -= DY[0];
//        c[x][y] = '.';
//        Random rand = new Random();
//        for (int i = 0; i < 1; i++) {
//            int xx = rand.nextInt(50) + 5;
//            int yy = rand.nextInt(50) + 5;
//            c[xx][yy] = '.';
//        }
//        for (int i = 1; i < 100; i += 2) {
//            for (int j = 1; j < 100; j += 2) {
//                c[i][j] = '.';
//            }
//        }
//        for (char[] e : c) {
//            System.out.println(e);
//        }
//        check(c, 0, 0);
        for (char[] e : c) {
            out.println(e);
        }
        out.println(1 + " " + 1);
    }

    }

class FastScanner extends BufferedReader {

    public FastScanner(InputStream is) {
        super(new InputStreamReader(is));
    }

    public int read() {
        try {
            int ret = super.read();
//            if (isEOF && ret < 0) {
//                throw new InputMismatchException();
//            }
//            isEOF = ret == -1;
            return ret;
        } catch (IOException e) {
            throw new InputMismatchException();
        }
    }

    static boolean isWhiteSpace(int c) {
        return c >= 0 && c <= 32;
    }

    public int nextInt() {
        int c = read();
        while (isWhiteSpace(c)) {
            c = read();
        }
        int sgn = 1;
        if (c == '-') {
            sgn = -1;
            c = read();
        }
        int ret = 0;
        while (c >= 0 && !isWhiteSpace(c)) {
            if (c < '0' || c > '9') {
                throw new NumberFormatException("digit expected " + (char) c
                        + " found");
            }
            ret = ret * 10 + c - '0';
            c = read();
        }
        return ret * sgn;
    }

    public String readLine() {
        try {
            return super.readLine();
        } catch (IOException e) {
            return null;
        }
    }

    }

class FastPrinter extends PrintWriter {

    public FastPrinter(OutputStream out) {
        super(out);
    }

    public FastPrinter(Writer out) {
        super(out);
    }


}