From 7eb08912bee0cc5b40e179b5adeb24697d5277ac Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Wed, 21 Apr 2021 16:43:02 +0800 Subject: [PATCH] =?UTF-8?q?91:=E8=A7=A3=E7=A0=81=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/leetcode/editor/cn/DecodeWays.java | 156 +++++++++++ .../java/leetcode/editor/cn/DecodeWays.md | 66 +++++ ...ie-ma-fang-fa-by-leetcode-solution-p8np.md | 263 ++++++++++++++++++ ..._f_{i-1},_quad_其中_~_s_i__neq_0______.png | Bin 0 -> 1369 bytes ...0_~并且~_10cdot_s_i-1_+s_i__leq_26______.png | Bin 0 -> 2457 bytes .../cn/doc/p__s_1_,_s_2_,_cdots,_s_n__.png | Bin 0 -> 876 bytes .../leetcode/editor/cn/doc/p__s_i__neq_0_.png | Bin 0 -> 686 bytes .../editor/cn/doc/p__text{A}_sim_text{I}_.png | Bin 0 -> 461 bytes .../editor/cn/doc/p__text{J}_sim_text{Z}_.png | Bin 0 -> 480 bytes 9 files changed, 485 insertions(+) create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/DecodeWays.java create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/DecodeWays.md create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/doc/jie-ma-fang-fa-by-leetcode-solution-p8np.md create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/doc/p_______f_i_=_f_{i-1},_quad_其中_~_s_i__neq_0______.png create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/doc/p_______f_i_=_f_{i-2},_quad_其中_~_s_i-1__neq_0_~并且~_10cdot_s_i-1_+s_i__leq_26______.png create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/doc/p__s_1_,_s_2_,_cdots,_s_n__.png create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/doc/p__s_i__neq_0_.png create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/doc/p__text{A}_sim_text{I}_.png create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/doc/p__text{J}_sim_text{Z}_.png diff --git a/LeetCode/src/main/java/leetcode/editor/cn/DecodeWays.java b/LeetCode/src/main/java/leetcode/editor/cn/DecodeWays.java new file mode 100644 index 0000000..ee11974 --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/DecodeWays.java @@ -0,0 +1,156 @@ +//一条包含字母 A-Z 的消息通过以下映射进行了 编码 : +// +// +//'A' -> 1 +//'B' -> 2 +//... +//'Z' -> 26 +// +// +// 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为: +// +// +// "AAJF" ,将消息分组为 (1 1 10 6) +// "KJF" ,将消息分组为 (11 10 6) +// +// +// 注意,消息不能分组为 (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6" 和 "06" 在映射中并不等价。 +// +// 给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数 。 +// +// 题目数据保证答案肯定是一个 32 位 的整数。 +// +// +// +// 示例 1: +// +// +//输入:s = "12" +//输出:2 +//解释:它可以解码为 "AB"(1 2)或者 "L"(12)。 +// +// +// 示例 2: +// +// +//输入:s = "226" +//输出:3 +//解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。 +// +// +// 示例 3: +// +// +//输入:s = "0" +//输出:0 +//解释:没有字符映射到以 0 开头的数字。 +//含有 0 的有效映射是 'J' -> "10" 和 'T'-> "20" 。 +//由于没有字符,因此没有有效的方法对此进行解码,因为所有数字都需要映射。 +// +// +// 示例 4: +// +// +//输入:s = "06" +//输出:0 +//解释:"06" 不能映射到 "F" ,因为字符串含有前导 0("6" 和 "06" 在映射中并不等价)。 +// +// +// +// 提示: +// +// +// 1 <= s.length <= 100 +// s 只包含数字,并且可能包含前导零。 +// +// Related Topics 字符串 动态规划 +// 👍 696 👎 0 + +package leetcode.editor.cn; + +//91:解码方法 +public class DecodeWays { + public static void main(String[] args) { + //测试代码 + Solution solution = new DecodeWays().new Solution(); + //2 + System.out.println(solution.numDecodings("12")); + //3 + System.out.println(solution.numDecodings("226")); + //0 + System.out.println(solution.numDecodings("0")); + //0 + System.out.println(solution.numDecodings("06")); + //1 + System.out.println(solution.numDecodings("10")); + //1 + System.out.println(solution.numDecodings("2101")); + //2 + System.out.println(solution.numDecodings("2011")); + //3 + System.out.println(solution.numDecodings("1201234")); + //0 + System.out.println(solution.numDecodings("10011")); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + + public int numDecodings(String s) { +// int length = s.length(); +// if (is) { +// for (int i = 0; i < length - 1; i++) { +// if (s.charAt(i) == '0' && s.charAt(i + 1) == '0') { +// return 0; +// } +// } +// is = false; +// } +// if (s.startsWith("0")) { +// return 0; +// } +// if (length == 1) { +// return 1; +// } +// if (length == 2) { +// if ((s.charAt(0) - '0') * 10 + (s.charAt(1) - '0') <= 26 && s.charAt(1) != '0') { +// return 2; +// } else { +// return 1; +// } +// } +// if (s.charAt(length - 1) == '0') { +// return numDecodings(s.substring(0, length - 2)); +// } +// if (s.charAt(length - 2) == '0') { +// return length > 3 ? numDecodings(s.substring(0, length - 3)) : 1; +// } +// if ((s.charAt(length - 2) - '0') * 10 + (s.charAt(length - 1) - '0') <= 26) { +// return numDecodings(s.substring(0, length - 2)) + numDecodings(s.substring(0, length - 1)); +// } else { +// return numDecodings(s.substring(0, length - 1)); +// } + if (s.startsWith("0")) { + return 0; + } + int length = s.length(); + int[] nums = new int[length + 1]; + nums[0] = 1; + for (int i = 1; i <= length; i++) { + if (i < length && s.charAt(i) == '0' && s.charAt(i - 1) == '0') { + return 0; + } + if (s.charAt(i - 1) != '0') { + nums[i] += nums[i - 1]; + } + if (i > 1 && s.charAt(i - 2) != '0' && ((s.charAt(i - 2) - '0') * 10 + (s.charAt(i - 1) - '0') <= 26)) { + nums[i] += nums[i - 2]; + } + } + return nums[length]; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/LeetCode/src/main/java/leetcode/editor/cn/DecodeWays.md b/LeetCode/src/main/java/leetcode/editor/cn/DecodeWays.md new file mode 100644 index 0000000..3a34632 --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/DecodeWays.md @@ -0,0 +1,66 @@ +

一条包含字母 A-Z 的消息通过以下映射进行了 编码

+ +
+'A' -> 1
+'B' -> 2
+...
+'Z' -> 26
+
+ +

解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:

+ + + +

注意,消息不能分组为  (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6""06" 在映射中并不等价。

+ +

给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数

+ +

题目数据保证答案肯定是一个 32 位 的整数。

+ +

 

+ +

示例 1:

+ +
+输入:s = "12"
+输出:2
+解释:它可以解码为 "AB"(1 2)或者 "L"(12)。
+
+ +

示例 2:

+ +
+输入:s = "226"
+输出:3
+解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
+
+ +

示例 3:

+ +
+输入:s = "0"
+输出:0
+解释:没有字符映射到以 0 开头的数字。
+含有 0 的有效映射是 'J' -> "10" 和 'T'-> "20" 。
+由于没有字符,因此没有有效的方法对此进行解码,因为所有数字都需要映射。
+
+ +

示例 4:

+ +
+输入:s = "06"
+输出:0
+解释:"06" 不能映射到 "F" ,因为字符串含有前导 0("6""06" 在映射中并不等价)。
+ +

 

+ +

提示:

+ + +
Related Topics
  • 字符串
  • 动态规划
  • \n
  • 👍 696
  • 👎 0
  • \ No newline at end of file diff --git a/LeetCode/src/main/java/leetcode/editor/cn/doc/jie-ma-fang-fa-by-leetcode-solution-p8np.md b/LeetCode/src/main/java/leetcode/editor/cn/doc/jie-ma-fang-fa-by-leetcode-solution-p8np.md new file mode 100644 index 0000000..f70c15c --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/doc/jie-ma-fang-fa-by-leetcode-solution-p8np.md @@ -0,0 +1,263 @@ +#### 方法一:动态规划 + +**思路与算法** + +对于给定的字符串 *s*,设它的长度为 *n*,其中的字符从左到右依次为 ![s\[1\],s\[2\],\cdots,s\[n\] ](./p__s_1_,_s_2_,_cdots,_s_n__.png) 。我们可以使用动态规划的方法计算出字符串 *s* 的解码方法数。 + +具体地,设 *f_i* 表示字符串 *s* 的前 *i* 个字符 *s[1..i]* 的解码方法数。在进行状态转移时,我们可以考虑最后一次解码使用了 *s* 中的哪些字符,那么会有下面的两种情况: + +- 第一种情况是我们使用了一个字符,即 *s[i]* 进行解码,那么只要 ![s\[i\]\neq0 ](./p__s_i__neq_0_.png) ,它就可以被解码成 ![\text{A}\sim\text{I} ](./p__text{A}_sim_text{I}_.png) 中的某个字母。由于剩余的前 *i-1* 个字符的解码方法数为 *f_{i-1}*,因此我们可以写出状态转移方程: + + ![f_i=f_{i-1},\quad其中~s\[i\]\neq0 ](./p_______f_i_=_f_{i-1},_quad_其中_~_s_i__neq_0______.png) + +- 第二种情况是我们使用了两个字符,即 *s[i-1]* 和 *s[i]* 进行编码。与第一种情况类似,*s[i-1]* 不能等于 *0*,并且 *s[i-1]* 和 *s[i]* 组成的整数必须小于等于 *26*,这样它们就可以被解码成 ![\text{J}\sim\text{Z} ](./p__text{J}_sim_text{Z}_.png) 中的某个字母。由于剩余的前 *i-2* 个字符的解码方法数为 *f_{i-2}*,因此我们可以写出状态转移方程: + + ![f_i=f_{i-2},\quad其中~s\[i-1\]\neq0~并且~10\cdots\[i-1\]+s\[i\]\leq26 ](./p_______f_i_=_f_{i-2},_quad_其中_~_s_i-1__neq_0_~并且~_10cdot_s_i-1_+s_i__leq_26______.png) + + 需要注意的是,只有当 *i>1* 时才能进行转移,否则 *s[i-1]* 不存在。 + +将上面的两种状态转移方程在对应的条件满足时进行累加,即可得到 *f_i* 的值。在动态规划完成后,最终的答案即为 *f_n*。 + +**细节** + +动态规划的边界条件为: + +* +f_0 = 1 +* + +即**空字符串可以有 *1* 种解码方法,解码出一个空字符串**。 + +同时,由于在大部分语言中,字符串的下标是从 *0* 而不是 *1* 开始的,因此在代码的编写过程中,我们需要将所有字符串的下标减去 *1*,与使用的语言保持一致。 + +**代码** + +```C++ [sol11-C++] +class Solution { +public: + int numDecodings(string s) { + int n = s.size(); + vector f(n + 1); + f[0] = 1; + for (int i = 1; i <= n; ++i) { + if (s[i - 1] != '0') { + f[i] += f[i - 1]; + } + if (i > 1 && s[i - 2] != '0' && ((s[i - 2] - '0') * 10 + (s[i - 1] - '0') <= 26)) { + f[i] += f[i - 2]; + } + } + return f[n]; + } +}; +``` + +```Java [sol11-Java] +class Solution { + public int numDecodings(String s) { + int n = s.length(); + int[] f = new int[n + 1]; + f[0] = 1; + for (int i = 1; i <= n; ++i) { + if (s.charAt(i - 1) != '0') { + f[i] += f[i - 1]; + } + if (i > 1 && s.charAt(i - 2) != '0' && ((s.charAt(i - 2) - '0') * 10 + (s.charAt(i - 1) - '0') <= 26)) { + f[i] += f[i - 2]; + } + } + return f[n]; + } +} +``` + +```Python [sol11-Python3] +class Solution: + def numDecodings(self, s: str) -> int: + n = len(s) + f = [1] + [0] * n + for i in range(1, n + 1): + if s[i - 1] != '0': + f[i] += f[i - 1] + if i > 1 and s[i - 2] != '0' and int(s[i-2:i]) <= 26: + f[i] += f[i - 2] + return f[n] +``` + +```JavaScript [sol11-JavaScript] +var numDecodings = function(s) { + const n = s.length; + const f = new Array(n + 1).fill(0); + f[0] = 1; + for (let i = 1; i <= n; ++i) { + if (s[i - 1] !== '0') { + f[i] += f[i - 1]; + } + if (i > 1 && s[i - 2] != '0' && ((s[i - 2] - '0') * 10 + (s[i - 1] - '0') <= 26)) { + f[i] += f[i - 2]; + } + } + return f[n]; +}; +``` + +```go [sol11-Golang] +func numDecodings(s string) int { + n := len(s) + f := make([]int, n+1) + f[0] = 1 + for i := 1; i <= n; i++ { + if s[i-1] != '0' { + f[i] += f[i-1] + } + if i > 1 && s[i-2] != '0' && ((s[i-2]-'0')*10+(s[i-1]-'0') <= 26) { + f[i] += f[i-2] + } + } + return f[n] +} +``` + +```C [sol11-C] +int numDecodings(char* s) { + int n = strlen(s); + int f[n + 1]; + memset(f, 0, sizeof(f)); + f[0] = 1; + for (int i = 1; i <= n; ++i) { + if (s[i - 1] != '0') { + f[i] += f[i - 1]; + } + if (i > 1 && s[i - 2] != '0' && ((s[i - 2] - '0') * 10 + (s[i - 1] - '0') <= 26)) { + f[i] += f[i - 2]; + } + } + return f[n]; +} +``` + +注意到在状态转移方程中,*f_i* 的值仅与 *f_{i-1}* 和 *f_{i-2}* 有关,因此我们可以使用三个变量进行状态转移,省去数组的空间。 + +```C++ [sol12-C++] +class Solution { +public: + int numDecodings(string s) { + int n = s.size(); + // a = f[i-2], b = f[i-1], c = f[i] + int a = 0, b = 1, c; + for (int i = 1; i <= n; ++i) { + c = 0; + if (s[i - 1] != '0') { + c += b; + } + if (i > 1 && s[i - 2] != '0' && ((s[i - 2] - '0') * 10 + (s[i - 1] - '0') <= 26)) { + c += a; + } + tie(a, b) = {b, c}; + } + return c; + } +}; +``` + +```Java [sol12-Java] +class Solution { + public int numDecodings(String s) { + int n = s.length(); + // a = f[i-2], b = f[i-1], c=f[i] + int a = 0, b = 1, c = 0; + for (int i = 1; i <= n; ++i) { + c = 0; + if (s.charAt(i - 1) != '0') { + c += b; + } + if (i > 1 && s.charAt(i - 2) != '0' && ((s.charAt(i - 2) - '0') * 10 + (s.charAt(i - 1) - '0') <= 26)) { + c += a; + } + a = b; + b = c; + } + return c; + } +} +``` + +```Python [sol12-Python3] +class Solution: + def numDecodings(self, s: str) -> int: + n = len(s) + # a = f[i-2], b = f[i-1], c = f[i] + a, b, c = 0, 1, 0 + for i in range(1, n + 1): + c = 0 + if s[i - 1] != '0': + c += b + if i > 1 and s[i - 2] != '0' and int(s[i-2:i]) <= 26: + c += a + a, b = b, c + return c +``` + +```JavaScript [sol12-JavaScript] +var numDecodings = function(s) { + const n = s.length; + // a = f[i-2], b = f[i-1], c = f[i] + let a = 0, b = 1, c = 0; + for (let i = 1; i <= n; ++i) { + c = 0; + if (s[i - 1] !== '0') { + c += b; + } + if (i > 1 && s[i - 2] != '0' && ((s[i - 2] - '0') * 10 + (s[i - 1] - '0') <= 26)) { + c += a; + } + a = b; + b = c; + } + return c; +}; +``` + +```go [sol12-Golang] +func numDecodings(s string) int { + n := len(s) + // a = f[i-2], b = f[i-1], c = f[i] + a, b, c := 0, 1, 0 + for i := 1; i <= n; i++ { + c = 0 + if s[i-1] != '0' { + c += b + } + if i > 1 && s[i-2] != '0' && ((s[i-2]-'0')*10+(s[i-1]-'0') <= 26) { + c += a + } + a, b = b, c + } + return c +} +``` + +```C [sol12-C] +int numDecodings(char* s) { + int n = strlen(s); + // a = f[i-2], b = f[i-1], c = f[i] + int a = 0, b = 1, c; + for (int i = 1; i <= n; ++i) { + c = 0; + if (s[i - 1] != '0') { + c += b; + } + if (i > 1 && s[i - 2] != '0' && ((s[i - 2] - '0') * 10 + (s[i - 1] - '0') <= 26)) { + c += a; + } + a = b, b = c; + } + return c; +} +``` + +**复杂度分析** + +- 时间复杂度:*O(n)*,其中 *n* 是字符串 *s* 的长度。 + +- 空间复杂度:*O(n)* 或 *O(1)*。如果使用数组进行状态转移,空间复杂度为 *O(n)*;如果仅使用三个变量,空间复杂度为 *O(1)*。 \ No newline at end of file diff --git a/LeetCode/src/main/java/leetcode/editor/cn/doc/p_______f_i_=_f_{i-1},_quad_其中_~_s_i__neq_0______.png b/LeetCode/src/main/java/leetcode/editor/cn/doc/p_______f_i_=_f_{i-1},_quad_其中_~_s_i__neq_0______.png new file mode 100644 index 0000000000000000000000000000000000000000..7c18fd99df0eda0e39d6aeb65af449312872ce08 GIT binary patch literal 1369 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 XDBTr7`iP>E00000NkvXXu0mjflEcoX literal 0 HcmV?d00001 diff --git a/LeetCode/src/main/java/leetcode/editor/cn/doc/p__s_1_,_s_2_,_cdots,_s_n__.png b/LeetCode/src/main/java/leetcode/editor/cn/doc/p__s_1_,_s_2_,_cdots,_s_n__.png new file mode 100644 index 0000000000000000000000000000000000000000..2e74fad3fab409ab7e4c42566f8dd6a9859f3c62 GIT binary patch literal 876 zcmV-y1C#uTP)R8&+{GIA(0!pX7mCzEMpbXz6dfNjvN3u>?t(;r=k2E46bKoa zn!cat%0P4YZFvn|H-bprhe5yeg;;0PP6DnyyXslYB=CM69_Ax1=_raVtfek`QL!h#PFzH#RA5k$!Wi2dQTlY(o{PI_1tPlh7B1T*~v z%>J|5Pm@qP&u@dPXXf}UzHRne$#$*x+v*J5qqOZ>Z=7&rL(HDN*4GVTTV4sG^bL${ zzc18ryeEv(2b?~WPf4;KlGX7V_c%XNuXKzip?031!&c9h<9WBc68y9HEz~}n)&}gQ zNAN*WKTs+l?TLCN0cRaA5Z+g179OAz@eJ0Ijb1eve!E8uj2Ha~j z8mn}SCZTqopTkzqmIG$-j4zTyrq8Ce0or%)U>{RIQZ~k68yjNwEQDCyKM+RphmH@n zi6*Ddq}J(dtk=7121nNzX5393qe-Zp=jX81<8t^y-uB|zop}AB)7hf^oOUT-8yiA< z#^n|4XNEl!i1aev&*@o$SnW1v0W298!nQi4ZJLDIHoqs*gLR>Hm>MLj9?cO5b+sPP zZNu5xe<-kL=or=7>Ma&ry{xezv}d?}f%~Ol|HPk4cmn72EcjsXQ^!rz6Y3bu`15Am zO!9xmq))-_!3KRtuiaFKzzOm#liP+w@~ds&(>QkxO!P*Luk+V zdm0Zj^L8X(heDnXW3`Xdm%>bfhlyUVw+yfG9c@mh!Bd!N=fUN$!D(IV4U20%uIDUV z^(;k`a60n{T?8(N4NmJ?Z&+OGaXn|@s%I&hgzDhBtzrX~-XBMYi6Q*Ri`)T2G; z;i_jT@(1jw{&+1?3mH|taZ_}B$fS<3qN1W=iSrLuAtvcMBrB`{0000r~bO0007YNkla!K|31@QPINEMiKl36~7Qa8XK|EMzl*|;RnJ)MDZ0OVs&74H<3u5 zx3}Ki?qZQntSl_F5eqvj;hYIs*-Vn#ydpk?`$5Rff9CFHXJ(h1nyRR%m>7*T-69f` zb7}61_`^=$CzL(N6Y~iC?|pq-m^3p~n<#ZKKK z7&Yp5woi9Vq`8Cp&HZ3p?lBlsXT!d!)oR6JdhhEj+XT-od<_<|3$$;(Ho%)apBBSoxCiNlecXkLU)Flz?15~Hf<9sW9E>Gh4Z;&QH$Pn*1`3cDEhRV`kh^dQfev0KBxLHqAc5ho$>dTNbPRW zzWZ?l;Eh=I-cg$}X|Fq}+`WMIr5JXZI~8F^0$4HjKdyO8sSEHz978>Se&*dI$wL>1>=Dc=uI5 zrjPDEfb*Lvd%UjfQF`?G$-?G+(mjdbR2k+k1H0OY%^s?kffIlWfNmTX%AAA6-3%S) zrG%0V`H{%lRj`<+RR8CMk`4J0sO$~;DYPJjk`4KBbHj0bpXv+3BtJAOD*hAx0B3F$ U*O;E8`v3p{07*qoM6N<$f=`uK+yDRo literal 0 HcmV?d00001 diff --git a/LeetCode/src/main/java/leetcode/editor/cn/doc/p__text{A}_sim_text{I}_.png b/LeetCode/src/main/java/leetcode/editor/cn/doc/p__text{A}_sim_text{I}_.png new file mode 100644 index 0000000000000000000000000000000000000000..2dcff03977322fa173e55d1b4c9442b2069eebe4 GIT binary patch literal 461 zcmV;;0W$uHP)g*O(|sVc`Mw{0N%PXy)}qD#Q7UB}?mf%0c7OgW_(Od>l=h11 zMN$!Fo=I~8BV)quhssP)pKsx^HUq(L!JQqVwjwDjGX~%Jp!$!*aoiJ$+9VU^0upRf zdy(WWk_$77=c6p`9FzKq+9?&ON8wl9Gi7W=nq_Kds*+(j~J7x9UQ84|pP zvN}b59Jm-R?d5H?Iv7~n3$e#AU-x~u)O-HiCs&a-!VE*wLoW2z*HAX*(wtF0NAy@9 z0iPvbgF+8NVRz2cv>TfN;*Wg0Pp%@F(kuQPyBw0d<1YESBUEZ2Ns@l5L!J#NHig)0 z^r3b~(?teB(8-kDq&g&dh8dJ!~LWTQz;f{g;dYTD^s=~dW~7c3Mz9T(!q{e{Lo zsZSZ+lTzg`0s>aScQGR4$~9E#N~6ACw5Jb zhnB~d6N!sjtotek<=rwbtXtxV)!bQp5$q=;#e1>7DEVYB*k3O1Mbhk`@`1ex>sZ%C z;>U{gvz?IlaXScVq-~|xz*`r=kF_N!Riy2)E<*WR^u7!Jg4Ia+YI7$)}Z_FY;N}C