use std::io::stdin;
use std::io::BufRead;
use std::io::BufReader;
use std
::time::{SystemTime
, UNIX_EPOCH
};
struct SimpleRng {
state: u64,
}
impl SimpleRng {
fn new(seed: u64) -> Self {
Self { state: seed }
}
fn next(&mut self) -> u32 {
const A: u64 = 1664525;
const C: u64 = 1013904223;
const M: u64 = 1 << 31;
self.state = (A.wrapping_mul(self.state).wrapping_add(C)) % M;
(self.state % 10) as u32
}
}
fn main() {
let n = 3;
let m = 5;
let seed = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_nanos() as u64;
let mut rng = SimpleRng::new(seed);
let a: Vec<Vec<u32>> = (0..n)
.map(|_| (0..m).map(|_| rng.next()).collect())
.collect();
let b = a.clone();
println!("A:");
a.iter().for_each(|row| {
row.iter().for_each(|&val| print!("{} ", val));
println!();
});
println!();
let sorted_a: Vec<Vec<u32>> = a
.iter()
.map(|row| {
let mut sorted_row = row.clone();
sorted_row.sort();
sorted_row
})
.collect();
println!("сортировка по строкам A:");
sorted_a.iter().for_each(|row| {
row.iter().for_each(|&val| print!("{} ", val));
println!();
});
println!();
println!("B:");
b.iter().for_each(|row| {
row.iter().for_each(|&val| print!("{} ", val));
println!();
});
println!();
let mut sorted_b = b.clone();
for j in 0..m {
let mut column: Vec<u32> = (0..n).map(|i| b[i][j]).collect();
column.sort();
for (i, &val) in column.iter().enumerate() {
sorted_b[i][j] = val;
}
}
println!("сортировка по столбцам B:");
sorted_b.iter().for_each(|row| {
row.iter().for_each(|&val| print!("{} ", val));
println!();
});
}
dXNlIHN0ZDo6aW86OnN0ZGluOwp1c2Ugc3RkOjppbzo6QnVmUmVhZDsKdXNlIHN0ZDo6aW86OkJ1ZlJlYWRlcjsKCnVzZSBzdGQ6OnRpbWU6OntTeXN0ZW1UaW1lLCBVTklYX0VQT0NIfTsKIApzdHJ1Y3QgU2ltcGxlUm5nIHsKICAgIHN0YXRlOiB1NjQsCn0KIAppbXBsIFNpbXBsZVJuZyB7CiAgICBmbiBuZXcoc2VlZDogdTY0KSAtPiBTZWxmIHsKICAgICAgICBTZWxmIHsgc3RhdGU6IHNlZWQgfQogICAgfQogICAgCiAgICBmbiBuZXh0KCZtdXQgc2VsZikgLT4gdTMyIHsKICAgICAgICBjb25zdCBBOiB1NjQgPSAxNjY0NTI1OwogICAgICAgIGNvbnN0IEM6IHU2NCA9IDEwMTM5MDQyMjM7CiAgICAgICAgY29uc3QgTTogdTY0ID0gMSA8PCAzMTsKICAgICAgICAKICAgICAgICBzZWxmLnN0YXRlID0gKEEud3JhcHBpbmdfbXVsKHNlbGYuc3RhdGUpLndyYXBwaW5nX2FkZChDKSkgJSBNOwogICAgICAgIChzZWxmLnN0YXRlICUgMTApIGFzIHUzMgogICAgfQp9CiAKZm4gbWFpbigpIHsKICAgIGxldCBuID0gMzsKICAgIGxldCBtID0gNTsKIAogICAgbGV0IHNlZWQgPSBTeXN0ZW1UaW1lOjpub3coKQogICAgICAgIC5kdXJhdGlvbl9zaW5jZShVTklYX0VQT0NIKQogICAgICAgIC51bndyYXAoKQogICAgICAgIC5hc19uYW5vcygpIGFzIHU2NDsKICAgIGxldCBtdXQgcm5nID0gU2ltcGxlUm5nOjpuZXcoc2VlZCk7CiAKICAgIGxldCBhOiBWZWM8VmVjPHUzMj4+ID0gKDAuLm4pCiAgICAgICAgLm1hcCh8X3wgKDAuLm0pLm1hcCh8X3wgcm5nLm5leHQoKSkuY29sbGVjdCgpKQogICAgICAgIC5jb2xsZWN0KCk7CiAgICAKICAgIGxldCBiID0gYS5jbG9uZSgpOwogCiAgICBwcmludGxuISgiQToiKTsKICAgIGEuaXRlcigpLmZvcl9lYWNoKHxyb3d8IHsKICAgICAgICByb3cuaXRlcigpLmZvcl9lYWNoKHwmdmFsfCBwcmludCEoInt9ICIsIHZhbCkpOwogICAgICAgIHByaW50bG4hKCk7CiAgICB9KTsKICAgIHByaW50bG4hKCk7CiAKICAgIGxldCBzb3J0ZWRfYTogVmVjPFZlYzx1MzI+PiA9IGEKICAgICAgICAuaXRlcigpCiAgICAgICAgLm1hcCh8cm93fCB7CiAgICAgICAgICAgIGxldCBtdXQgc29ydGVkX3JvdyA9IHJvdy5jbG9uZSgpOwogICAgICAgICAgICBzb3J0ZWRfcm93LnNvcnQoKTsKICAgICAgICAgICAgc29ydGVkX3JvdwogICAgICAgIH0pCiAgICAgICAgLmNvbGxlY3QoKTsKIAogICAgcHJpbnRsbiEoItGB0L7RgNGC0LjRgNC+0LLQutCwINC/0L4g0YHRgtGA0L7QutCw0LwgQToiKTsKICAgIHNvcnRlZF9hLml0ZXIoKS5mb3JfZWFjaCh8cm93fCB7CiAgICAgICAgcm93Lml0ZXIoKS5mb3JfZWFjaCh8JnZhbHwgcHJpbnQhKCJ7fSAiLCB2YWwpKTsKICAgICAgICBwcmludGxuISgpOwogICAgfSk7CiAgICBwcmludGxuISgpOwogCiAgICBwcmludGxuISgiQjoiKTsKICAgIGIuaXRlcigpLmZvcl9lYWNoKHxyb3d8IHsKICAgICAgICByb3cuaXRlcigpLmZvcl9lYWNoKHwmdmFsfCBwcmludCEoInt9ICIsIHZhbCkpOwogICAgICAgIHByaW50bG4hKCk7CiAgICB9KTsKICAgIHByaW50bG4hKCk7CiAKICAgIGxldCBtdXQgc29ydGVkX2IgPSBiLmNsb25lKCk7CiAgICBmb3IgaiBpbiAwLi5tIHsKICAgICAgICBsZXQgbXV0IGNvbHVtbjogVmVjPHUzMj4gPSAoMC4ubikubWFwKHxpfCBiW2ldW2pdKS5jb2xsZWN0KCk7CiAgICAgICAgY29sdW1uLnNvcnQoKTsKICAgICAgICBmb3IgKGksICZ2YWwpIGluIGNvbHVtbi5pdGVyKCkuZW51bWVyYXRlKCkgewogICAgICAgIHNvcnRlZF9iW2ldW2pdID0gdmFsOwogICAgICAgIH0KICAgIH0KIAogICAgcHJpbnRsbiEoItGB0L7RgNGC0LjRgNC+0LLQutCwINC/0L4g0YHRgtC+0LvQsdGG0LDQvCBCOiIpOwogICAgc29ydGVkX2IuaXRlcigpLmZvcl9lYWNoKHxyb3d8IHsKICAgICAgICByb3cuaXRlcigpLmZvcl9lYWNoKHwmdmFsfCBwcmludCEoInt9ICIsIHZhbCkpOwogICAgICAgIHByaW50bG4hKCk7CiAgICB9KTsKfQo=