B - Princesses and Princes CodeForces - 1327B

CodeForces - 1327B

The King of Berland Polycarp LXXXIV has nn daughters. To establish his power to the neighbouring kingdoms he wants to marry his daughters to the princes of these kingdoms. As a lucky coincidence there are nn other kingdoms as well.

So Polycarp LXXXIV has enumerated his daughters from 11 to nn and the kingdoms from 11 to nn. For each daughter he has compiled a list of kingdoms princes of which she wanted to marry.

Polycarp LXXXIV is very busy, so he finds a couple for his daughters greedily one after another.

For the first daughter he takes the kingdom with the lowest number from her list and marries the daughter to their prince. For the second daughter he takes the kingdom with the lowest number from her list, prince of which hasn't been taken already. If there are no free princes in the list then the daughter marries nobody and Polycarp LXXXIV proceeds to the next daughter. The process ends after the nn-th daughter.

For example, let there be 44 daughters and kingdoms, the lists daughters have are [2,3][2,3], [1,2][1,2], [3,4][3,4], [3][3], respectively.

In that case daughter 11 marries the prince of kingdom 22, daughter 22 marries the prince of kingdom 11, daughter 33 marries the prince of kingdom 33, leaving daughter 44 nobody to marry to.

Actually, before starting the marriage process Polycarp LXXXIV has the time to convince one of his daughters that some prince is also worth marrying to. Effectively, that means that he can add exactly one kingdom to exactly one of his daughter's list. Note that this kingdom should not be present in the daughter's list.

Polycarp LXXXIV wants to increase the number of married couples.

Unfortunately, what he doesn't have the time for is determining what entry to add. If there is no way to increase the total number of married couples then output that the marriages are already optimal. Otherwise, find such an entry that the total number of married couples increases if Polycarp LXXXIV adds it.

If there are multiple ways to add an entry so that the total number of married couples increases then print any of them.

For your and our convenience you are asked to answer tt independent test cases.

Input

The first line contains a single integer tt (1≤t≤1051≤t≤105) — the number of test cases.

Then tt test cases follow.

The first line of each test case contains a single integer nn (1≤n≤1051≤n≤105) — the number of daughters and the number of kingdoms.

Each of the next nn lines contains the description of each daughter's list. The first integer kk (0≤k≤n0≤k≤n) is the number of entries in the ii-th daughter's list. After that kk distinct integers follow gi[1],gi[2],…,gi[k]gi[1],gi[2],…,gi[k] (1≤gi[j]≤n1≤gi[j]≤n) — the indices of the kingdoms in the list in the increasing order (gi[1]<gi[2]<⋯<gi[k]gi[1]<gi[2]<⋯<gi[k]).

It's guaranteed that the total number of daughters over all test cases does not exceed 105105.

It's also guaranteed that the total number of kingdoms in lists over all test cases does not exceed 105105.

Output

For each test case print the answer to it.

Print "IMPROVE" in the first line if Polycarp LXXXIV can add some kingdom to some of his daughter's list so that the total number of married couples increases. The second line then should contain two integers — the index of the daughter and the index of the kingdom Polycarp LXXXIV should add to that daughter's list.

If there are multiple ways to add an entry so that the total number of married couples increases then print any of them.

Otherwise the only line should contain one word "OPTIMAL".

Example

Input

5
4
2 2 3
2 1 2
2 3 4
1 3
2
0
0
3
3 1 2 3
3 1 2 3
3 1 2 3
1
1 1
4
1 1
1 2
1 3
1 4

Output

IMPROVE
4 4
IMPROVE
1 1
OPTIMAL
OPTIMAL
OPTIMAL

Note

The first test case is depicted in the statement. Adding the fourth kingdom to the list of the fourth daughter makes her marry the prince of the fourth kingdom.

In the second test case any new entry will increase the number of marriages from 00 to 11.

In the third and the fourth test cases there is no way to add an entry.

In the fifth test case there is no way to change the marriages by adding any entry.

 题意:t组输入,每组会有n个公主以及n个王子。接下来n行分别对应每个公主的择偶情况,每行第一个数k代表接下来有k个数,表示这个公主可以选择那些王子。公主与王子只能一一对应,公主优先选择编号较小的王子。如果根据输入的择偶情况能够分配完成的话,输出OPTIMAL;否则输出IMPROVE,并且将未配对的编号最小的公主与王子配对,并输出编号。

题解:读题困难啊这个,但其实如果读懂了代码还是很容易写的。只要定义两个数组分别标记公主和王子的配对情况就行,未配对记为0,配对完成记为1(无需记录哪个公主配对哪个王子)。题目要注意是,不要使用memset,因为我的同学使用这个给数组初始化,导致了超时。实际上这个写起来很方便的,但是效率还没有for循环来的高,所以只要老老实实写一个for循环给数组初始化就行,其他代码都偏简单。

#include<iostream>
#include<algorithm>
using namespace std;

int t, n, k, x;
int a[100005], done[100005];//公猪和王梓 
int main(){
	scanf("%d", &t);
	while(t--){
		scanf("%d", &n);
		for(int i=1; i<=n; i++)
			a[i] = done[i] = 0;//记为0表示未配对 
		for(int i=1; i<=n; i++){
			scanf("%d", &k);
			for(int j=1; j<=k; j++){
				scanf("%d", &x);
				if(!a[i] && !done[x])
					a[i] = done[x] = 1;
			}
		}
		int flag = 0, i, j;
		for(i=1; i<=n; i++){
			if(!a[i])
				for(j=1; j<=n; j++)
					if(!done[j]){flag = 1;break;}
			if(flag)	break;
		}
		if(flag)	printf("IMPROVE\n%d %d\n", i, j);
		else		printf("OPTIMAL\n");
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值