#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);
if(first < 1)
continue; //cout << 0 << "\n";
else
{
if(first < t.size())
t.resize(first);
reverse(t);
for(ti = 0; ti < t.size(); ti++)
{
//if(t[ti] != 0)
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+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KCi8vIDI5LjAxLjE4Ci8vIFBQMDUwMkIKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBQUDA1MDJCIHsKICAgIHB1YmxpYzoKICAgICAgICBQUDA1MDJCKGludCBudW1zZXRzKSA6IF9ucyhudW1zZXRzKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGluZGV4LCBkZWxpbWl0ZXIgPSAnICc7CiAgICAgICAgICAgIHN0cmluZyBzc2V0OwogICAgICAgICAgICB2ZWN0b3I8aW50PiBhOwogICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IF9uczsgaW5kZXgrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZ2V0bGluZShjaW4sIHNzZXQpOwogICAgICAgICAgICAgICAgYSA9IGV4cGxvZGUoc3NldCwgZGVsaW1pdGVyKTsKICAgICAgICAgICAgICAgIGNpbi5jbGVhcigpOwogICAgICAgICAgICAgICAgX3ZpLnB1c2hfYmFjayhhKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdmVjdG9yPGludD4gdDsKICAgICAgICAgICAgaW50IGZpcnN0ID0gMCwgdGk7CiAgICAgICAgICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgX25zOyBpbmRleCsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0ID0gX3ZpW2luZGV4XTsKICAgICAgICAgICAgICAgIGZpcnN0ID0gcG9wZnJvbnQodCk7CiAgICAgICAgICAgICAgICBpZihmaXJzdCA8IDEpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vY291dCA8PCAwIDw8ICJcbiI7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYoZmlyc3QgPCB0LnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgdC5yZXNpemUoZmlyc3QpOwogICAgICAgICAgICAgICAgICAgIHJldmVyc2UodCk7CiAgICAgICAgICAgICAgICAgICAgZm9yKHRpID0gMDsgdGkgPCB0LnNpemUoKTsgdGkrKykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYodFt0aV0gIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgdFt0aV0gPDwgKHRpID09ICh0LnNpemUoKSAtIDEpPyIiOiIgIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIlxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29uc3QgUFAwNTAyQiYgZik7CiAgICAgICAgCiAgICBwcml2YXRlOgogICAgICAgIGludCBfbnM7CiAgICAgICAgdmVjdG9yPCB2ZWN0b3I8aW50PiA+IF92aTsKICAgICAgICAKICAgIHByaXZhdGU6CiAgICAgICAgdm9pZCByZXZlcnNlKHZlY3RvcjxpbnQ+JiB2aSkKICAgICAgICB7CiAgICAgICAgICAgIGludCB2cywgaW5kZXg7CiAgICAgICAgICAgIHZzID0gdmkuc2l6ZSgpOwogICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IHZzIC8gMjsgaW5kZXgrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3dhcCh2aVtpbmRleF0sIHZpW3ZzIC0gaW5kZXggLSAxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaW50IHBvcGZyb250KHZlY3RvcjxpbnQ+JiB2aSkKICAgICAgICB7CiAgICAgICAgICAgIGludCBpbmRleCwgdnMsIG5ld2NhcGFjaXR5LCBmaXJzdGVsZW1lbnQ7CiAgICAgICAgICAgIAogICAgICAgICAgICB2cyA9IHZpLnNpemUoKTsKICAgICAgICAgICAgZmlyc3RlbGVtZW50ID0gdmlbMF07CiAgICAgICAgICAgIG5ld2NhcGFjaXR5ID0gdnMgLSAxOwogICAgICAgICAgICB2ZWN0b3I8aW50PiBudmkobmV3Y2FwYWNpdHkpOwogICAgICAgICAgICBmb3IoaW5kZXggPSAxOyBpbmRleCA8IHZzOyBpbmRleCsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBudmlbaW5kZXgtMV0gPSB2aVtpbmRleF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmkuY2xlYXIoKTsKICAgICAgICAgICAgdmVjdG9yPGludD4oKS5zd2FwKHZpKTsgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzEwNDY1MDMyCiAgICAgICAgICAgIHZpID0gbnZpOwogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIGZpcnN0ZWxlbWVudDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaW50IHN0cnRvaW50KGNvbnN0IGNoYXIgKnN0cmluZywgaW50IHRvY29weSl7aW50IG51bWJlcjtjaGFyICp0O3QgPSAoY2hhciAqKW1hbGxvYyhzaXplb2YoY2hhcikgKiB0b2NvcHkpO21lbWNweSh0LCBzdHJpbmcsIHRvY29weSk7bnVtYmVyID0gYXRvaShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4odCkpO2ZyZWUodCk7cmV0dXJuIG51bWJlcjt9CiAgICAgICAgCiAgICAgICAgY2hhciogdHJpbXN0cmluZyhjb25zdCBjaGFyICpzcCl7Y29uc3QgY2hhciAqcCwgKnE7Y2hhciAqdDtpbnQgbGVuZ3RoLCB0ZW1wO3AgPSBxID0gc3A7d2hpbGUoKnEgIT0gJ1wwJykge3ErKzt9O3doaWxlKCpwID09ICcgJyl7cCsrO307d2hpbGUoKnEgPT0gJyAnIHx8ICpxID09ICdcMCcpIHtxLS07fXErKztsZW5ndGggPSBxIC0gcDt0ID0gKGNoYXIgKiltYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuZ3RoKTttZW1jcHkodCwgcCwgbGVuZ3RoKTtyZXR1cm4gdDt9CiAgICAgICAgCiAgICAgICAgY29uc3QgY2hhciogZ2V0bnVtZGVsaW1pdGVycyhjb25zdCBjaGFyICpzLCBpbnQgZGVsaW1pdGVyLCBpbnQgKnJldCl7aW50IG51bWRlbGltaXRlcnMgPSAwO3doaWxlKCpzKysgIT0gJ1wwJyl7aWYoKnMgPT0gZGVsaW1pdGVyKSBudW1kZWxpbWl0ZXJzKys7fSpyZXQgPSBudW1kZWxpbWl0ZXJzO3JldHVybiBzO30KICAgICAgICAKICAgICAgICBjb25zdCBjaGFyKiBjb252ZXJ0c3RyaW5ndG9yaWdodGZvcm1hdChjb25zdCBjaGFyICpzcCwgaW50IGRlbGltaXRlcil7Y29uc3QgY2hhciAqcCwgKnE7Y2hhciAqcywgKnQ7aW50IGxlbmd0aCwgZmlyc3QgPSAxLCBpbmRleCA9IDAsIHRlbXAgPSAwO3MgPSB0cmltc3RyaW5nKHNwKTtxID0gcCA9IHM7d2hpbGUoKnErKyAhPSAnXDAnKXtpZigqcSA9PSBkZWxpbWl0ZXIpe3ErKzt9fTtsZW5ndGggPSBxIC0gcDt0ID0gKGNoYXIgKiltYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuZ3RoKTt3aGlsZShwICE9IHEpe2lmKCpwID09IGRlbGltaXRlcil7aWYoZmlyc3QgPT0gMSl7Zmlyc3QgPSAwO21lbWNweSgmdFtpbmRleF0sIHAsIHNpemVvZihjaGFyKSk7fXdoaWxlKCpwID09IGRlbGltaXRlcil7dGVtcCsrO3ArKzt9aWYodGVtcCA+IDApe3AtLTt9fSBlbHNlIHtmaXJzdCA9IDE7bWVtY3B5KCZ0W2luZGV4XSwgcCwgc2l6ZW9mKGNoYXIpKTt9aW5kZXgrKztwKys7fXJldHVybiB0O30KICAgIAogICAgICAgIHZlY3RvcjxpbnQ+IGV4cGxvZGUoc3RyaW5nJiBpbnB1dHMsIGludCBkZWxpbWl0ZXIpe3ZlY3RvcjxpbnQ+IHJldDtjb25zdCBjaGFyICpwLCAqcSwgKnM7aW50IG51bWRlbGltaXRlcnMgPSAwLCBpbmRleCwgdG9jb3B5LCBudW1iZXI7cyA9IHN0cmR1cChpbnB1dHMuY19zdHIoKSk7cyA9IGNvbnZlcnRzdHJpbmd0b3JpZ2h0Zm9ybWF0KHMsIGRlbGltaXRlcik7cSA9IHAgPSBzO3MgPSBnZXRudW1kZWxpbWl0ZXJzKHMsIGRlbGltaXRlciwgJm51bWRlbGltaXRlcnMpO2ZvcihpbmRleCA9IDA7IGluZGV4IDwgbnVtZGVsaW1pdGVyczsgaW5kZXgrKyl7d2hpbGUoKnErKyAhPSBkZWxpbWl0ZXIpO3RvY29weSA9IHEgLSBwO2lmKHRvY29weSA8IDEpe2JyZWFrO307IG51bWJlciA9IHN0cnRvaW50KHAsIHRvY29weSk7cmV0LnB1c2hfYmFjayhudW1iZXIpO3AgPSBxO31pZihwIDwgcyl7dG9jb3B5ID0gcyAtIHAgLSAxO251bWJlciA9IHN0cnRvaW50KHAsIHRvY29weSk7cmV0LnB1c2hfYmFjayhudW1iZXIpO31yZXR1cm4gcmV0O30KfTsKCm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IFBQMDUwMkImIGYpCnsKICAgIC8vIAogICAgCiAgICByZXR1cm4gb3M7Cn0KCmludCBtYWluKCkKewogICAgaW50IG51bXNldHM7CiAgICBzdHJpbmcgaW5wdXQ7CiAgICAKICAgIGdldGxpbmUoY2luLCBpbnB1dCk7CiAgICBudW1zZXRzID0gYXRvaShpbnB1dC5jX3N0cigpKTsKCiAgICBQUDA1MDJCIHBwMDUwMmIobnVtc2V0cyk7Cn0=