//201503-1
//注意下不能在main函数里开1000*1000的数组大小
#include <bits/stdc++.h>
using namespace std;
int arr1[1010][1010];
int main(){
int row, col;scanf("%d%d", &row, &col);
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)scanf("%d", &arr1[i][j]);
for (int j = col - 1; j >= 0; j--){
for (int i = 0; i < row; i++)printf("%d ", arr1[i][j]);printf("\n");}
return 0;}
//201503-1
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, m;scanf("%d%d", &n, &m);
vector<vector<int>> v(n, vector<int>(m));
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)scanf("%d", &v[i][j]);
vector<vector<int>> res(m, vector<int>(n));
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
res[m - i - 1][j] = v[j][i];
for (int i = 0; i < res.size(); i++){
for (int j = 0; j < res[i].size(); j++)printf("%d ", res[i][j]);printf("\n");}
return 0;}
//201503-2
#include <bits/stdc++.h>
using namespace std;
struct Node{
int num, count;
bool operator<(const Node &obj) const{
if (count == obj.count)
return num > obj.num;
else
return count < obj.count;}};
int main(){
int n;scanf("%d", &n);
map<int, int> m;
priority_queue<Node> pq;
int number;
while (n--){scanf("%d", &number);
m[number]++;}
Node obj;
for (auto it:m){
obj.num = it.first;
obj.count = it.second;
pq.push(obj);}while (!pq.empty()){printf("%d %d\n", pq.top().num, pq.top().count);
pq.pop();}
return 0;}