#include <iostream>
#include <string>
#include <vector>
#include <cstddef>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <sstream>
// 29.01.18
// PP0502B
using namespace std;
class PP0502B {
public:
PP0502B(int numsets) : _ns(numsets)
{
int index, delimiter = ' ';
string sset;
vector<int> a;
for(index = 0; index < _ns; index++)
{
getline(cin, sset);
a = explode(sset, delimiter);
cin.clear();
_vi.push_back(a);
}
vector<int> t;
int first = 0, ti;
for(index = 0; index < _ns; index++)
{
t = _vi[index];
first = popfront(t);
t.resize(first);
reverse(t);
for(ti = 0; ti < t.size(); ti++)
{
cout << t[ti] << (ti == (t.size() - 1)?"":" ");
}
cout << "\n";
}
}
friend ostream& operator<<(ostream& os, const PP0502B& f);
private:
int _ns;
vector< vector<int> > _vi;
private:
void reverse(vector<int>& vi)
{
int vs, index;
vs = vi.size();
for(index = 0; index < vs / 2; index++)
{
swap(vi[index], vi[vs - index - 1]);
}
}
int popfront(vector<int>& vi)
{
int index, vs, newcapacity, firstelement;
vs = vi.size();
firstelement = vi[0];
newcapacity = vs - 1;
vector<int> nvi(newcapacity);
for(index = 1; index < vs; index++)
{
nvi[index-1] = vi[index];
}
vi.clear();
vector<int>().swap(vi); // https://stackoverflow.com/a/10465032
vi = nvi;
return firstelement;
}
int strtoint(const char *string, int tocopy)
{
int number;
char *t;
t = (char *)malloc(sizeof(char) * tocopy);
memcpy(t, string, tocopy);
number = atoi(static_cast<const char*>(t));
free(t);
return number;
}
char* trimstring(const char *sp)
{
const char *p, *q;
char *t;
int length, temp;
p = q = sp;
while(*q != '\0')
{
q++;
}
while(*p == ' ')
{
p++;
}
while(*q == ' ' || *q == '\0') {
q--;
}
q++;
length = q - p;
t = (char *)malloc(sizeof(char) * length);
memcpy(t, p, length);
return t;
}
const char* getnumdelimiters(const char *s, int delimiter, int *ret)
{
int numdelimiters = 0;
while(*s++ != '\0')
{
if(*s == delimiter)
numdelimiters++;
}
*ret = numdelimiters;
return s;
}
const char* convertstringtorightformat(const char *sp, int delimiter)
{
const char *p, *q;
char *s, *t;
int length, first = 1, index = 0, temp = 0;
s = trimstring(sp);
q = p = s;
while(*q++ != '\0')
{
if(*q == delimiter)
{
q++;
}
}
length = q - p;
t = (char *)malloc(sizeof(char) * length);
while(p != q)
{
if(*p == delimiter)
{
if(first == 1)
{
first = 0;
memcpy(&t[index], p, sizeof(char));
}
while(*p == delimiter)
{
temp++;
p++;
}
if(temp > 0)
{
p--;
}
} else
{
first = 1;
memcpy(&t[index], p, sizeof(char));
}
index++;
p++;
}
return t;
}
vector<int> explode(string& inputs, int delimiter)
{
vector<int> ret;
const char *p, *q, *s;
int numdelimiters = 0, index, tocopy, number;
s = strdup(inputs.c_str());
s = convertstringtorightformat(s, delimiter);
q = p = s;
s = getnumdelimiters(s, delimiter, &numdelimiters);
for(index = 0; index < numdelimiters; index++)
{
while(*q++ != delimiter);
tocopy = q - p;
if(tocopy < 1)
{
break;
}
number = strtoint(p, tocopy);
ret.push_back(number);
p = q;
}
if(p < s)
{
tocopy = s - p - 1;
number = strtoint(p, tocopy);
ret.push_back(number);
}
return ret;
}
};
ostream& operator<<(ostream& os, const PP0502B& f)
{
//
return os;
}
int main()
{
int numsets;
string input;
getline(cin, input);
numsets = atoi(input.c_str());
PP0502B pp0502b(numsets);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0ZGRlZj4KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KCi8vIDI5LjAxLjE4Ci8vIFBQMDUwMkIKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBQUDA1MDJCIHsKICAgIHB1YmxpYzoKICAgICAgICBQUDA1MDJCKGludCBudW1zZXRzKSA6IF9ucyhudW1zZXRzKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGluZGV4LCBkZWxpbWl0ZXIgPSAnICc7CiAgICAgICAgICAgIHN0cmluZyBzc2V0OwogICAgICAgICAgICB2ZWN0b3I8aW50PiBhOwogICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IF9uczsgaW5kZXgrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZ2V0bGluZShjaW4sIHNzZXQpOwogICAgICAgICAgICAgICAgYSA9IGV4cGxvZGUoc3NldCwgZGVsaW1pdGVyKTsKICAgICAgICAgICAgICAgIGNpbi5jbGVhcigpOwogICAgICAgICAgICAgICAgX3ZpLnB1c2hfYmFjayhhKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdmVjdG9yPGludD4gdDsKICAgICAgICAgICAgaW50IGZpcnN0ID0gMCwgdGk7CiAgICAgICAgICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgX25zOyBpbmRleCsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0ID0gX3ZpW2luZGV4XTsKICAgICAgICAgICAgICAgIGZpcnN0ID0gcG9wZnJvbnQodCk7CiAgICAgICAgICAgICAgICB0LnJlc2l6ZShmaXJzdCk7CiAgICAgICAgICAgICAgICByZXZlcnNlKHQpOwogICAgICAgICAgICAgICAgZm9yKHRpID0gMDsgdGkgPCB0LnNpemUoKTsgdGkrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjb3V0IDw8IHRbdGldIDw8ICh0aSA9PSAodC5zaXplKCkgLSAxKT8iIjoiICIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY291dCA8PCAiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBQUDA1MDJCJiBmKTsKICAgICAgICAKICAgIHByaXZhdGU6CiAgICAgICAgaW50IF9uczsKICAgICAgICB2ZWN0b3I8IHZlY3RvcjxpbnQ+ID4gX3ZpOwogICAgICAgIAogICAgcHJpdmF0ZToKICAgICAgICB2b2lkIHJldmVyc2UodmVjdG9yPGludD4mIHZpKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHZzLCBpbmRleDsKICAgICAgICAgICAgdnMgPSB2aS5zaXplKCk7CiAgICAgICAgICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgdnMgLyAyOyBpbmRleCsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzd2FwKHZpW2luZGV4XSwgdmlbdnMgLSBpbmRleCAtIDFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpbnQgcG9wZnJvbnQodmVjdG9yPGludD4mIHZpKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGluZGV4LCB2cywgbmV3Y2FwYWNpdHksIGZpcnN0ZWxlbWVudDsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZzID0gdmkuc2l6ZSgpOwogICAgICAgICAgICBmaXJzdGVsZW1lbnQgPSB2aVswXTsKICAgICAgICAgICAgbmV3Y2FwYWNpdHkgPSB2cyAtIDE7CiAgICAgICAgICAgIHZlY3RvcjxpbnQ+IG52aShuZXdjYXBhY2l0eSk7CiAgICAgICAgICAgIGZvcihpbmRleCA9IDE7IGluZGV4IDwgdnM7IGluZGV4KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG52aVtpbmRleC0xXSA9IHZpW2luZGV4XTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2aS5jbGVhcigpOwogICAgICAgICAgICB2ZWN0b3I8aW50PigpLnN3YXAodmkpOyAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTA0NjUwMzIKICAgICAgICAgICAgdmkgPSBudmk7CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gZmlyc3RlbGVtZW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpbnQgc3RydG9pbnQoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgdG9jb3B5KQogICAgICAgIHsKICAgICAgICAgICAgaW50IG51bWJlcjsKICAgICAgICAgICAgY2hhciAqdDsKICAgICAgICAgICAgCiAgICAgICAgICAgIHQgPSAoY2hhciAqKW1hbGxvYyhzaXplb2YoY2hhcikgKiB0b2NvcHkpOwogICAgICAgICAgICBtZW1jcHkodCwgc3RyaW5nLCB0b2NvcHkpOwogICAgICAgICAgICBudW1iZXIgPSBhdG9pKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPih0KSk7CiAgICAgICAgICAgIGZyZWUodCk7CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gbnVtYmVyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBjaGFyKiB0cmltc3RyaW5nKGNvbnN0IGNoYXIgKnNwKQogICAgICAgIHsKICAgICAgICAgICAgY29uc3QgY2hhciAqcCwgKnE7CiAgICAgICAgICAgIGNoYXIgKnQ7CiAgICAgICAgICAgIGludCBsZW5ndGgsIHRlbXA7CiAgICAgICAgICAgIAogICAgICAgICAgICBwID0gcSA9IHNwOwogICAgICAgICAgICB3aGlsZSgqcSAhPSAnXDAnKSAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlKCpwID09ICcgJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlKCpxID09ICcgJyB8fCAqcSA9PSAnXDAnKSB7CiAgICAgICAgICAgICAgICBxLS07IAogICAgICAgICAgICB9CiAgICAgICAgICAgIHErKzsKICAgICAgICAgICAgbGVuZ3RoID0gcSAtIHA7CiAgICAgICAgICAgIHQgPSAoY2hhciAqKW1hbGxvYyhzaXplb2YoY2hhcikgKiBsZW5ndGgpOwogICAgICAgICAgICBtZW1jcHkodCwgcCwgbGVuZ3RoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiB0OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBjb25zdCBjaGFyKiBnZXRudW1kZWxpbWl0ZXJzKGNvbnN0IGNoYXIgKnMsIGludCBkZWxpbWl0ZXIsIGludCAqcmV0KQogICAgICAgIHsKICAgICAgICAgICAgaW50IG51bWRlbGltaXRlcnMgPSAwOwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUoKnMrKyAhPSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZigqcyA9PSBkZWxpbWl0ZXIpCiAgICAgICAgICAgICAgICAgICAgbnVtZGVsaW1pdGVycysrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICpyZXQgPSBudW1kZWxpbWl0ZXJzOwogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGNvbnN0IGNoYXIqIGNvbnZlcnRzdHJpbmd0b3JpZ2h0Zm9ybWF0KGNvbnN0IGNoYXIgKnNwLCBpbnQgZGVsaW1pdGVyKQogICAgICAgIHsKICAgICAgICAgICAgY29uc3QgY2hhciAqcCwgKnE7CiAgICAgICAgICAgIGNoYXIgKnMsICp0OwogICAgICAgICAgICBpbnQgbGVuZ3RoLCBmaXJzdCA9IDEsIGluZGV4ID0gMCwgdGVtcCA9IDA7CiAgICAgICAgICAgIAogICAgICAgICAgICBzID0gdHJpbXN0cmluZyhzcCk7CiAgICAgICAgICAgIHEgPSBwID0gczsKICAgICAgICAgICAgd2hpbGUoKnErKyAhPSAnXDAnKSAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoKnEgPT0gZGVsaW1pdGVyKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHErKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBsZW5ndGggPSBxIC0gcDsKICAgICAgICAgICAgdCA9IChjaGFyICopbWFsbG9jKHNpemVvZihjaGFyKSAqIGxlbmd0aCk7CiAgICAgICAgICAgIHdoaWxlKHAgIT0gcSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoKnAgPT0gZGVsaW1pdGVyKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmKGZpcnN0ID09IDEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmdFtpbmRleF0sIHAsIHNpemVvZihjaGFyKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHdoaWxlKCpwID09IGRlbGltaXRlcikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXArKzsKICAgICAgICAgICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZih0ZW1wID4gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHAtLTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSAxOwogICAgICAgICAgICAgICAgICAgIG1lbWNweSgmdFtpbmRleF0sIHAsIHNpemVvZihjaGFyKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICB9CiAgICAKICAgICAgICB2ZWN0b3I8aW50PiBleHBsb2RlKHN0cmluZyYgaW5wdXRzLCBpbnQgZGVsaW1pdGVyKQogICAgICAgIHsKICAgICAgICAgICAgdmVjdG9yPGludD4gcmV0OwogICAgICAgICAgICBjb25zdCBjaGFyICpwLCAqcSwgKnM7CiAgICAgICAgICAgIGludCBudW1kZWxpbWl0ZXJzID0gMCwgaW5kZXgsIHRvY29weSwgbnVtYmVyOwogICAgICAgICAgICAKICAgICAgICAgICAgcyA9IHN0cmR1cChpbnB1dHMuY19zdHIoKSk7CiAgICAgICAgICAgIHMgPSBjb252ZXJ0c3RyaW5ndG9yaWdodGZvcm1hdChzLCBkZWxpbWl0ZXIpOwogICAgICAgICAgICBxID0gcCA9IHM7CiAgICAgICAgICAgIHMgPSBnZXRudW1kZWxpbWl0ZXJzKHMsIGRlbGltaXRlciwgJm51bWRlbGltaXRlcnMpOwogICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IG51bWRlbGltaXRlcnM7IGluZGV4KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHdoaWxlKCpxKysgIT0gZGVsaW1pdGVyKTsKICAgICAgICAgICAgICAgIHRvY29weSA9IHEgLSBwOwogICAgICAgICAgICAgICAgaWYodG9jb3B5IDwgMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG51bWJlciA9IHN0cnRvaW50KHAsIHRvY29weSk7CiAgICAgICAgICAgICAgICByZXQucHVzaF9iYWNrKG51bWJlcik7CiAgICAgICAgICAgICAgICBwID0gcTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihwIDwgcykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9jb3B5ID0gcyAtIHAgLSAxOwogICAgICAgICAgICAgICAgbnVtYmVyID0gc3RydG9pbnQocCwgdG9jb3B5KTsKICAgICAgICAgICAgICAgIHJldC5wdXNoX2JhY2sobnVtYmVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9Cn07Cgpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBQUDA1MDJCJiBmKQp7CiAgICAvLyAKICAgIAogICAgcmV0dXJuIG9zOwp9CgppbnQgbWFpbigpCnsKICAgIGludCBudW1zZXRzOwogICAgc3RyaW5nIGlucHV0OwogICAgCiAgICBnZXRsaW5lKGNpbiwgaW5wdXQpOwogICAgbnVtc2V0cyA9IGF0b2koaW5wdXQuY19zdHIoKSk7CgogICAgUFAwNTAyQiBwcDA1MDJiKG51bXNldHMpOwp9