Problem Set 1

  1. What is the rank of matrix A?

Transform matrix A into its upper matrix form and observe the number of non-zero rows (the rank).

#Initialize matrix A
A <- matrix(data = c(1,2,3,4,-1,0,1,3,0,1,-2,1,5,4,-2,-3), nrow = 4, ncol = 4, byrow = TRUE)
A
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]   -1    0    1    3
## [3,]    0    1   -2    1
## [4,]    5    4   -2   -3
#Row reduction pt1. 0s beneath 1st pivot: R2 + R1, R4 - 5R1
A <- matrix(data = c(1,2,3,4,0,2,4,7,0,1,-2,1,0,-6,-17,-23), nrow = 4, ncol = 4, byrow = TRUE)
A
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    0    2    4    7
## [3,]    0    1   -2    1
## [4,]    0   -6  -17  -23
#Row reduction pt2. 0s beneath 2nd pivot: swap R3 & R2, R3 - 2R2, R4 + 6R2
A <- matrix(data = c(1,2,3,4,0,2,4,7,0,0,8,5,0,0,-29,-17), nrow = 4, ncol = 4, byrow = TRUE)
A
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    0    2    4    7
## [3,]    0    0    8    5
## [4,]    0    0  -29  -17
#Row reduction pt3. 0s beneath 3rd pivot: R3 / 8, R4 + 29R3 
A <- matrix(data = c(1,2,3,4,0,2,4,7,0,0,1,5/8,0,0,0,145/8), nrow = 4, ncol = 4, byrow = TRUE)
A
##      [,1] [,2] [,3]   [,4]
## [1,]    1    2    3  4.000
## [2,]    0    2    4  7.000
## [3,]    0    0    1  0.625
## [4,]    0    0    0 18.125

The rank of matrix A is 4.

We confirm this by using R’s matrix rank function:

A <- matrix(data = c(1,2,3,4,-1,0,1,3,0,1,-2,1,5,4,-2,-3), nrow = 4, ncol = 4, byrow = TRUE)
matrix.rank(A)
## [1] 4
  1. Given an mxn matrix where m > n, what can be the maximum rank? The minimum rank, assuming that the matrix is non-zero?

The rank of a matrix is the number of non-zero rows in row echelon form. Given a non-zero mxn matrix where m > n, the maximum rank is n because the maximum rank would be the minimum between m and n and we know that m > n and the minimum rank is 1 because a non-zero matrix would mean that at least one element is non-zero and at its absolute minimum form we would end up with one element (or row) of non-zero value and thus a rank of 1.

  1. What is the rank of matrix B?

Transform matrix B into its upper matrix form and observe the number of non-zero rows (the rank).

#Initialize matrix B
B <- matrix(data = c(1,2,1,3,6,3,2,4,2), nrow = 3, ncol = 3, byrow = TRUE)
B
##      [,1] [,2] [,3]
## [1,]    1    2    1
## [2,]    3    6    3
## [3,]    2    4    2
#Row reduction pt1. 0s beneath 1st pivot: R2 - 3R1, R3 - 2R1
B <- matrix(data = c(1,2,1,0,0,0,0,0,0), nrow = 3, ncol = 3, byrow = TRUE)
B
##      [,1] [,2] [,3]
## [1,]    1    2    1
## [2,]    0    0    0
## [3,]    0    0    0

The rank of matrix B is 1.

The first set of row operations created 2 rows of zeros since R2 and R3 were merely multiples of R1 … we confirm our finding by using R’s matrix rank function:

B <- matrix(data = c(1,2,1,3,6,3,2,4,2), nrow = 3, ncol = 3, byrow = TRUE)
matrix.rank(B)
## [1] 1

Problem Set 2

Compute the eigenvalues and eigenvectors of matrix A. Write out the characteristic polynomial and show your work.

We can make use of the following to find the associated eigenvalue and eigenvector of A:

  • Av= λv. A represents the matrix, v the eigenvector, and λ the eigenvalue associated with A.
  • det(λI-A)=0. Useful for finding eigenvalues of A.
  • (λI-A)v=0. Useful for finding eigenvectors associated with the eigenvalue (ie. λ_1).

Initialize matrices and solve for eigenvalues via det(λI-A)=0.

A: \[ \begin{matrix} 1 & 2 & 3 \\ 0 & 4 & 5 \\ 0 & 0 & 6 \end{matrix} \]

λI: \[ \begin{matrix} λ & 0 & 0 \\ 0 & λ & 0 \\ 0 & 0 & λ \end{matrix} \]

det(λI-A): \[ \begin{matrix} λ-1 & -2 & -3 \\ 0 & λ-4 & -5 \\ 0 & 0 & λ-6 \end{matrix} \]

(λ-1)[(λ-4)(λ-6) – (0)(-5)] – (-2) [(0)(λ-6) – (0)(-5)] + (-3)[(0)(0) – (0)(λ-4)]

(λ-1)[(λ-4)(λ-6)] + 2[0] – 3[0]

(λ-1)(λ-4)(λ-6) = 0

Characteristics polynomial: λ^3 - 11λ^2 + 34λ - 24 = 0

Eigenvalues: λ1=1, λ2=4, λ3=6.

At this point we use (λI-A)v=0 to solve for associated eigenvectors.

We plug eigenvalues λ1=1, λ2=4, λ3=6 into the matrix below, multiply by vector v [v1 v2 v3], and set the result equal to 0 to find our eigenvectors.

\[ \begin{matrix} λ-1 & -2 & -3 \\ 0 & λ-4 & -5 \\ 0 & 0 & λ-6 \end{matrix} \]

Substituting λ1=1, we get:

\[ \left(\begin{array}{cc} 0 & -2 & -3\\ 0 & -3 & -5 \\ 0 & 0 & -5 \end{array}\right) \left(\begin{array}{cc} v1\\ v2\\ v3 \end{array}\right) \] v1 = anything, v2 = -(5/3)v3, v3 = 0.

For eigenvalue λ1=1, the associated eigenvector is v = [1,0,0].

Substituting λ2=4, we get:

\[ \left(\begin{array}{cc} 3 & -2 & -3\\ 0 & 0 & -5 \\ 0 & 0 & -2 \end{array}\right) \left(\begin{array}{cc} v1\\ v2\\ v3 \end{array}\right) \] v1 = (2/3)v2+ v3 and v3=0.

For eigenvalue λ2=4, the associated eigenvector is v = [2/3,1,0].

Substituting λ3=6, we get:

\[ \left(\begin{array}{cc} 5 & -2 & -3\\ 0 & 2 & -5 \\ 0 & 0 & 0 \end{array}\right) \left(\begin{array}{cc} v1\\ v2\\ v3 \end{array}\right) \] v1 = (2/5)v2+ (3/5)v3 and v2=(5/2)v3 …

Thus leading to our plugging v2 into v1 = (2/5)(5/2)v3 + (3/5)v3 = (8/5)v3

For eigenvalue λ3=6, the associated eigenvector is v = [8/5, 5/2, 1]

To summarize, the eigenvectors for matrix A are:

\[ \left(\begin{array}{cc} 1\\ 0\\ 0 \end{array}\right) \left(\begin{array}{cc} 2/3\\ 1\\ 0 \end{array}\right) \left(\begin{array}{cc} 8/5\\ 5/2\\ 1 \end{array}\right) \]

LS0tDQp0aXRsZTogIkRBVEEgNjA1IEFzc2lnbm1lbnQgMyINCmF1dGhvcjogIk1hZ251cyBTa29uYmVyZyINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogDQogIG9wZW5pbnRybzo6bGFiX3JlcG9ydDogZGVmYXVsdA0KICBodG1sX2RvY3VtZW50Og0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KYGBge3IgbGlicmFyaWVzLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShtYXRyaXhjYWxjKQ0KYGBgDQoNCiMjIyBQcm9ibGVtIFNldCAxICANCg0KPHN0eWxlPg0KZGl2LmJsdWUgeyBiYWNrZ3JvdW5kLWNvbG9yOiNlNmYwZmY7IGJvcmRlci1yYWRpdXM6IDVweDsgcGFkZGluZzogMjBweDt9DQo8L3N0eWxlPg0KPGRpdiBjbGFzcyA9ICJibHVlIj4NCg0KKDEpIFdoYXQgaXMgdGhlIHJhbmsgb2YgbWF0cml4IEE/DQoNCjwvZGl2PiBcaGZpbGxcYnJlYWsNCg0KVHJhbnNmb3JtIG1hdHJpeCBBIGludG8gaXRzIHVwcGVyIG1hdHJpeCBmb3JtIGFuZCBvYnNlcnZlIHRoZSBudW1iZXIgb2Ygbm9uLXplcm8gcm93cyAodGhlIHJhbmspLg0KDQpgYGB7cn0NCiNJbml0aWFsaXplIG1hdHJpeCBBDQpBIDwtIG1hdHJpeChkYXRhID0gYygxLDIsMyw0LC0xLDAsMSwzLDAsMSwtMiwxLDUsNCwtMiwtMyksIG5yb3cgPSA0LCBuY29sID0gNCwgYnlyb3cgPSBUUlVFKQ0KQQ0KDQojUm93IHJlZHVjdGlvbiBwdDEuIDBzIGJlbmVhdGggMXN0IHBpdm90OiBSMiArIFIxLCBSNCAtIDVSMQ0KQSA8LSBtYXRyaXgoZGF0YSA9IGMoMSwyLDMsNCwwLDIsNCw3LDAsMSwtMiwxLDAsLTYsLTE3LC0yMyksIG5yb3cgPSA0LCBuY29sID0gNCwgYnlyb3cgPSBUUlVFKQ0KQQ0KDQojUm93IHJlZHVjdGlvbiBwdDIuIDBzIGJlbmVhdGggMm5kIHBpdm90OiBzd2FwIFIzICYgUjIsIFIzIC0gMlIyLCBSNCArIDZSMg0KQSA8LSBtYXRyaXgoZGF0YSA9IGMoMSwyLDMsNCwwLDIsNCw3LDAsMCw4LDUsMCwwLC0yOSwtMTcpLCBucm93ID0gNCwgbmNvbCA9IDQsIGJ5cm93ID0gVFJVRSkNCkENCg0KI1JvdyByZWR1Y3Rpb24gcHQzLiAwcyBiZW5lYXRoIDNyZCBwaXZvdDogUjMgLyA4LCBSNCArIDI5UjMgDQpBIDwtIG1hdHJpeChkYXRhID0gYygxLDIsMyw0LDAsMiw0LDcsMCwwLDEsNS84LDAsMCwwLDE0NS84KSwgbnJvdyA9IDQsIG5jb2wgPSA0LCBieXJvdyA9IFRSVUUpDQpBDQoNCmBgYA0KKipUaGUgcmFuayBvZiBtYXRyaXggQSBpcyA0LioqDQoNCldlIGNvbmZpcm0gdGhpcyBieSB1c2luZyBSJ3MgbWF0cml4IHJhbmsgZnVuY3Rpb246DQoNCmBgYHtyfQ0KQSA8LSBtYXRyaXgoZGF0YSA9IGMoMSwyLDMsNCwtMSwwLDEsMywwLDEsLTIsMSw1LDQsLTIsLTMpLCBucm93ID0gNCwgbmNvbCA9IDQsIGJ5cm93ID0gVFJVRSkNCm1hdHJpeC5yYW5rKEEpDQpgYGANCg0KPHN0eWxlPg0KZGl2LmJsdWUgeyBiYWNrZ3JvdW5kLWNvbG9yOiNlNmYwZmY7IGJvcmRlci1yYWRpdXM6IDVweDsgcGFkZGluZzogMjBweDt9DQo8L3N0eWxlPg0KPGRpdiBjbGFzcyA9ICJibHVlIj4NCg0KKDIpIEdpdmVuIGFuICpteG4qIG1hdHJpeCB3aGVyZSAqbSA+IG4qLCB3aGF0IGNhbiBiZSB0aGUgbWF4aW11bSByYW5rPyBUaGUgbWluaW11bSByYW5rLCBhc3N1bWluZyB0aGF0IHRoZSBtYXRyaXggaXMgbm9uLXplcm8/DQoNCjwvZGl2PiBcaGZpbGxcYnJlYWsNCg0KVGhlIHJhbmsgb2YgYSBtYXRyaXggaXMgdGhlIG51bWJlciBvZiBub24temVybyByb3dzIGluIHJvdyBlY2hlbG9uIGZvcm0uIEdpdmVuIGEgbm9uLXplcm8gKm14biogbWF0cml4IHdoZXJlICptID4gbiosIHRoZSAqKm1heGltdW0gcmFuayBpcyBuKiogYmVjYXVzZSB0aGUgbWF4aW11bSByYW5rIHdvdWxkIGJlIHRoZSBtaW5pbXVtIGJldHdlZW4gbSBhbmQgbiBhbmQgd2Uga25vdyB0aGF0IG0gPiBuIGFuZCB0aGUgKiptaW5pbXVtIHJhbmsgaXMgMSoqIGJlY2F1c2UgYSBub24temVybyBtYXRyaXggd291bGQgbWVhbiB0aGF0IGF0IGxlYXN0IG9uZSBlbGVtZW50IGlzIG5vbi16ZXJvIGFuZCBhdCBpdHMgYWJzb2x1dGUgbWluaW11bSBmb3JtIHdlIHdvdWxkIGVuZCB1cCB3aXRoIG9uZSBlbGVtZW50IChvciByb3cpIG9mIG5vbi16ZXJvIHZhbHVlIGFuZCB0aHVzIGEgcmFuayBvZiAxLg0KDQoNCjxzdHlsZT4NCmRpdi5ibHVlIHsgYmFja2dyb3VuZC1jb2xvcjojZTZmMGZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDIwcHg7fQ0KPC9zdHlsZT4NCjxkaXYgY2xhc3MgPSAiYmx1ZSI+DQoNCigzKSBXaGF0IGlzIHRoZSByYW5rIG9mIG1hdHJpeCBCPw0KDQo8L2Rpdj4gXGhmaWxsXGJyZWFrDQoNClRyYW5zZm9ybSBtYXRyaXggQiBpbnRvIGl0cyB1cHBlciBtYXRyaXggZm9ybSBhbmQgb2JzZXJ2ZSB0aGUgbnVtYmVyIG9mIG5vbi16ZXJvIHJvd3MgKHRoZSByYW5rKS4NCmBgYHtyfQ0KI0luaXRpYWxpemUgbWF0cml4IEINCkIgPC0gbWF0cml4KGRhdGEgPSBjKDEsMiwxLDMsNiwzLDIsNCwyKSwgbnJvdyA9IDMsIG5jb2wgPSAzLCBieXJvdyA9IFRSVUUpDQpCDQoNCiNSb3cgcmVkdWN0aW9uIHB0MS4gMHMgYmVuZWF0aCAxc3QgcGl2b3Q6IFIyIC0gM1IxLCBSMyAtIDJSMQ0KQiA8LSBtYXRyaXgoZGF0YSA9IGMoMSwyLDEsMCwwLDAsMCwwLDApLCBucm93ID0gMywgbmNvbCA9IDMsIGJ5cm93ID0gVFJVRSkNCkINCmBgYA0KDQoqKlRoZSByYW5rIG9mIG1hdHJpeCBCIGlzIDEuKioNCg0KVGhlIGZpcnN0IHNldCBvZiByb3cgb3BlcmF0aW9ucyBjcmVhdGVkIDIgcm93cyBvZiB6ZXJvcyBzaW5jZSBSMiBhbmQgUjMgd2VyZSBtZXJlbHkgbXVsdGlwbGVzIG9mIFIxIC4uLiB3ZSBjb25maXJtIG91ciBmaW5kaW5nIGJ5IHVzaW5nIFIncyBtYXRyaXggcmFuayBmdW5jdGlvbjoNCg0KYGBge3J9DQpCIDwtIG1hdHJpeChkYXRhID0gYygxLDIsMSwzLDYsMywyLDQsMiksIG5yb3cgPSAzLCBuY29sID0gMywgYnlyb3cgPSBUUlVFKQ0KbWF0cml4LnJhbmsoQikNCmBgYA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpcY2xlYXJwYWdlDQoNCiMjIyBQcm9ibGVtIFNldCAyDQoNCjxzdHlsZT4NCmRpdi5ibHVlIHsgYmFja2dyb3VuZC1jb2xvcjojZTZmMGZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDIwcHg7fQ0KPC9zdHlsZT4NCjxkaXYgY2xhc3MgPSAiYmx1ZSI+DQoNCkNvbXB1dGUgdGhlIGVpZ2VudmFsdWVzIGFuZCBlaWdlbnZlY3RvcnMgb2YgbWF0cml4IEEuIFdyaXRlIG91dCB0aGUgY2hhcmFjdGVyaXN0aWMgcG9seW5vbWlhbCBhbmQgc2hvdyB5b3VyIHdvcmsuDQoNCjwvZGl2PiBcaGZpbGxcYnJlYWsNCg0KV2UgY2FuIG1ha2UgdXNlIG9mIHRoZSBmb2xsb3dpbmcgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBlaWdlbnZhbHVlIGFuZCBlaWdlbnZlY3RvciBvZiBBOiANCg0KKiAqKkF2PSDOu3YuKiogQSByZXByZXNlbnRzIHRoZSBtYXRyaXgsIHYgdGhlIGVpZ2VudmVjdG9yLCBhbmQgzrsgdGhlIGVpZ2VudmFsdWUgYXNzb2NpYXRlZCB3aXRoIEEuDQoqICoqZGV0KM67SS1BKT0wLioqIFVzZWZ1bCBmb3IgZmluZGluZyBlaWdlbnZhbHVlcyBvZiBBLg0KKiAqKijOu0ktQSl2PTAuKiogVXNlZnVsIGZvciBmaW5kaW5nIGVpZ2VudmVjdG9ycyBhc3NvY2lhdGVkIHdpdGggdGhlIGVpZ2VudmFsdWUgKGllLiDOu18xKS4NCg0KSW5pdGlhbGl6ZSBtYXRyaWNlcyBhbmQgc29sdmUgZm9yIGVpZ2VudmFsdWVzIHZpYSAqKmRldCjOu0ktQSk9MCoqLg0KDQoqKkE6KioNClxbDQogXGJlZ2lue21hdHJpeH0NCiAgMSAmIDIgJiAzIFxcDQogIDAgJiA0ICYgNSBcXA0KICAwICYgMCAmIDYNCiBcZW5ke21hdHJpeH0NClxdDQoNCioqzrtJOioqDQpcWw0KIFxiZWdpbnttYXRyaXh9DQogIM67ICYgMCAmIDAgXFwNCiAgMCAmIM67ICYgMCBcXA0KICAwICYgMCAmIM67DQogXGVuZHttYXRyaXh9DQpcXQ0KDQoqKmRldCjOu0ktQSk6KioNClxbDQogXGJlZ2lue21hdHJpeH0NCiAgzrstMSAmIC0yICYgLTMgXFwNCiAgMCAmIM67LTQgJiAtNSBcXA0KICAwICYgMCAmIM67LTYNCiBcZW5ke21hdHJpeH0NClxdDQoNCijOuy0xKVsozrstNCkozrstNikg4oCTICgwKSgtNSldIOKAkyAoLTIpIFsoMCkozrstNikg4oCTICgwKSgtNSldICsgKC0zKVsoMCkoMCkg4oCTICgwKSjOuy00KV0NCg0KKM67LTEpWyjOuy00KSjOuy02KV0gKyAyWzBdIOKAkyAzWzBdDQoNCijOuy0xKSjOuy00KSjOuy02KSA9IDANCg0KKipDaGFyYWN0ZXJpc3RpY3MgcG9seW5vbWlhbDogzrteMyAtIDExzrteMiArIDM0zrsgLSAyNCA9IDAqKiANCg0KKipFaWdlbnZhbHVlczogzrsxPTEsIM67Mj00LCDOuzM9Ni4qKg0KDQpBdCB0aGlzIHBvaW50IHdlIHVzZSAqKijOu0ktQSl2PTAqKiB0byBzb2x2ZSBmb3IgYXNzb2NpYXRlZCBlaWdlbnZlY3RvcnMuDQoNCldlIHBsdWcgZWlnZW52YWx1ZXMgzrsxPTEsIM67Mj00LCDOuzM9NiBpbnRvIHRoZSBtYXRyaXggYmVsb3csIG11bHRpcGx5IGJ5IHZlY3RvciB2IFt2MSB2MiB2M10sIGFuZCBzZXQgdGhlIHJlc3VsdCBlcXVhbCB0byAwIHRvIGZpbmQgb3VyIGVpZ2VudmVjdG9ycy4NCg0KXFsNCiBcYmVnaW57bWF0cml4fQ0KICDOuy0xICYgLTIgJiAtMyBcXA0KICAwICYgzrstNCAmIC01IFxcDQogIDAgJiAwICYgzrstNg0KIFxlbmR7bWF0cml4fQ0KXF0NCg0KU3Vic3RpdHV0aW5nICoqzrsxPTEqKiwgd2UgZ2V0OiANCg0KJCQNClxsZWZ0KFxiZWdpbnthcnJheX17Y2N9IA0KMCAmIC0yICYgLTNcXA0KMCAmIC0zICYgLTUgXFwNCjAgJiAwICYgLTUNClxlbmR7YXJyYXl9XHJpZ2h0KQ0KXGxlZnQoXGJlZ2lue2FycmF5fXtjY30gDQp2MVxcIA0KdjJcXA0KdjMNClxlbmR7YXJyYXl9XHJpZ2h0KQ0KJCQgDQp2MSA9IGFueXRoaW5nLCB2MiA9IC0oNS8zKXYzLCB2MyA9IDAuDQoNCkZvciBlaWdlbnZhbHVlIM67MT0xLCB0aGUgYXNzb2NpYXRlZCBlaWdlbnZlY3RvciBpcyB2ID0gWzEsMCwwXS4NCg0KDQpTdWJzdGl0dXRpbmcgKirOuzI9NCoqLCB3ZSBnZXQ6IA0KDQokJA0KXGxlZnQoXGJlZ2lue2FycmF5fXtjY30gDQozICYgLTIgJiAtM1xcDQowICYgMCAmIC01IFxcDQowICYgMCAmIC0yDQpcZW5ke2FycmF5fVxyaWdodCkNClxsZWZ0KFxiZWdpbnthcnJheX17Y2N9IA0KdjFcXCANCnYyXFwNCnYzDQpcZW5ke2FycmF5fVxyaWdodCkNCiQkIA0KdjEgPSAoMi8zKXYyKyB2MyBhbmQgdjM9MC4NCg0KRm9yIGVpZ2VudmFsdWUgzrsyPTQsIHRoZSBhc3NvY2lhdGVkIGVpZ2VudmVjdG9yIGlzIHYgPSBbMi8zLDEsMF0uDQoNCg0KU3Vic3RpdHV0aW5nICoqzrszPTYqKiwgd2UgZ2V0OiANCg0KJCQNClxsZWZ0KFxiZWdpbnthcnJheX17Y2N9IA0KNSAmIC0yICYgLTNcXA0KMCAmIDIgJiAtNSBcXA0KMCAmIDAgJiAwDQpcZW5ke2FycmF5fVxyaWdodCkNClxsZWZ0KFxiZWdpbnthcnJheX17Y2N9IA0KdjFcXCANCnYyXFwNCnYzDQpcZW5ke2FycmF5fVxyaWdodCkNCiQkIA0KdjEgPSAoMi81KXYyKyAoMy81KXYzIGFuZCB2Mj0oNS8yKXYzIC4uLg0KDQpUaHVzIGxlYWRpbmcgdG8gb3VyIHBsdWdnaW5nIHYyIGludG8gdjEgPSAoMi81KSg1LzIpdjMgKyAoMy81KXYzID0gKDgvNSl2Mw0KDQpGb3IgZWlnZW52YWx1ZSDOuzM9NiwgdGhlIGFzc29jaWF0ZWQgZWlnZW52ZWN0b3IgaXMgdiA9IFs4LzUsIDUvMiwgMV0NCg0KDQpUbyBzdW1tYXJpemUsIHRoZSBlaWdlbnZlY3RvcnMgZm9yIG1hdHJpeCBBIGFyZToNCg0KJCQNClxsZWZ0KFxiZWdpbnthcnJheX17Y2N9IA0KMVxcDQowXFwNCjANClxlbmR7YXJyYXl9XHJpZ2h0KQ0KXGxlZnQoXGJlZ2lue2FycmF5fXtjY30gDQoyLzNcXCANCjFcXA0KMA0KXGVuZHthcnJheX1ccmlnaHQpDQpcbGVmdChcYmVnaW57YXJyYXl9e2NjfSANCjgvNVxcIA0KNS8yXFwNCjENClxlbmR7YXJyYXl9XHJpZ2h0KQ0KJCQgDQoNCg0KDQo=