#include <iostream> #include <cmath> using namespace std; const long long prime = 1000000007; long long myPow(int x, int n) { long long out=1; for(int i = 0; i < n; i++) { out=(out*x)%prime; } return out; } int main() { long long a,b,k,c, out = 0; cin>>a>>b>>k>>c; if (a==b && a==c) out=k*2; else if(a==c || b==c) { out = (myPow(2, k-1)*k)%prime; } cout<<out<<endl; return 0; } /* #include <iostream> #include <cmath> #define skocNaRiadokPyco goto #define akTotoPlatiTakSpravHento if #define zvacsiCiselkoOJedna ++ #define akSaRovna == #define vratSpatSpravnyVysledokTedaDufamZeSpravnyAkNieTakToNebudeFungovat return #define vytlacNaToCierneOkienkoCoSaOtvaraKedToSpustim cout #define dakujem endl #define takeNormalneCislo int #define dlhsieCisloAkoTakeToNormalneCislo long #define konst const #define nacitajToCoJozoNapiseDoCiernehoOkienka cin using namespace std; konst dlhsieCisloAkoTakeToNormalneCislo dlhsieCisloAkoTakeToNormalneCislo prime = 1000000007; dlhsieCisloAkoTakeToNormalneCislo dlhsieCisloAkoTakeToNormalneCislo myPow(takeNormalneCislo x, takeNormalneCislo n) { takeNormalneCislo i = 0; dlhsieCisloAkoTakeToNormalneCislo dlhsieCisloAkoTakeToNormalneCislo out=1; zaciatok: out=(out*x)%prime; i zvacsiCiselkoOJedna; akTotoPlatiTakSpravHento(i<n) skocNaRiadokPyco zaciatok; vratSpatSpravnyVysledokTedaDufamZeSpravnyAkNieTakToNebudeFungovat out; } takeNormalneCislo main() { dlhsieCisloAkoTakeToNormalneCislo dlhsieCisloAkoTakeToNormalneCislo a,b,k,c, out = 0; nacitajToCoJozoNapiseDoCiernehoOkienka>>a>>b>>k>>c; akTotoPlatiTakSpravHento(a akSaRovna c || b akSaRovna c) { out = (myPow(2, k-1)*k)%prime; } akTotoPlatiTakSpravHento(a akSaRovna b && a akSaRovna c) out=k*2; vytlacNaToCierneOkienkoCoSaOtvaraKedToSpustim<<out<<dakujem; vratSpatSpravnyVysledokTedaDufamZeSpravnyAkNieTakToNebudeFungovat 0; } */