Generating all valid parenthesis












0















I want to create all valid parenthesis strings given an input number n. For example, if n=3, output should be as follows:



["((()))","(()())","(())()","()(())","()()()"]


My code for this problem is as follows:



private void allParenthesis(List<String> result, int n){
if(n == 1){
result.add("()");
return;
}
allParenthesis(result, n-1);

List<String> newResult = new ArrayList<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
System.out.println(newResult+" for n:"+n);
result = new ArrayList<String>(newResult);

}


And I use this function in the following function,



public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<String>();

allParenthesis(result,n);
return result;
}


But when I input n = 3, I get the following output,



["()"]


Where am I going wrong? Am I missing anything very simple?










share|improve this question























  • Did you try debugging?

    – shmosel
    Nov 14 '18 at 3:39











  • Yes, i did ... the print statements print [(()), ()(), ()()] for n:2 [(()), ()(), ()()] for n:3 which suggests that the result list is not being updated properly ... but it should because I modify it inside the function. I am not understanding why it does not get modified after I get the result list for n=2

    – mettleap
    Nov 14 '18 at 3:41
















0















I want to create all valid parenthesis strings given an input number n. For example, if n=3, output should be as follows:



["((()))","(()())","(())()","()(())","()()()"]


My code for this problem is as follows:



private void allParenthesis(List<String> result, int n){
if(n == 1){
result.add("()");
return;
}
allParenthesis(result, n-1);

List<String> newResult = new ArrayList<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
System.out.println(newResult+" for n:"+n);
result = new ArrayList<String>(newResult);

}


And I use this function in the following function,



public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<String>();

allParenthesis(result,n);
return result;
}


But when I input n = 3, I get the following output,



["()"]


Where am I going wrong? Am I missing anything very simple?










share|improve this question























  • Did you try debugging?

    – shmosel
    Nov 14 '18 at 3:39











  • Yes, i did ... the print statements print [(()), ()(), ()()] for n:2 [(()), ()(), ()()] for n:3 which suggests that the result list is not being updated properly ... but it should because I modify it inside the function. I am not understanding why it does not get modified after I get the result list for n=2

    – mettleap
    Nov 14 '18 at 3:41














0












0








0


2






I want to create all valid parenthesis strings given an input number n. For example, if n=3, output should be as follows:



["((()))","(()())","(())()","()(())","()()()"]


My code for this problem is as follows:



private void allParenthesis(List<String> result, int n){
if(n == 1){
result.add("()");
return;
}
allParenthesis(result, n-1);

List<String> newResult = new ArrayList<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
System.out.println(newResult+" for n:"+n);
result = new ArrayList<String>(newResult);

}


And I use this function in the following function,



public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<String>();

allParenthesis(result,n);
return result;
}


But when I input n = 3, I get the following output,



["()"]


Where am I going wrong? Am I missing anything very simple?










share|improve this question














I want to create all valid parenthesis strings given an input number n. For example, if n=3, output should be as follows:



["((()))","(()())","(())()","()(())","()()()"]


My code for this problem is as follows:



private void allParenthesis(List<String> result, int n){
if(n == 1){
result.add("()");
return;
}
allParenthesis(result, n-1);

List<String> newResult = new ArrayList<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
System.out.println(newResult+" for n:"+n);
result = new ArrayList<String>(newResult);

}


And I use this function in the following function,



public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<String>();

allParenthesis(result,n);
return result;
}


But when I input n = 3, I get the following output,



["()"]


Where am I going wrong? Am I missing anything very simple?







java recursion






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 14 '18 at 3:38









mettleapmettleap

1,065316




1,065316













  • Did you try debugging?

    – shmosel
    Nov 14 '18 at 3:39











  • Yes, i did ... the print statements print [(()), ()(), ()()] for n:2 [(()), ()(), ()()] for n:3 which suggests that the result list is not being updated properly ... but it should because I modify it inside the function. I am not understanding why it does not get modified after I get the result list for n=2

    – mettleap
    Nov 14 '18 at 3:41



















  • Did you try debugging?

    – shmosel
    Nov 14 '18 at 3:39











  • Yes, i did ... the print statements print [(()), ()(), ()()] for n:2 [(()), ()(), ()()] for n:3 which suggests that the result list is not being updated properly ... but it should because I modify it inside the function. I am not understanding why it does not get modified after I get the result list for n=2

    – mettleap
    Nov 14 '18 at 3:41

















Did you try debugging?

– shmosel
Nov 14 '18 at 3:39





Did you try debugging?

– shmosel
Nov 14 '18 at 3:39













Yes, i did ... the print statements print [(()), ()(), ()()] for n:2 [(()), ()(), ()()] for n:3 which suggests that the result list is not being updated properly ... but it should because I modify it inside the function. I am not understanding why it does not get modified after I get the result list for n=2

– mettleap
Nov 14 '18 at 3:41





Yes, i did ... the print statements print [(()), ()(), ()()] for n:2 [(()), ()(), ()()] for n:3 which suggests that the result list is not being updated properly ... but it should because I modify it inside the function. I am not understanding why it does not get modified after I get the result list for n=2

– mettleap
Nov 14 '18 at 3:41












3 Answers
3






active

oldest

votes


















3














You are losing the results that you have created and are not passing it through the recursion. I have fixed it and simplified to one function. Also using an array list will mean there are duplicates. For eg.



Str = "()";
newResult.add("()"+str); //this will result in ()()
newResult.add(str+"()"); //this will also result in the same


If you want the above results then keep using arraylist. if not i suggest using LinkedHashSet as set dont have duplicates and a linked once so that the order of insertion is maintained. HashSet can be used if you dont care about the ordering of the results.



I have provided both ArrayList and LinkedHashSet versions.



HashSet - No dups



private LinkedHashSet<String> generateParenthesis(int n){
if(n == 1){
LinkedHashSet<String> result = new LinkedHashSet<String>();
result.add("()");
return result;
}
LinkedHashSet<String> result = generateParenthesis(n-1);

LinkedHashSet<String> newResult = new LinkedHashSet<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


ArrayList - keep dups



private ArrayList<String> generateParenthesis(int n){
if(n == 1){
ArrayList<String> result = new ArrayList<String>();
result.add("()");
return result;
}
ArrayList<String> result = generateParenthesis(n-1);

ArrayList<String> newResult = new ArrayList<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


You can use this function like so.



LinkedHashSet<String> result = generateParenthesis(3);
System.out.println(result);





share|improve this answer


























  • Good work, but if you would explain a bit more about your answer, it would be useful for new readers, and this would also improve your answer's credibility.

    – PradyumanDixit
    Nov 14 '18 at 3:59











  • @PradyumanDixit I was just testing my solution and make changes. mettleap, if you want it to be two functions like your post let me know and i will adjust and add it to the answer. As you can see it can be done in function.

    – Mohammad C
    Nov 14 '18 at 4:36













  • I understand that somethings can just be done in one line or one method, but a bit of explaining makes it better for the new readers of Stack Overflow, and this I think would be great on our part. This answer looks great. Good job!

    – PradyumanDixit
    Nov 14 '18 at 4:46











  • Thank you for the answer :)

    – mettleap
    Nov 14 '18 at 16:45



















1














You are discarding your newResult.



Change



result = new ArrayList<String>(newResult);


to



result.clear();
result.addAll(newResult);





share|improve this answer
























  • Thanks a lot :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:47



















1














When you do



result = new ArrayList<String>(newResult);


You are updating the variable defined at allParenthesis,
the one you passed it from generateParenthesis remains unchanged.



Do this instead



result.clear();
result.addAll(newResult);





share|improve this answer
























  • Thank you :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:46











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292852%2fgenerating-all-valid-parenthesis%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























3 Answers
3






active

oldest

votes








3 Answers
3






active

oldest

votes









active

oldest

votes






active

oldest

votes









3














You are losing the results that you have created and are not passing it through the recursion. I have fixed it and simplified to one function. Also using an array list will mean there are duplicates. For eg.



Str = "()";
newResult.add("()"+str); //this will result in ()()
newResult.add(str+"()"); //this will also result in the same


If you want the above results then keep using arraylist. if not i suggest using LinkedHashSet as set dont have duplicates and a linked once so that the order of insertion is maintained. HashSet can be used if you dont care about the ordering of the results.



I have provided both ArrayList and LinkedHashSet versions.



HashSet - No dups



private LinkedHashSet<String> generateParenthesis(int n){
if(n == 1){
LinkedHashSet<String> result = new LinkedHashSet<String>();
result.add("()");
return result;
}
LinkedHashSet<String> result = generateParenthesis(n-1);

LinkedHashSet<String> newResult = new LinkedHashSet<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


ArrayList - keep dups



private ArrayList<String> generateParenthesis(int n){
if(n == 1){
ArrayList<String> result = new ArrayList<String>();
result.add("()");
return result;
}
ArrayList<String> result = generateParenthesis(n-1);

ArrayList<String> newResult = new ArrayList<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


You can use this function like so.



LinkedHashSet<String> result = generateParenthesis(3);
System.out.println(result);





share|improve this answer


























  • Good work, but if you would explain a bit more about your answer, it would be useful for new readers, and this would also improve your answer's credibility.

    – PradyumanDixit
    Nov 14 '18 at 3:59











  • @PradyumanDixit I was just testing my solution and make changes. mettleap, if you want it to be two functions like your post let me know and i will adjust and add it to the answer. As you can see it can be done in function.

    – Mohammad C
    Nov 14 '18 at 4:36













  • I understand that somethings can just be done in one line or one method, but a bit of explaining makes it better for the new readers of Stack Overflow, and this I think would be great on our part. This answer looks great. Good job!

    – PradyumanDixit
    Nov 14 '18 at 4:46











  • Thank you for the answer :)

    – mettleap
    Nov 14 '18 at 16:45
















3














You are losing the results that you have created and are not passing it through the recursion. I have fixed it and simplified to one function. Also using an array list will mean there are duplicates. For eg.



Str = "()";
newResult.add("()"+str); //this will result in ()()
newResult.add(str+"()"); //this will also result in the same


If you want the above results then keep using arraylist. if not i suggest using LinkedHashSet as set dont have duplicates and a linked once so that the order of insertion is maintained. HashSet can be used if you dont care about the ordering of the results.



I have provided both ArrayList and LinkedHashSet versions.



HashSet - No dups



private LinkedHashSet<String> generateParenthesis(int n){
if(n == 1){
LinkedHashSet<String> result = new LinkedHashSet<String>();
result.add("()");
return result;
}
LinkedHashSet<String> result = generateParenthesis(n-1);

LinkedHashSet<String> newResult = new LinkedHashSet<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


ArrayList - keep dups



private ArrayList<String> generateParenthesis(int n){
if(n == 1){
ArrayList<String> result = new ArrayList<String>();
result.add("()");
return result;
}
ArrayList<String> result = generateParenthesis(n-1);

ArrayList<String> newResult = new ArrayList<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


You can use this function like so.



LinkedHashSet<String> result = generateParenthesis(3);
System.out.println(result);





share|improve this answer


























  • Good work, but if you would explain a bit more about your answer, it would be useful for new readers, and this would also improve your answer's credibility.

    – PradyumanDixit
    Nov 14 '18 at 3:59











  • @PradyumanDixit I was just testing my solution and make changes. mettleap, if you want it to be two functions like your post let me know and i will adjust and add it to the answer. As you can see it can be done in function.

    – Mohammad C
    Nov 14 '18 at 4:36













  • I understand that somethings can just be done in one line or one method, but a bit of explaining makes it better for the new readers of Stack Overflow, and this I think would be great on our part. This answer looks great. Good job!

    – PradyumanDixit
    Nov 14 '18 at 4:46











  • Thank you for the answer :)

    – mettleap
    Nov 14 '18 at 16:45














3












3








3







You are losing the results that you have created and are not passing it through the recursion. I have fixed it and simplified to one function. Also using an array list will mean there are duplicates. For eg.



Str = "()";
newResult.add("()"+str); //this will result in ()()
newResult.add(str+"()"); //this will also result in the same


If you want the above results then keep using arraylist. if not i suggest using LinkedHashSet as set dont have duplicates and a linked once so that the order of insertion is maintained. HashSet can be used if you dont care about the ordering of the results.



I have provided both ArrayList and LinkedHashSet versions.



HashSet - No dups



private LinkedHashSet<String> generateParenthesis(int n){
if(n == 1){
LinkedHashSet<String> result = new LinkedHashSet<String>();
result.add("()");
return result;
}
LinkedHashSet<String> result = generateParenthesis(n-1);

LinkedHashSet<String> newResult = new LinkedHashSet<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


ArrayList - keep dups



private ArrayList<String> generateParenthesis(int n){
if(n == 1){
ArrayList<String> result = new ArrayList<String>();
result.add("()");
return result;
}
ArrayList<String> result = generateParenthesis(n-1);

ArrayList<String> newResult = new ArrayList<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


You can use this function like so.



LinkedHashSet<String> result = generateParenthesis(3);
System.out.println(result);





share|improve this answer















You are losing the results that you have created and are not passing it through the recursion. I have fixed it and simplified to one function. Also using an array list will mean there are duplicates. For eg.



Str = "()";
newResult.add("()"+str); //this will result in ()()
newResult.add(str+"()"); //this will also result in the same


If you want the above results then keep using arraylist. if not i suggest using LinkedHashSet as set dont have duplicates and a linked once so that the order of insertion is maintained. HashSet can be used if you dont care about the ordering of the results.



I have provided both ArrayList and LinkedHashSet versions.



HashSet - No dups



private LinkedHashSet<String> generateParenthesis(int n){
if(n == 1){
LinkedHashSet<String> result = new LinkedHashSet<String>();
result.add("()");
return result;
}
LinkedHashSet<String> result = generateParenthesis(n-1);

LinkedHashSet<String> newResult = new LinkedHashSet<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


ArrayList - keep dups



private ArrayList<String> generateParenthesis(int n){
if(n == 1){
ArrayList<String> result = new ArrayList<String>();
result.add("()");
return result;
}
ArrayList<String> result = generateParenthesis(n-1);

ArrayList<String> newResult = new ArrayList<String>();
for(String str : result){
newResult.add("("+str+")");
newResult.add("()"+str);
newResult.add(str+"()");
}
result.addAll(newResult);
return result;
}


You can use this function like so.



LinkedHashSet<String> result = generateParenthesis(3);
System.out.println(result);






share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 14 '18 at 4:39

























answered Nov 14 '18 at 3:55









Mohammad CMohammad C

1,1951312




1,1951312













  • Good work, but if you would explain a bit more about your answer, it would be useful for new readers, and this would also improve your answer's credibility.

    – PradyumanDixit
    Nov 14 '18 at 3:59











  • @PradyumanDixit I was just testing my solution and make changes. mettleap, if you want it to be two functions like your post let me know and i will adjust and add it to the answer. As you can see it can be done in function.

    – Mohammad C
    Nov 14 '18 at 4:36













  • I understand that somethings can just be done in one line or one method, but a bit of explaining makes it better for the new readers of Stack Overflow, and this I think would be great on our part. This answer looks great. Good job!

    – PradyumanDixit
    Nov 14 '18 at 4:46











  • Thank you for the answer :)

    – mettleap
    Nov 14 '18 at 16:45



















  • Good work, but if you would explain a bit more about your answer, it would be useful for new readers, and this would also improve your answer's credibility.

    – PradyumanDixit
    Nov 14 '18 at 3:59











  • @PradyumanDixit I was just testing my solution and make changes. mettleap, if you want it to be two functions like your post let me know and i will adjust and add it to the answer. As you can see it can be done in function.

    – Mohammad C
    Nov 14 '18 at 4:36













  • I understand that somethings can just be done in one line or one method, but a bit of explaining makes it better for the new readers of Stack Overflow, and this I think would be great on our part. This answer looks great. Good job!

    – PradyumanDixit
    Nov 14 '18 at 4:46











  • Thank you for the answer :)

    – mettleap
    Nov 14 '18 at 16:45

















Good work, but if you would explain a bit more about your answer, it would be useful for new readers, and this would also improve your answer's credibility.

– PradyumanDixit
Nov 14 '18 at 3:59





Good work, but if you would explain a bit more about your answer, it would be useful for new readers, and this would also improve your answer's credibility.

– PradyumanDixit
Nov 14 '18 at 3:59













@PradyumanDixit I was just testing my solution and make changes. mettleap, if you want it to be two functions like your post let me know and i will adjust and add it to the answer. As you can see it can be done in function.

– Mohammad C
Nov 14 '18 at 4:36







@PradyumanDixit I was just testing my solution and make changes. mettleap, if you want it to be two functions like your post let me know and i will adjust and add it to the answer. As you can see it can be done in function.

– Mohammad C
Nov 14 '18 at 4:36















I understand that somethings can just be done in one line or one method, but a bit of explaining makes it better for the new readers of Stack Overflow, and this I think would be great on our part. This answer looks great. Good job!

– PradyumanDixit
Nov 14 '18 at 4:46





I understand that somethings can just be done in one line or one method, but a bit of explaining makes it better for the new readers of Stack Overflow, and this I think would be great on our part. This answer looks great. Good job!

– PradyumanDixit
Nov 14 '18 at 4:46













Thank you for the answer :)

– mettleap
Nov 14 '18 at 16:45





Thank you for the answer :)

– mettleap
Nov 14 '18 at 16:45













1














You are discarding your newResult.



Change



result = new ArrayList<String>(newResult);


to



result.clear();
result.addAll(newResult);





share|improve this answer
























  • Thanks a lot :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:47
















1














You are discarding your newResult.



Change



result = new ArrayList<String>(newResult);


to



result.clear();
result.addAll(newResult);





share|improve this answer
























  • Thanks a lot :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:47














1












1








1







You are discarding your newResult.



Change



result = new ArrayList<String>(newResult);


to



result.clear();
result.addAll(newResult);





share|improve this answer













You are discarding your newResult.



Change



result = new ArrayList<String>(newResult);


to



result.clear();
result.addAll(newResult);






share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 14 '18 at 3:55









KartikKartik

3,66231435




3,66231435













  • Thanks a lot :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:47



















  • Thanks a lot :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:47

















Thanks a lot :) ... appreciate your help

– mettleap
Nov 14 '18 at 16:47





Thanks a lot :) ... appreciate your help

– mettleap
Nov 14 '18 at 16:47











1














When you do



result = new ArrayList<String>(newResult);


You are updating the variable defined at allParenthesis,
the one you passed it from generateParenthesis remains unchanged.



Do this instead



result.clear();
result.addAll(newResult);





share|improve this answer
























  • Thank you :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:46
















1














When you do



result = new ArrayList<String>(newResult);


You are updating the variable defined at allParenthesis,
the one you passed it from generateParenthesis remains unchanged.



Do this instead



result.clear();
result.addAll(newResult);





share|improve this answer
























  • Thank you :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:46














1












1








1







When you do



result = new ArrayList<String>(newResult);


You are updating the variable defined at allParenthesis,
the one you passed it from generateParenthesis remains unchanged.



Do this instead



result.clear();
result.addAll(newResult);





share|improve this answer













When you do



result = new ArrayList<String>(newResult);


You are updating the variable defined at allParenthesis,
the one you passed it from generateParenthesis remains unchanged.



Do this instead



result.clear();
result.addAll(newResult);






share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 14 '18 at 3:55









JuanJuan

525




525













  • Thank you :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:46



















  • Thank you :) ... appreciate your help

    – mettleap
    Nov 14 '18 at 16:46

















Thank you :) ... appreciate your help

– mettleap
Nov 14 '18 at 16:46





Thank you :) ... appreciate your help

– mettleap
Nov 14 '18 at 16:46


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292852%2fgenerating-all-valid-parenthesis%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

A Topological Invariant for $pi_3(U(n))$