A two dimensional array is called a bracket array if each grid contains one of the two possible brackets — "(" or ")". A path through the two dimensional array cells is called monotonous if any two consecutive cells in the path are side-adjacent and each cell of the path is located below or to the right from the previous one. 

A two dimensional array whose size equals n × m is called a correct bracket array, if any string formed by writing out the brackets on some monotonous way from cell (1, 1) to cell (n, m) forms a correct bracket sequence. 

Let's define the operation of comparing two correct bracket arrays of equal size (a and b) like that. Let's consider a given two dimensional array of priorities (c) — a two dimensional array of same size, containing different integers from 1 to nm. Let's find such position (i, j) in the two dimensional array, that ai, j ≠ bi, j. If there are several such positions, let's choose the one where number ci, j is minimum. If ai, j = "(", then a < b, otherwise a > b. If the position (i, j) is not found, then the arrays are considered equal.

Your task is to find a k-th two dimensional correct bracket array. It is guaranteed that for the given sizes of n and m there will be no less than k two dimensional correct bracket arrays.

Input

The first line contains integers n, m and k — the sizes of the array and the number of the sought correct bracket array (1 ≤ n, m ≤ 100, 1 ≤ k ≤ 1018). Then an array of priorities is given, n lines each containing m numbers, number pi, j shows the priority of character j in line i (1 ≤ pi, j ≤ nm, all pi, j are different).

Please do not use the %lld specificator to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specificator.

Output

Print the k-th two dimensional correct bracket array.

Examples

Input

1 2 1
1 2


Output

()


Input

2 3 1
1 2 3
4 5 6


Output

(()
())


Input

3 2 2
3 6
1 4
2 5


Output

()
)(
()

Note

In the first sample exists only one correct two-dimensional bracket array.

In the second and in the third samples two arrays exist.

A bracket sequence is called regular if it is possible to obtain correct arithmetic expression by inserting characters «+» and «1» into this sequence. For example, sequences «(())()», «()» and «(()(()))» are regular, while «)(», «(()» and «(()))(» are not.
import java.io.* ;
import java.util.*;

import static java.lang.Math.* ;
import static java.util.Arrays.* ;

public class C {
	
	public static void main(String[] args) throws IOException {
		
		new C().solveProblem();
		
		out.close();
	}

	static Scanner in = new Scanner(new InputStreamReader(System.in));
	//static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static PrintStream out = new PrintStream(new BufferedOutputStream(System.out));
	
	int m, n ;
	int[] volg ;
	public void solveProblem() {		

		m = in.nextInt() ;
		n = in.nextInt() ;
		long k = in.nextLong() ;
		
		int[][] prior = new int[m][n] ;
		for( int i = 0 ; i < m ; i++ )
			for( int j = 0 ; j < n ; j++ )
				prior[i][j] = in.nextInt() ;
		
		int[] p = new int[n+m-1] ;
		
		fill( p, Integer.MAX_VALUE ) ;
		for( int i = 0 ; i < m ; i++ )
			for( int j = 0 ; j < n ; j++ ){
				p[i+j] = min(p[i+j],prior[i][j]) ;
			}
		
		int[] cnt = new int[n*m] ;
		fill( cnt, -1 ) ;
		
		for( int i = 0 ; i < n + m - 1 ; i++)
			cnt[p[i]-1] = i ;
		
		volg = new int[n+m-1] ;
		int t = 0 ;
		for( int i = 0; i < m*n ; i++ )
			if( cnt[i] >= 0)
				volg[t++] = cnt[i] ;
		
		char[] opl = new char[n+m-1] ;
		zoek( opl, k, 0) ;
	
		for( int i = 0 ; i < m ; i++ ){
			for( int j = 0 ; j < n ; j++ )
				out.print(opl[i+j]) ;
			out.println() ;
		}
				
		
	}
	
	void zoek(char[] opl, long k, int i) {
		//System.out.println(k);
		if( i == n+m-1 )
			return ;
		
		opl[volg[i]] = '(' ;
		cache = new long[n+m-1][n+m-1] ;
		for( int j = 0 ; j < n + m - 1; j++)
			fill( cache[j], -1 );
		long a = aantal( 0, 0, opl) ;
		
		//System.out.println("a " + a);
		if( k <= a ){
			zoek( opl, k, i+1) ;
		}else{
			opl[volg[i]] = ')' ;
			zoek( opl, k-a,i+1) ;
		}
	}

	long[][] cache ;
	private long aantal(int i, int open, char[] opl) {
		
		if( open > n + m - 1 - i)
			return 0 ;
		
		if( i == n + m - 1)
			return 1 ;
		
		if( cache[i][open] >= 0)
			return cache[i][open] ;
		
		if( opl[i] > 0 ){
			int nopen = open ;
			if( opl[i] == ')' )
				nopen-- ;
			else
				nopen++ ;
			
			if( nopen < 0 )
				return 0 ;
			return cache[i][open] = aantal( i + 1, nopen, opl) ;
		}
		
		long a = 0 ;
		opl[i] = '(' ;
		a += aantal(i+1,open+1,opl) ;
		opl[i] = ')' ;
		if( open > 0 )
			a += aantal(i+1,open-1,opl) ;
		opl[i] = (char) 0 ;
		
		if( a > 1000000000000000000L )
			a = 1000000000000000000L ;
		
		return cache[i][open] = a;
	}

       
}