unittest
{
	assert( [ "3", "())" ].parse.expand.solve == "(())" );
	assert( [ "6", ")))())" ].parse.expand.solve == "(((()))())" );
	assert( [ "8", "))))((((" ].parse.expand.solve == "(((())))(((())))" );
}



import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	input.popFront;
	auto s = input.front;
	return tuple( s );
}

auto solve( string s )
{
	// ペアが揃っている括弧を消す
	auto d = s.dup;
	auto i = 0L;
	while( i + 1 < d.length )
	{
		if( d[ i ] == '(' && d[ i + 1 ] == ')' )
		{
			d = d[ 0 .. i ] ~ d[ i + 2 .. $ ];
			if( 0 < i ) i--;
		}
		else
		{
			i++;
		}
	}
	
	// 余った')'と'('の数を数える
	auto l = 0L;
	auto r = 0L;
	foreach( c; d )
	{
		if( c == ')' ) l++;
		else           r++;
	}
	
	// 両端に足りない'('と')'を追加
	return '('.repeat( l ).array ~ s ~ ')'.repeat( r ).array;
}
