#include <bits/stdc++.h>
#include <time.h>
using namespace std;
#define vi vector<int>
#define f(i,a,b) for(int i=a;i<b;i++)
const int N= 1e5+5;
#define int long long
const int mod= 1e9+7;
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
clock_t start=clock();
int tc=1;
cin>>tc;
while(tc--){
//logic: for x,y,z. Chooose middle "y", iff diff(x,y)+diff(y,z)> diff(x,z)
int n;cin>>n;
vi arr(n),isPeak(n,0);
f(i,0,n) cin>>arr[i];
vector<int>ans;
ans.push_back(arr[0]);// arr[0], always be the part
ans.push_back(arr[1]);// need to check
for(int i=2;i<n;i++){
int size=ans.size();
if(size<=1){
ans.push_back(arr[i]);
continue;
}
int x=ans[size-2],y=ans[size-1],z=arr[i];
if(abs(x-y)+abs(y-z)<=abs(x-z))
ans.pop_back();
ans.push_back(z);
}
cout<<ans.size()<<endl;
for(auto e:ans)
cout<<e<<" ";
cout<<endl;
}
clock_t end=clock();
// double secs = double(end - start) / CLOCKS_PER_SEC;cerr << "\n\nTime elapsed : " << secs<<"s";
return 0;
}
1486B - Eastern Exhibition | 1363A - Odd Selection |
131B - Opposites Attract | 490C - Hacking Cypher |
158B - Taxi | 41C - Email address |
1373D - Maximum Sum on Even Positions | 1574C - Slay the Dragon |
621A - Wet Shark and Odd and Even | 1395A - Boboniu Likes to Color Balls |
1637C - Andrew and Stones | 1334B - Middle Class |
260C - Balls and Boxes | 1554A - Cherry |
11B - Jumping Jack | 716A - Crazy Computer |
644A - Parliament of Berland | 1657C - Bracket Sequence Deletion |
1657B - XY Sequence | 1009A - Game Shopping |
1657A - Integer Moves | 230B - T-primes |
630A - Again Twenty Five | 1234D - Distinct Characters Queries |
1183A - Nearest Interesting Number | 1009E - Intercity Travelling |
1637B - MEX and Array | 224A - Parallelepiped |
964A - Splits | 1615A - Closing The Gap |