Αρχική > 32ος ΠΔΠ

32ος ΠΔΠ Καμπ (κοινά)
Με πόσους τρόπους; (countways)

Μας δίνεται μία σκακιέρα με \(N\times M\) τετραγωνάκια. Σε κάθε τετραγωνάκι είναι γραμμένος ένας αριθμός. Ξεκινάμε από το πάνω-αριστερά τετραγωνάκι και θέλουμε να πάμε στο κάτω-δεξιά τετραγωνάκι. Σε κάθε κίνηση, μπορούμε να μετακινηθούμε μόνο κατά ένα τετράγωνο πάνω, κάτω, αριστερά ή δεξιά, και μόνο υπό την προϋπόθεση ότι το τετράγωνο στο οποίο πηγαίνουμε έχει (αυστηρά) μεγαλύτερο αριθμό από το τετράγωνο όπου βρισκόμαστε. Με πόσους διαφορετικούς τρόπους μπορούμε να φτάσουμε από το πάνω- αριστερά τετραγωνάκι στο κάτω-δεξιά;

(Θεωρούμε ότι δύο διαδρομές είναι διαφορετικές όταν οι ακολουθίες των συντεταγμένων των τετραγώνων από τα οποία περνάνε είναι διαφορετικές.)

Αρχεία Εισόδου (countways.in):

Η πρώτη γραμμή της εισόδου θα περιέχει δύο θετικούς ακέραιους αριθμούς \(N\) και \(M\), χωρισμένους με ένα κενό διάστημα: τις διαστάσεις της σκακιέρας. Κάθε μία από τις επόμενες \(N\) γραμμές θα περιέχει \(M\) θετικούς ακέραιους αριθμούς χωρισμένους ανά δύο με ένα κενό διάστημα: τους αριθμούς που είναι γραμμένοι στα τετραγωνάκια της σκακιέρας, με την προφανή σειρά.

Αρχεία Εξόδου (countways.out):

Η έξοδος πρέπει να περιέχει μία γραμμή με ακριβώς έναν ακέραιο αριθμό: το πλήθος των τρόπων που μπορούμε να φτάσουμε από το πάνω-αριστερά τετραγωνάκι στο κάτω-δεξιά. Επειδή ο αριθμός αυτός μπορεί να είναι πολύ μεγάλος, ζητείται να τυπώσετε το υπόλοιπο της ακέραιας διαίρεσής του (modulo) με τον αριθμό \(10^9+7\).

Παράδειγμα Αρχείου Εισόδου - Εξόδου:

countways.in countways.out
5 5
17 23 26 30 31
21 10 19 32 32
24 24 54 34 33
25 32 37 38 35
26 27 80 40 42
6

Εξήγηση παραδείγματος: Υπάρχουν έξι τρόποι για να πάμε από το πάνω-αριστερά τετραγωνάκι (\(17\)) στο κάτω-δεξιά (\(42\)), κινούμενοι πάντα σε τετραγωνάκια με προοδευτικά μεγαλύτερους αριθμούς. Ένας τρόπος είναι κατά μήκος της πρώτης γραμμής και μετά της τελευταίας στήλης: \(17 \to 23 \to 26 \to 30 \to 31 \to 32 \to 33 \to 35 \to 42\). Ένας άλλος τρόπος είναι αυτός: \(17 \to 21 \to 24 \to 25 \to 26 \to 27 \to 32 \to 37 \to 38\to 40 \to 42\). Υπάρχουν άλλοι τέσσερις τρόποι που θα πρέπει να ψάξετε να τους βρείτε εσείς.

Περιορισμοί:

  • \(1 \leq N \leq 1.000\).
  • \(1 \leq M \leq 1.000\).
  • Οι αριθμοί στα τετράγωνα της σκακιέρας δε θα υπερβαίνουν το \(1.000.000.000\).
  • Όριο χρόνου εκτέλεσης: \(1\) sec.
  • Όριο μνήμης: \(128\) MB.

Subtasks

  • Σε testcases που θα αντιστοιχούν στο 30% της βαθμολογίας, θα είναι \(N \leq 10\) και \(M \leq 10\).
  • Σε testcases που θα αντιστοιχούν στο 50% της βαθμολογίας, θα είναι \(N \leq 100\) και \(M \leq 100\).