//5-1 UVa 1593
/*
alignment n. 队列,成直线;校准;结盟
customizable adj. 可定制的
align vt. 排列
vertical adj. 垂直的,直立的;n.垂直线,垂直面
*/
int main() {
string s;
vector<vector<string> > strcache;
int maxlen[1005] = { 0 };
//IN(); OUT();
CLOSE();
while(getline(cin, s)) {
stringstream ss(s);
string word;
vector<string> svec;
while(ss >> word) {
//cout << word;
int i = svec.size();
maxlen[i] = max(maxlen[i], (int )word.size());
svec.push_back(word);
}
strcache.push_back(svec);
}
for(int i = 0; i < strcache.size(); i++) {
for(int j = 0; j < strcache[i].size(); j++) {
cout << strcache[i][j];
int t = maxlen[j]+1-strcache[i][j].size();
if(j != strcache[i].size()-1) while(t--) cout << ' ';
}
cout << endl;
}
return 0;
}
//5-2 UVa 1594
/*
period n. 周期
*/
int main() {
int T;
scanf("%d", &T);
while(T--) {
int n, x;
scanf("%d", &n);
vector<int> zero(n, 0);
vector<int> n_tuple;
set<vector<int> > tuples;
for(int i = 0; i < n; i++) {
scanf("%d", &x);
n_tuple.push_back(x);
}
tuples.insert(n_tuple);
for(int i = 0; i < 1000; i++) {
vector<int> t;
for(int j = 0; j < n; j++) {
x = abs(n_tuple[j] - n_tuple[(j+1)%n]);
t.push_back(x);
}
n_tuple = t;
if(t == zero) {
printf("ZERO\n");
break;
}
if(tuples.count(t)) {
printf("LOOP\n");
break;
}
tuples.insert(t);
}
}
return 0;
}
//习题5-3 卡片游戏(Throwing cards away I, UVa 10935)
/*
deck n. 甲板;行李仓;露天平台vt. 装饰;装甲板;打扮
discard vt. 抛弃;放弃;丢弃 vi. 放弃 n . 抛弃;被丢弃的东西或人
*/
int main() {
int n;
while(scanf("%d", &n) && n) {
deque<int> cards;
printf("Discarded cards:");
for(int i = 1; i <= n; i++) cards.push_back(i);
int flag = 1;
while(cards.size() > 1) {
if(flag) flag = 0;
else printf(",");
printf(" %d", cards.front());
cards.pop_front();
int t = cards.front();
cards.push_back(t);
cards.pop_front();
}
printf("\n");
printf("Remaining card: %d\n", cards.front());
}
return 0;
}
//习题5-4 交换学生(Foreign Exchange, UVa 10763)
int main() {
int n, a, b;
//IN(); OUT();
while(scanf("%d", &n) && n) {
map<pair<int, int>, int> cnt;
for(int i = 0; i < n; i++) {
scanf("%d%d", &a, &b);
pair<int, int> p(a, b);
cnt[p]++;
}
bool flag = true;
for(auto i = cnt.begin(); i != cnt.end(); i++) {
int a = (*i).first.second, b = (*i).first.first;
pair<int, int> p(a, b);
//cout << a << b;
if(!cnt.count(p) || cnt[p] != (*i).second) {
flag = false;
break;
}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}