Điểm, Đường thẳng và Những Bức tranh

Đề bài

Mô tả

Trên mặt phẳng toạ độ cho n điểm phân biệt có toạ độ nguyên. Với mỗi điểm, bạn được chọn đúng một trong ba khả năng: vẽ đường thẳng đứng đi qua điểm đó, vẽ đường nằm ngang đi qua điểm đó, hoặc không vẽ gì cả.

Sau khi xử lý xong tất cả n điểm, ta thu được một bức tranh là tập hợp các đường thẳng đã vẽ. Nhiều đường thẳng trùng nhau chỉ được tính là một đường. Hai bức tranh được coi là khác nhau nếu tập hợp các đường thẳng của chúng khác nhau.

Hãy đếm số bức tranh phân biệt có thể tạo ra, kết quả lấy theo modulo 109+7.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên n — số lượng điểm.
  • n dòng tiếp theo, dòng thứ i chứa hai số nguyên xi và yi — toạ độ của điểm thứ i.

Dữ liệu bảo đảm tất cả các điểm đều phân biệt.

Dữ liệu ra

In ra một số nguyên duy nhất là số bức tranh phân biệt, lấy theo modulo 109+7.

Ràng buộc

  • 1≤n≤105
  • −109≤xi,yi≤109

Ví dụ

Input Output Giải thích
2
-1 -1
0 1
9 Hai điểm không dùng chung đường thẳng nào, nên chúng độc lập với nhau. Mỗi điểm có 3 lựa chọn và mọi cách chọn đều cho ra một bức tranh khác nhau, tổng cộng 3×3=9.
4
1 1
1 2
2 1
2 2
16 Bốn điểm sinh ra 2 đường thẳng đứng (x=1, x=2) và 2 đường nằm ngang (y=1, y=2). Mọi tập con trong 4 đường này đều vẽ được, kể cả tập đủ cả 4 đường (vẽ được theo hai cách khác nhau nhưng chỉ tính là một bức tranh), nên đáp án là 24=16.
1
0 0
3 Một điểm cho ba bức tranh: không có đường nào, chỉ có x=0, chỉ có y=0.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0