排列
题号:NC223142
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

牛牛有  个  的排列 ,因为写下所有的排列太费时间,而且也会写下很多数字,牛牛觉得这过程没有什么意义,经过观察后牛牛发现对于  是  交换第  和  个数字得到的,所以牛牛就先在第一行写下了第一个排列,然后接下来写的全是   和  ,由此完美的解决了排列的存储问题。
但是这样又一个问题诞生了,若牛牛写下所有的数字,他可以轻松的按字典序比较任意两个排列的大小,但现在这种存储方式,却是让这个问题变得十分的复杂,所以现在你的任务就是:将这个  个排列按照字典序从小到大排(若有一样的排列,则让下标较小的出现在前面)得到 ,然后输出 

输入描述:

第一行给出两个正整数 ,含义如题

第二行给出  个正整数表示 

接下来  行每行两个正整数,其中第  行两个正整数表示 

 是一个  的排列

输出描述:

在一行中输出  个以空格分隔的整数 
示例1

输入

复制
3 4
3 1 2
1 2
1 3
2 3

输出

复制
1 3 2 0

说明

,将  的第一个数字 () 和第二个数字 () 交换,得到 ,类似可以得到 。按字典序排序得到