WC '17 Contest 3 S1 - Mutual Friends
View as PDFWoburn Challenge 2017-18 Round 3 - Senior Division

The social network Google+ has  
users, with user IDs from 
 to 
. Each pair of distinct users
are either friends with one another, or not.
You're given an  grid of values 
, with 
 
being the number of mutual friends which users 
 and 
 have
in common. This corresponds to the number of other users who are
friends with both 
 and 
. Note that it does not depend on whether
or not 
 and 
 are friends with one another. 
for each pair of users 
 and 
, 
 is considered to be 
 for
each user 
.
Given the above information, you'd like to guess which users are friends
with one another. If there exists a valid set of friendships which
result in the given grid of mutual friend counts, then please output the
number of friendships , followed by 
 lines each describing one of
the friendships (with 
 integers, the IDs of the two users involved in
the friendship). No two friendships should involve the same unordered
pair of users. If there are multiple valid sets of friendships, you may
output any of them. If there are no valid sets of friendships, output
Impossible instead.
Subtasks
In test cases worth  of the points, 
.
Input Specification
The first line of input consists of a single integer, .
 lines follow, the 
-th of which consists of integers,
, for 
.
Output Specification
Either the string Impossible, or  integer 
 followed by 
lines, the 
-th of which contains 
 integers describing the 
-th
friendship.
Sample Input 1
5
0 0 0 1 2
0 0 2 0 0
0 2 0 0 0
1 0 0 0 1
2 0 0 1 0
Sample Output 1
5
1 2
2 5
5 3
3 1
2 4
Sample Input 2
3
0 1 1
1 0 0
1 0 0
Sample Output 2
Impossible
Sample Explanations
In the first case, one valid set of  friendships is indicated in the
sample output. For this set, users 
 and 
 have exactly 
 mutual friends
(users 
 and 
) as required, users 
 and 
 have exactly 
 mutual friend
(user 
) as required, and so on. Note that there exist other outputs
which would also be accepted. For example, the friendship between users
 and 
 could be replaced with a friendship between users 
 and 
, the
friendships could be outputted in any order, and the users in each
friendship could be swapped.
In the second case, no set of friendships amongst  users would result
in the required grid of mutual friend counts.
Comments