package Ġnumeric Ċ Ċ import Ġjava . math . BigInteger Ċ Ċ // ĠFast ĠFour ier Ġtransform Ċ // Ġhttps :// cp - algorithms . com / algebra / fft . html Ċ // Ġhttps :// drive . google . com / file / d / 1 B 9 B If AT n I _ q L 6 r Yi E 5 h Y 9 bh 2 0 SM Vm HZ 7 / view Ċ object ĠFFT Ġ{ ĊĠĠĠ Ġ// Ġpre condition : Ġa . length Ġis Ġa Ġpower Ġof Ġ 2 Ġand Ġa . length Ġ== Ġb . length ĊĠĠĠ Ġfun Ġfft ( a : ĠDouble Array , Ġb : ĠDouble Array , Ġinverse : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġa . size ĊĠĠĠĠĠĠĠ Ġval Ġshift : ĠInt Ġ= Ġ 3 2 Ġ- ĠInteger . numberOf Trailing Z eros ( n ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj : ĠInt Ġ= ĠInteger . reverse ( i Ġshl Ġshift ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp Ġ= Ġa [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ] Ġ= Ġa [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ j ] Ġ= Ġtemp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Ġ= Ġb [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb [ i ] Ġ= Ġb [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb [ j ] Ġ= Ġtemp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġlen Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( len Ġ<= Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Len Ġ= Ġlen Ġshr Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcs Ġ= ĠDouble Array ( half Len ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn Ġ= ĠDouble Array ( half Len ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġhalf Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle : ĠDouble Ġ= Ġ 2 Ġ* ĠMath . PI Ġ* Ġi Ġ/ Ġlen Ġ* Ġif Ġ( inverse ) Ġ- 1 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcs [ i ] Ġ= ĠMath . cos ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn [ i ] Ġ= ĠMath . sin ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġhalf Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu A Ġ= Ġa [ i Ġ+ Ġj ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu B Ġ= Ġb [ i Ġ+ Ġj ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv A Ġ= Ġa [ i Ġ+ Ġj Ġ+ Ġhalf Len ] Ġ* Ġcs [ j ] Ġ- Ġb [ i Ġ+ Ġj Ġ+ Ġhalf Len ] Ġ* Ġsn [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv B Ġ= Ġa [ i Ġ+ Ġj Ġ+ Ġhalf Len ] Ġ* Ġsn [ j ] Ġ+ Ġb [ i Ġ+ Ġj Ġ+ Ġhalf Len ] Ġ* Ġcs [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i Ġ+ Ġj ] Ġ= Ġu A Ġ+ Ġv A ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb [ i Ġ+ Ġj ] Ġ= Ġu B Ġ+ Ġv B ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i Ġ+ Ġj Ġ+ Ġhalf Len ] Ġ= Ġu A Ġ- Ġv A ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb [ i Ġ+ Ġj Ġ+ Ġhalf Len ] Ġ= Ġu B Ġ- Ġv B ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġlen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlen Ġ= Ġlen Ġshl Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( inverse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ] Ġ/= Ġn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb [ i ] Ġ/= Ġn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmultiply Big int ( a : ĠInt Array , Ġb : ĠInt Array ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġneed Ġ= Ġa . size Ġ+ Ġb . size ĊĠĠĠĠĠĠĠ Ġval Ġn : ĠInt Ġ= ĠInteger . highest One Bit ( need Ġ- Ġ 1 ) Ġshl Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġp Real Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġval Ġp Imag Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġ// Ġp ( x ) Ġ= Ġa ( x ) Ġ+ Ġi * b ( x ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġa . indices ) Ġp Real [ i ] Ġ= Ġa [ i ]. toDouble () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġb . indices ) Ġp Imag [ i ] Ġ= Ġb [ i ]. toDouble () ĊĠĠĠĠĠĠĠ Ġfft ( p Real , Ġp Imag , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġab Real Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġval Ġab Imag Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġ// Ġa [ w [ k ]] Ġ= Ġ( p [ w [ k ]] Ġ+ Ġconj ( p [ w [ n - k ]])) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ// Ġb [ w [ k ]] Ġ= Ġ( p [ w [ k ]] Ġ- Ġconj ( p [ w [ n - k ]])) Ġ/ Ġ( 2 * i ) ĊĠĠĠĠĠĠĠ Ġ// Ġab [ w [ k ]] Ġ= Ġ( p [ w [ k ]] * p [ w [ k ]] Ġ- Ġconj ( p [ w [ n - k ]] * p [ w [ n - k ]])) Ġ/ Ġ( 4 * i ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj : ĠInt Ġ= Ġn Ġ- Ġi Ġand Ġn Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġab Real [ i ] Ġ= Ġ( p Real [ i ] Ġ* Ġp Imag [ i ] Ġ+ Ġp Real [ j ] Ġ* Ġp Imag [ j ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġab Imag [ i ] Ġ= Ġ( p Real [ j ] Ġ* Ġp Real [ j ] Ġ- Ġp Imag [ j ] Ġ* Ġp Imag [ j ] Ġ- Ġ( p Real [ i ] Ġ* Ġp Real [ i ] Ġ- Ġp Imag [ i ] Ġ* Ġp Imag [ i ])) Ġ/ Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfft ( ab Real , Ġab Imag , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInt Array ( need ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcarry Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġneed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i ] Ġ= Ġ( ab Real [ i ] Ġ+ Ġ 0 . 5 ). toInt () Ġ+ Ġcarry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcarry Ġ= Ġresult [ i ] Ġ/ Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i ] Ġ% = Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmultiply Mod ( a : ĠInt Array , Ġb : ĠInt Array , Ġm : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġneed Ġ= Ġa . size Ġ+ Ġb . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġn : ĠInt Ġ= ĠMath . max ( 1 , ĠInteger . highest One Bit ( need Ġ- Ġ 1 ) Ġshl Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġa Real Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġval Ġa Imag Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġa . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( a [ i ] Ġ% Ġm Ġ+ Ġm ) Ġ% Ġm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa Real [ i ] Ġ= Ġ( x Ġand Ġ( 1 Ġshl Ġ 1 5 ) Ġ- Ġ 1 ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa Imag [ i ] Ġ= Ġ( x Ġshr Ġ 1 5 ). toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfft ( a Real , Ġa Imag , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġb Real Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġval Ġb Imag Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġb . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( b [ i ] Ġ% Ġm Ġ+ Ġm ) Ġ% Ġm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb Real [ i ] Ġ= Ġ( x Ġand Ġ( 1 Ġshl Ġ 1 5 ) Ġ- Ġ 1 ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb Imag [ i ] Ġ= Ġ( x Ġshr Ġ 1 5 ). toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfft ( b Real , Ġb Imag , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġfa Real Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġval Ġfa Imag Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġval Ġfb Real Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġval Ġfb Imag Ġ= ĠDouble Array ( n ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj : ĠInt Ġ= Ġn Ġ- Ġi Ġand Ġn Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa 1 r Ġ= Ġ( a Real [ i ] Ġ+ Ġa Real [ j ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa 1 i Ġ= Ġ( a Imag [ i ] Ġ- Ġa Imag [ j ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa 2 r Ġ= Ġ( a Imag [ i ] Ġ+ Ġa Imag [ j ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa 2 i Ġ= Ġ( a Real [ j ] Ġ- Ġa Real [ i ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb 1 r Ġ= Ġ( b Real [ i ] Ġ+ Ġb Real [ j ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb 1 i Ġ= Ġ( b Imag [ i ] Ġ- Ġb Imag [ j ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb 2 r Ġ= Ġ( b Imag [ i ] Ġ+ Ġb Imag [ j ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb 2 i Ġ= Ġ( b Real [ j ] Ġ- Ġb Real [ i ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfa Real [ i ] Ġ= Ġa 1 r Ġ* Ġb 1 r Ġ- Ġa 1 i Ġ* Ġb 1 i Ġ- Ġa 2 r Ġ* Ġb 2 i Ġ- Ġa 2 i Ġ* Ġb 2 r ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfa Imag [ i ] Ġ= Ġa 1 r Ġ* Ġb 1 i Ġ+ Ġa 1 i Ġ* Ġb 1 r Ġ+ Ġa 2 r Ġ* Ġb 2 r Ġ- Ġa 2 i Ġ* Ġb 2 i ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfb Real [ i ] Ġ= Ġa 1 r Ġ* Ġb 2 r Ġ- Ġa 1 i Ġ* Ġb 2 i Ġ+ Ġa 2 r Ġ* Ġb 1 r Ġ- Ġa 2 i Ġ* Ġb 1 i ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfb Imag [ i ] Ġ= Ġa 1 r Ġ* Ġb 2 i Ġ+ Ġa 1 i Ġ* Ġb 2 r Ġ+ Ġa 2 r Ġ* Ġb 1 i Ġ+ Ġa 2 i Ġ* Ġb 1 r ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfft ( fa Real , Ġfa Imag , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġfft ( fb Real , Ġfb Imag , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠInt Array ( need ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġneed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaa Ġ= Ġ( fa Real [ i ] Ġ+ Ġ 0 . 5 ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbb Ġ= Ġ( fb Real [ i ] Ġ+ Ġ 0 . 5 ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcc Ġ= Ġ( fa Imag [ i ] Ġ+ Ġ 0 . 5 ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [ i ] Ġ= Ġ(( aa Ġ% Ġm Ġ+ Ġ( bb Ġ% Ġm Ġshl Ġ 1 5 ) Ġ+ Ġ( cc Ġ% Ġm Ġshl Ġ 3 0 )) Ġ% Ġm ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġrandom Ġtest ĊĠĠĠ Ġfun Ġmain ( args : ĠArray < String ?> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrnd Ġ= ĠRandom ( 1 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( step Ġin Ġ 0 .. 9 9 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn 1 : ĠInt Ġ= Ġrnd . nextInt ( 1 0 ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs 1 Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠInt Array ( n 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx : ĠInt Ġ= Ġrnd . nextInt ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs 1 Ġ= Ġx Ġ+ Ġs 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ] Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn 2 : ĠInt Ġ= Ġrnd . nextInt ( 1 0 ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs 2 Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠInt Array ( n 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx : ĠInt Ġ= Ġrnd . nextInt ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs 2 Ġ= Ġx Ġ+ Ġs 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb [ i ] Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres 1 Ġ= Ġmultiply Big int ( a , Ġb ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres 2 : ĠInt Array Ġ= ĠFFT _ slow . multiply Big int ( a , Ġb ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( v Ġin Ġres 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Ġ= Ġv Ġ+ Ġs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmul : ĠBigInteger Ġ= ĠBigInteger ( s 1 ). multiply ( BigInteger ( s 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Arrays . equals ( res 1 , Ġres 2 ) Ġ|| Ġ! mul . equals ( BigInteger ( s ))) Ġthrow ĠRuntimeException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSystem . out . println ( Arrays . toString ( multiply Mod ( int ArrayOf ( 1 , Ġ 2 ), Ġint ArrayOf ( 2 , Ġ 1 5 ), Ġ 9 9 1 9 9 2 9 9 3 ))) ĊĠĠĠ Ġ} Ċ } Ċ