#include <bits/stdc++.h>
using namespace std;
void _r(const int& x) { scanf("%d", &x); }
void _r(const long long& x) { scanf("%I64d", &x); }
void _r(const char* x) { scanf("%s", x); }
void R() {}
template <class T, class... U>
void R(const T& head, const U&... tail) {
  _r(head);
  R(tail...);
}
void _w(const char x) { putchar(x); }
void _w(const char* x) { printf("%s", x); }
void _w(const int x) { printf("%d", x); }
void _w(const long long x) { printf("%I64d", x); }
void _w(const double x) { printf("%.6f", x); }
void W() {}
template <class T, class... U>
void W(const T& head, const U&... tail) {
  _w(head);
  putchar(sizeof...(tail) ? ' ' : '\n');
  W(tail...);
}
const long long mod = 1e9 + 7;
long long fp1(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans *= a;
    b >>= 1;
    a *= a;
  }
  return ans;
}
long long fp2(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    b >>= 1;
    a = a * a % mod;
  }
  return ans;
}
long long Read() {
  long long res = 0, flag = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') flag = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    res = res * 10 + ch - '0';
    ch = getchar();
  }
  return res * flag;
}
const int N = 2e5 + 5;
vector<int> v;
int a[N];
int main() {
  int __T;
  scanf("%d", &__T);
  for (int ica = (1); ica <= (__T); ica++) {
    v.clear();
    int n;
    R(n);
    for (int i = (1); i <= (n); i++) R(a[i]);
    v.push_back(a[1]);
    for (int i = (2); i <= (n - 1); i++)
      if (1LL * (a[i] - v[v.size() - 1]) * (a[i + 1] - a[i]) < 0)
        v.push_back(a[i]);
    v.push_back(a[n]);
    cout << v.size() << endl;
    for (auto a : v) {
      cout << a << " ";
    }
    W("");
  }
  return 0;
}
