#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned int uint; typedef unsigned long long ull; static const double EPS = 1e-9; static const double PI = acos(-1.0); #define REP(i, n) for (int i = 0; i < (int)(n); i++) #define FOR(i, s, n) for (int i = (s); i < (int)(n); i++) #define FOREQ(i, s, n) for (int i = (s); i <= (int)(n); i++) #define FORIT(it, c) for (__typeof((c).begin())it = (c).begin(); it != (c).end(); it++) #define MEMSET(v, h) memset((v), h, sizeof(v)) int n; char str[1000]; pair > seq[1000]; bool used[1000]; int main() { while (scanf("%d", &n) > 0) { int all_total = 0; MEMSET(used, false); REP(i, n) { int v = scanf("%s", str); assert(v == 1); int l = strlen(str); int need1 = 0; int need2 = 0; int total = 0; REP(j, l) { if (str[j] == '(') { all_total++; total++; } else { all_total--; total--; } need2 = max(need2, -total); } total = 0; reverse(str, str + l); REP(j, l) { if (str[j] == '(') { total++; } else { total--; } need1 = max(need1, total); } seq[i] = make_pair(total, make_pair(need1, need2)); } int use_cnt = 0; int sum = 0; REP(iter, n) { REP(j, n) { if (used[j]) { continue; } if (seq[j].second.second <= sum && seq[j].first >= 0) { use_cnt++; used[j] = true; sum += seq[j].first; break; } } } sum = 0; REP(iter, n) { REP(j, n) { if (used[j]) { continue; } if (seq[j].second.first <= sum && seq[j].first <= 0) { use_cnt++; used[j] = true; sum += -seq[j].first; break; } } } if (all_total == 0 && use_cnt == n) { puts("Yes"); } else { puts("No"); } } }