#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define mp make_pair #define pb push_back #define all(x) (x).begin(),(x).end() #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef vector vb; typedef vector vi; typedef vector vvb; typedef vector vvi; typedef pair pii; const int INF=1<<29; const double EPS=1e-9; const int dx[]={1,0,-1,0,1,1,-1,-1},dy[]={0,-1,0,1,1,-1,-1,1}; int main() { int T; cin >> T; for (int testcase = 0; testcase < T; testcase++) { int N; cin >> N; std::vector v; for (int i = 0; i < N; i++) { int temp; cin >> temp; v.push_back(temp); } if (v.size() <= 2) { cout << v.size() << endl; return 0; } std::vector > > dp(N, vector >(N, vector(2, 0))); for (int i = 0; i < N - 2; i++) { for (int j = i + 1; j < N - 1; j++) { for (int k = j + 1; k < N; k++) { if (v[j] - v[i] > 0) { if (v[j] - v[i] < v[k] - v[j]) { //(i, j, 0) => (j, k, 0) dp[j][k][0] = max(dp[j][k][0], dp[i][j][0] + 1); } else if (v[j] - v[k] > 0) { //(i, j, 0) => (j, k, 1) dp[j][k][1] = max(dp[j][k][1], dp[i][j][0] + 1); } } else if (v[j] - v[i] < 0){ if (abs(v[i] - v[j]) > abs(v[k] - v[j])) { //(i, j, 1) => (j, k, 1) dp[j][k][1] = max(dp[j][k][1], dp[i][j][1] + 1); } } } } } int ans = 0; for (int k = 0; k < 2; k++) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { //cout << dp[i][j][k] << " "; ans = max(ans, dp[i][j][k]); } //cout << endl; } //cout << endl << endl; } //cout << endl << endl << endl; cout << ans + 2 << endl; } return 0; }