Арифметичний прямокутник
Після уроку з арифметичних прогресій вчитель дав Петру домашнє завдання: аркуш паперу з числами, записаними в деяких клітинках R×C сітки. Деякі клітинки залишилися порожніми. Завдання Петра — створити арифметичний прямокутник, заповнивши відсутні числа. В арифметичному прямокутнику всі числа в кожному рядку та в кожному стовпці повинні утворювати арифметичну прогресію в порядку, в якому вони з'являються.
Наприклад, це арифметичний прямокутник:
1 3 5 7 9
2 2 2 2 2
3 1 -1 -3 -5
Петро занадто ледачий, щоб виконувати такі завдання вручну. Він хоче, щоб ви написали програму, яка зробить це за нього.
Вам надано сітку з цілих чисел, деякі з яких замінені крапками. З'ясуйте, чи можливо замінити крапки деякими раціональними числами, щоб отримати арифметичний прямокутник. Якщо є рішення, знайдіть одне.
Примітка: Арифметична прогресія — це послідовність чисел, така, що різниця будь-яких двох послідовних елементів послідовності є сталою.
Вхідні дані
Перша строка вхідних даних містить два додатні цілі числа R та C: розміри сітки. Далі йдуть R рядків, кожен з яких містить C токенів, розділених одним пробілом. Кожен з токенів — це або крапка (.), або ціле число.
Обмеження
Кожне число, задане в сітці, знаходиться в межах від -100 до 100 включно. Є 10 партій тестових випадків, кожна з яких коштує 10 балів. У партіях з 1 по 9 маємо 1 ≤ R, C ≤ 6. Властивості окремих партій наведені нижче.
Партія 1. Усі числа вже заповнені.
Партія 2. Або R = 1, або C = 1 у кожному тестовому випадку.
Партія 3. R = C = 2 у кожному тестовому випадку.
Партія 4. Кожен тестовий випадок має унікальне рішення, яке можна знайти, використовуючи підхід, запропонований у першому прикладі.
Партія 5. Кожен тестовий випадок має унікальне рішення, і рішення містить лише цілі числа.
Партія 6. Кожен тестовий випадок має унікальне рішення.
Партія 7. Кожен тестовий випадок або має унікальне рішення, яке містить лише цілі числа, або не має рішення взагалі.
Партія 8. Кожен тестовий випадок або має унікальне рішення, або не має рішення взагалі.
Партія 9. Довільні тестові випадки.
Партія 10. Довільні тестові випадки з 1 ≤ R, C ≤ 50.
Вихідні дані
Якщо рішення немає, виведіть один рядок зі строкою "No solution." (лапки для ясності). Якщо є декілька рішень, виберіть і виведіть будь-яке одне рішення.
При виведенні рішення виведіть R рядків, кожен з C раціональними числами, розділеними пробілами.
Кожне раціональне число має бути надруковане як "N/D", де D є додатнім, а N і D є взаємно простими. Якщо D дорівнює 1, опустіть частину "/D".
Жодне число у вашому виведенні не може мати більше 20 цифр. (Це обмеження легко задовольнити, його єдина мета — спростити перевірку ваших виводів.)