#include <bits/stdc++.h>
using namespace std;
bool isPrimeSqrt(int N) {
for(int i = 2; i*i <= N; i++)
if(N%i == 0)
return false;
return true;
}
bool isPrime[1000000];
int primes[1000000], primecount = 0;
vector<int> vprimes;
void sieve(int N) {
// initialization = ngeset awalnya by default semua prima
memset(isPrime, true, sizeof(isPrime));
isPrime[0] = isPrime[1] = false;
// sieve = penyaringan semua komposit, per faktor prima
for(int i = 2; i*i <= N; i++)
// kalo si faktor prima masi prima
if(isPrime[i])
// coret semua kelipatan i
for(int j = i*i; j <= N; j+=i)
isPrime[j] = false;
// memasukkan bil2 prima ke array
// 0 1 2 3 4 5 6 7 8 9 10 11 12 ...
// F F T T F T F T F F F T F ...
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// 0 1 2 3 4 5 ...
// 2 3 5 7 11 13 ...
for(int i = 2; i <= N; i++)
if(isPrime[i]) {
primes[primecount++] = i;
vprimes.push_back(i);
}
return;
}
int fpb(int a, int b) {
if(b == 0) return a;
return fpb(b, a%b);
}
int kpk(int a, int b) {
return a/fpb(a,b)*b;
}
int pascal(int a, int b) {
if(b == 0 || b == a) return 1;
return pascal(a-1, b)+pascal(a-1, b-1);
}
int main () {
return 0;
}
/*
Linier -> O(N)
N = 1 -> rt = 1ms
N = 10 -> rt = 10ms
N = 100 -> rt = 100ms
O(sqrt(N))
N = 1 -> rt = 1ms
N = 100 -> rt = 10ms
O(1)
N = 1 -> rt = 1ms
N = 100 -> rt = 1ms
O(N^2) > O(N log N) > O(N) > O(sqrt(N)) > O(log N) > O(1)
memset = memory set
contoh: int = 32 bit = 4 byte
_ _ _ _
0 -> 00000000
-1 -> 11111111
1 -> 00000001
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIGlzUHJpbWVTcXJ0KGludCBOKSB7Cglmb3IoaW50IGkgPSAyOyBpKmkgPD0gTjsgaSsrKQoJCWlmKE4laSA9PSAwKQoJCQlyZXR1cm4gZmFsc2U7CglyZXR1cm4gdHJ1ZTsKfQoKYm9vbCBpc1ByaW1lWzEwMDAwMDBdOwppbnQgcHJpbWVzWzEwMDAwMDBdLCBwcmltZWNvdW50ID0gMDsKdmVjdG9yPGludD4gdnByaW1lczsKCnZvaWQgc2lldmUoaW50IE4pIHsKCS8vIGluaXRpYWxpemF0aW9uID0gbmdlc2V0IGF3YWxueWEgYnkgZGVmYXVsdCBzZW11YSBwcmltYQoJbWVtc2V0KGlzUHJpbWUsIHRydWUsIHNpemVvZihpc1ByaW1lKSk7Cglpc1ByaW1lWzBdID0gaXNQcmltZVsxXSA9IGZhbHNlOwoJLy8gc2lldmUgPSBwZW55YXJpbmdhbiBzZW11YSBrb21wb3NpdCwgcGVyIGZha3RvciBwcmltYQoJZm9yKGludCBpID0gMjsgaSppIDw9IE47IGkrKykKCQkvLyBrYWxvIHNpIGZha3RvciBwcmltYSBtYXNpIHByaW1hCgkJaWYoaXNQcmltZVtpXSkKCQkJLy8gY29yZXQgc2VtdWEga2VsaXBhdGFuIGkKCQkJZm9yKGludCBqID0gaSppOyBqIDw9IE47IGorPWkpCgkJCQlpc1ByaW1lW2pdID0gZmFsc2U7CgkvLyBtZW1hc3Vra2FuIGJpbDIgcHJpbWEga2UgYXJyYXkKCS8vIDAgMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgLi4uCgkvLyBGIEYgVCBUIEYgVCBGIFQgRiBGIEYgIFQgIEYgIC4uLgoJLy8gdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYKCS8vIDAgMSAyIDMgNCAgNSAgLi4uCgkvLyAyIDMgNSA3IDExIDEzIC4uLgoJZm9yKGludCBpID0gMjsgaSA8PSBOOyBpKyspCgkJaWYoaXNQcmltZVtpXSkgewoJCQlwcmltZXNbcHJpbWVjb3VudCsrXSA9IGk7CgkJCXZwcmltZXMucHVzaF9iYWNrKGkpOwoJCX0KCXJldHVybjsKfQoKaW50IGZwYihpbnQgYSwgaW50IGIpIHsKCWlmKGIgPT0gMCkgcmV0dXJuIGE7CglyZXR1cm4gZnBiKGIsIGElYik7Cn0KCmludCBrcGsoaW50IGEsIGludCBiKSB7CglyZXR1cm4gYS9mcGIoYSxiKSpiOwp9CgppbnQgcGFzY2FsKGludCBhLCBpbnQgYikgewoJaWYoYiA9PSAwIHx8IGIgPT0gYSkgcmV0dXJuIDE7CglyZXR1cm4gcGFzY2FsKGEtMSwgYikrcGFzY2FsKGEtMSwgYi0xKTsKfQoKaW50IG1haW4gKCkgewoJCglyZXR1cm4gMDsKfQoKLyoKTGluaWVyIC0+IE8oTikKTiA9IDEgLT4gcnQgPSAxbXMKTiA9IDEwIC0+IHJ0ID0gMTBtcwpOID0gMTAwIC0+IHJ0ID0gMTAwbXMKCk8oc3FydChOKSkKTiA9IDEgLT4gcnQgPSAxbXMKTiA9IDEwMCAtPiBydCA9IDEwbXMKCk8oMSkKTiA9IDEgLT4gcnQgPSAxbXMKTiA9IDEwMCAtPiBydCA9IDFtcwoKTyhOXjIpID4gTyhOIGxvZyBOKSA+IE8oTikgPiBPKHNxcnQoTikpID4gTyhsb2cgTikgPiBPKDEpCgptZW1zZXQgPSBtZW1vcnkgc2V0Cgpjb250b2g6IGludCA9IDMyIGJpdCA9IDQgYnl0ZQpfIF8gXyBfCiAwIC0+IDAwMDAwMDAwCi0xIC0+IDExMTExMTExCiAxIC0+IDAwMDAwMDAxCgoqLwoK